WeChatDeveloper/tests/CacheKeyTest.php
Anyon 27c6d03cbd test: 迁移测试目录并补充协议层用例
- 将 src/Tests 迁移到根目录 tests,并同步 composer autoload-dev 与 phpunit 配置。

- 补充 raw/download/upload、微信支付签名下载、XML 嵌套重复节点和消息加解密异常用例。

- 保持测试命名空间 We\Tests,统一通过 tests/bootstrap.php 引导 Composer 自动加载。
2026-05-08 00:29:23 +08:00

95 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
/**
* SDK 缓存键生成规则测试。
*/
namespace We\Tests;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use We\Exception\WechatException;
use We\Support\CacheKey;
use We\Support\TokenCacheKey;
/**
* SDK 缓存键生成规则测试用例。
*/
#[CoversClass(CacheKey::class)]
final class CacheKeyTest extends TestCase
{
/**
* 测试缓存完整键由三段组成。
*/
public function testComposeThreeSegments(): void
{
$logical = TokenCacheKey::wechatPlatformAccessToken('wx_demo', '');
$full = CacheKey::compose('myapp', 'wechat.platform', $logical);
$this->assertSame('myapp:wechat.platform:' . $logical, $full);
}
/**
* 测试缓存键段会去除多余冒号。
*/
public function testComposeTrimsColonNoiseOnSegments(): void
{
$logical = TokenCacheKey::wechatServiceComponentAccessToken('wx_service');
$this->assertSame('ns:wechat.service:' . $logical, CacheKey::compose('::ns::', ':::wechat.service::', $logical));
}
/**
* 测试微信 Token 逻辑键使用 platform、wxapp、service 统一命名。
*/
public function testWechatTokenLogicalKeysFollowChannelNames(): void
{
$this->assertSame(
'wechat:app:wx_platform:platform:access_token',
TokenCacheKey::wechatPlatformAccessToken('wx_platform'),
);
$this->assertSame(
'wechat:app:wx_wxapp:wxapp:access_token',
TokenCacheKey::wechatWxappAccessToken('wx_wxapp'),
);
$this->assertSame(
'wechat:app:wx_service:service:component_access_token',
TokenCacheKey::wechatServiceComponentAccessToken('wx_service'),
);
$this->assertSame(
'wechat:app:wx_service:service:authorizer:wx_authorizer:access_token',
TokenCacheKey::wechatServiceAuthorizerAccessToken('wx_service', 'wx_authorizer'),
);
}
/**
* 测试缓存键前缀为空时抛出异常。
*/
public function testComposeThrowsWhenPrefixEmpty(): void
{
$this->expectException(WechatException::class);
$this->expectExceptionMessage('通用前缀');
CacheKey::compose('', 'wechat.wxapp', 'wechat:app:x:wxapp:access_token');
}
/**
* 测试缓存键通道段为空时抛出异常。
*/
public function testComposeThrowsWhenChannelEmpty(): void
{
$this->expectException(WechatException::class);
$this->expectExceptionMessage('通道段');
CacheKey::compose('app', '', 'wechat:app:x:wxapp:access_token');
}
/**
* 测试缓存键逻辑段为空时抛出异常。
*/
public function testComposeThrowsWhenLogicalEmpty(): void
{
$this->expectException(WechatException::class);
$this->expectExceptionMessage('逻辑段');
CacheKey::compose('app', 'wechat.platform', ' ');
}
}