\Tests\FeatureLogOperMiddlewareTest

操作日志中间件

被测对象:LogOperMiddleware::handle(放行后同步落 td_log_sys_oper) 守护约定:已登录操作按模块/动作/业务类型归类;password 类参数掩码; 响应 code/message 摘要与 biz_code 一致;trace_id 恒生成; 写库失败仅告警、响应原样返回(审计不阻断业务)。

Summary

Methods
Properties
Constants
test_success_query_is_recorded()
test_create_is_recorded_with_masked_params()
test_failure_response_records_biz_code_and_error_msg()
test_export_request_maps_export_business_type()
test_session_id_from_token_cookie()
test_module_label_from_dict_overrides_fallback()
test_write_failure_does_not_break_response()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
No protected properties found
N/A
user()
middleware()
No private properties found
N/A

Methods

test_success_query_is_recorded()

test_success_query_is_recorded() : void

成功查询:QUERY 语义、模块中文名、trace_id 生成、响应摘要与耗时落库

test_create_is_recorded_with_masked_params()

test_create_is_recorded_with_masked_params() : void

新增操作:ADD 语义、敏感参数掩码、201 响应摘要

test_failure_response_records_biz_code_and_error_msg()

test_failure_response_records_biz_code_and_error_msg() : void

失败响应:biz_code 对齐响应 code,error_msg 记录失败消息

test_export_request_maps_export_business_type()

test_export_request_maps_export_business_type() : void

导出接口:EXPORT 语义 + 业务类型 4

test_session_id_from_token_cookie()

test_session_id_from_token_cookie() : void

会话指纹:token_id Cookie 经 SHA-256 派生落 session_id(原始值禁止入日志防劫持)

test_module_label_from_dict_overrides_fallback()

test_module_label_from_dict_overrides_fallback() : void

模块中文名字典化:字典 log_oper_module 命中时优先于兜底常量

test_write_failure_does_not_break_response()

test_write_failure_does_not_break_response() : void

写库失败不阻断业务:表缺失时响应仍原样返回

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

建 td_log_sys_oper 最小 schema(sqlite :memory: 自建,与生产迁移列对齐)

user()

user() : \App\Models\SysUser

构造已登录测试用户(无库内行,仅守卫身份)

Returns

\App\Models\SysUser —

middleware()

middleware() : \App\Http\Middleware\LogOperMiddleware

构造被测中间件(无依赖注入,直接实例化)

Returns

\App\Http\Middleware\LogOperMiddleware —