\Tests\FeatureFileOpsLedgerTest

文件运维台账

被测对象:MaintainFileService::list(sort/order/min_size/created_from/orphan 筛选)与 MaintainFileService::overview(七字段聚合、豁免守卫) 守护约定:sort 白名单 file_size asc 升序(id desc 稳定次序);min_size>0 生效; created_from 按天闭区间;orphan=1 排除被配置引用文件(已存值+默认值两来源); overview 十一字段计数正确(含 dup_group_count/dup_wasted_bytes/dangling_count/by_type)、非豁免抛 403; duplicates 按浪费字节降序聚族(族内 created_at 升序、summary 全量); dangling-refs trash/missing 双态覆盖、refs 结构同 refs()。

Summary

Methods
Properties
Constants
test_sort_by_file_size_asc()
test_min_size_filter()
test_created_from_filter()
test_orphan_filter_excludes_referenced_files()
test_overview_returns_seven_fields_with_correct_counts()
test_overview_dup_dangling_and_by_type_fields()
test_overview_forbidden_for_non_exempt_user()
test_duplicates_groups_with_summary_and_ordering()
test_dangling_refs_covers_trash_and_missing()
test_duplicates_and_dangling_refs_forbidden_for_non_exempt()
test_backfill_hash_command()
test_backfill_hash_dry_run_writes_nothing()
test_backfill_hash_exits_when_algo_none()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
No protected properties found
N/A
makeUser()
makeFile()
makeImageRef()
makeImageDefaultRef()
listIds()
$exempt
$plain
N/A

Properties

$exempt

$exempt : \App\Models\SysUser

Type

SysUser

$plain

$plain : \App\Models\SysUser

Type

SysUser

Methods

test_sort_by_file_size_asc()

test_sort_by_file_size_asc() : void

验证 sort=file_size&order=asc 按大小升序。

test_min_size_filter()

test_min_size_filter() : void

验证 min_size 过滤生效(仅保留 file_size >= min_size)。

test_created_from_filter()

test_created_from_filter() : void

验证 created_from 过滤生效(whereDate >= 起期)。

test_orphan_filter_excludes_referenced_files()

test_orphan_filter_excludes_referenced_files() : void

验证 orphan=1 时被配置引用的文件不出现、未引用的出现。

test_overview_returns_seven_fields_with_correct_counts()

test_overview_returns_seven_fields_with_correct_counts() : void

验证 overview 返回十一字段且计数正确。

test_overview_dup_dangling_and_by_type_fields()

test_overview_dup_dangling_and_by_type_fields() : void

验证 overview 扩展四字段:重复族统计、悬空计数、by_type 聚合。

test_overview_forbidden_for_non_exempt_user()

test_overview_forbidden_for_non_exempt_user() : void

验证 overview 非豁免用户抛 403。

test_duplicates_groups_with_summary_and_ordering()

test_duplicates_groups_with_summary_and_ordering() : void

验证 duplicates 聚族:族数/族内文件数/wasted 计算/按 wasted 降序/族内 created_at 升序。

test_dangling_refs_covers_trash_and_missing()

test_dangling_refs_covers_trash_and_missing() : void

验证 dangling-refs:trash 与 missing 两种悬空都出现,refs 结构含 group_code/key/via。

test_duplicates_and_dangling_refs_forbidden_for_non_exempt()

test_duplicates_and_dangling_refs_forbidden_for_non_exempt() : void

验证 duplicates / dangling-refs 非豁免用户抛 403。

test_backfill_hash_command()

test_backfill_hash_command() : void

验证 files:backfill-hash:正常空哈希文件回填、物理缺失跳过、回收站不动。

test_backfill_hash_dry_run_writes_nothing()

test_backfill_hash_dry_run_writes_nothing() : void

验证 --dry-run 只统计不写库。

test_backfill_hash_exits_when_algo_none()

test_backfill_hash_exits_when_algo_none() : void

验证 file.hash_algo=none 时命令警告退出且不改数据。

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

makeUser()

makeUser(string  $username, bool  $isSuper = false) : \App\Models\SysUser

Parameters

string $username
bool $isSuper

Returns

\App\Models\SysUser —

makeFile()

makeFile(\App\Models\SysUser  $user, array  $attrs = []) : \App\Models\SysFile

造一条正常文件记录(created_at 可指定;物理路径随意——接口不读盘)

Parameters

\App\Models\SysUser $user
array $attrs

Returns

\App\Models\SysFile —

makeImageRef()

makeImageRef(\App\Models\SysFile  $file) : void

造一个 image 类型配置定义 + 已存值引用指定文件 id(attachRefCounts 来源①)

Parameters

\App\Models\SysFile $file

makeImageDefaultRef()

makeImageDefaultRef(string  $fileId) : void

造一个 image 类型配置定义,默认值引用指定文件 id 字符串(attachRefCounts 来源②)

Parameters

string $fileId

listIds()

listIds(array  $filters) : array

豁免视角取正常列表 id 序列

Parameters

array $filters

Returns

array —