WeChatDeveloper/tests/CacheKeyTest.php
Anyon cdf868deec style(header): 统一核心契约缓存和测试文件格式
- 按 PHP-CS-Fixer 规则补齐核心契约、异常、缓存和 XML 工具文件头。

- 规范导入、PHPDoc 类型顺序与注释格式,保持项目头信息不丢失。

- 同步整理缓存键、缓存实现、XML 编解码相关测试和 bootstrap 格式。
2026-05-08 11:33:26 +08:00

98 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
/**
* This file is part of HyperfAdmin.
*
* @Link https://thinkadmin.top
* @Author Anyon<zoujingli@qq.com>
*/
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 缓存键生成规则测试用例。
* @internal
*/
#[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', ' ');
}
}