Constants

OLD_PASSWORD

OLD_PASSWORD = 'OldPass123'

NEW_PASSWORD

NEW_PASSWORD = 'NewPass456'

Properties

$md5Key

$md5Key : string

当前会话 md5Key(openSession 登记,tearDown 清理)

Type

string

$extraKeys

$extraKeys : array

手工构造的额外会话 key(tearDown 清理,防 Redis 残留污染其他测试/环境)

Type

array

Methods

test_change_password_success_revokes_all_sessions()

test_change_password_success_revokes_all_sessions() : void

改密成功:密码更新 + 全部会话强制下线 + 密码台账落账

test_change_password_wrong_old_rejected()

test_change_password_wrong_old_rejected() : void

旧密码错误:400 拒绝且密码不变

test_change_password_weak_new_rejected()

test_change_password_weak_new_rejected() : void

新密码强度不足:422(配置驱动最小长度)

test_change_password_mismatch_confirmed_rejected()

test_change_password_mismatch_confirmed_rejected() : void

新密码两次不一致:422

test_update_profile_success()

test_update_profile_success() : void

资料更新成功:昵称/邮箱/手机号落库

test_update_profile_email_conflict_rejected()

test_update_profile_email_conflict_rejected() : void

邮箱被他人占用:422 唯一冲突

test_update_profile_invalid_avatar_rejected()

test_update_profile_invalid_avatar_rejected() : void

头像文件不存在:400

test_update_profile_ignores_outside_fields()

test_update_profile_ignores_outside_fields() : void

越权字段被白名单忽略:username 不可经本人接口修改

test_sessions_lists_current_session()

test_sessions_lists_current_session() : void

会话列表:当前会话 current=true、返回完整会话标识(显示层自行截断)

test_revoke_other_session_success()

test_revoke_other_session_success() : void

下线非当前会话:该会话 Redis 键删除,当前会话不受影响

test_revoke_others_success()

test_revoke_others_success() : void

批量下线其他会话:全部非当前会话删除并返回数量,当前会话保留

test_revoke_others_none_is_noop()

test_revoke_others_none_is_noop() : void

无其他会话时批量下线:幂等不报错(Redis 可能有跨测试残留,不断言具体数量)

test_revoke_current_session_rejected()

test_revoke_current_session_rejected() : void

下线当前会话:400 拒绝(应使用退出登录)

openSession()

openSession(\App\Models\SysUser  $user) : string

建立会话:用户 token_key 指向 md5Key,Redis 存签名 JWT(同 JwtCookieMiddlewareTest 模式)

Parameters

\App\Models\SysUser $user

Returns

string —

authedJson()

authedJson(string  $method, string  $uri, array  $data = []) : \Illuminate\Testing\TestResponse

带认证的请求(call 显式 cookies 走全链路;withCookie 在本项目测试环境失效,勿用)

Parameters

string $method
string $uri
array $data

Returns

\Illuminate\Testing\TestResponse —

cleanupSessionKeys()

cleanupSessionKeys() : void

会话 Redis 键清理(tearDown 调一行;extra 键各测试自理)

requireRedis()

requireRedis() : void

Redis 依赖探针:直连 Redis 的测试(限流/会话/验证码)在无 Redis 环境(如 CI) 跳过而非失败——其余用例不受影响。CI 可设 TEST_REQUIRE_REDIS=1 强制模式: Redis 不可达即失败而非跳过,安全回归套件不允许静默消失。

buildCacheRegistry()

buildCacheRegistry(array  $items) : void

建缓存注册表最小 schema(td_sys_cache)并灌入注册项。

测试跑 sqlite :memory:,生产迁移含 PostgreSQL 专属 DDL 跑不通(DataScopeServiceTest 同因自建 schema); 而 CacheManager::registry() 现已从数据库表读取——凡走注册表的测试(remember/get/key/失效推导) 必须在 setUp 先调用本方法,否则注册表为空、remember 未登记名会走「自动登记」路径。

Parameters

array $items

setUp()

setUp() : void

tearDown()

tearDown() : void

plantExtraSession()

plantExtraSession(\App\Models\SysUser  $user) : string

手工构造一条会话(模拟其他设备登录),登记 extraKeys 供 tearDown 清理

Parameters

\App\Models\SysUser $user

Returns

string —

makeUser()

makeUser(array  $attrs = []) : \App\Models\SysUser

创建带盐密码用户(登录校验 Hash::check(password.salt) 同规;salt 全表唯一)

Parameters

array $attrs

Returns

\App\Models\SysUser —