import { test } from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { mockBaseData } from '../components/baseData/mockBaseData' /** * 人员「删除」的口径(P2 C46)。 * * 真服务端的 DELETE /api/athletes/{id} 是软删除:只把 active 置 0,人员、报名与成绩一行不动 * (repo.go 的 deleteAthlete);示例数据却把人从内存里 splice 掉,两边行为相反。 * 现在 mock 与真库同口径;页面上的入口只有「彻底删除」(purge)。 * * 同时钉住 `useBaseData.removeAthlete` 这条零调用方的死链路已经删掉。 */ test('示例数据的软删除只置为停用,人员仍在名单里', () => { const victim = mockBaseData.listAthletes().find((athlete) => athlete.active) assert.ok(victim !== undefined, '示例数据里应当有启用状态的运动员') mockBaseData.removeAthlete(victim.id) const after = mockBaseData.listAthletes().find((athlete) => athlete.id === victim.id) assert.ok(after !== undefined, '软删除不能把人从名单里抹掉(与真服务端一致)') assert.equal(after.active, false) assert.equal(after.name, victim.name) }) test('软删除不存在的人仍然报错(不要静默成功)', () => { assert.throws(() => mockBaseData.removeAthlete(999999), /不存在/) }) const USE_BASE_DATA_SOURCE = readFileSync( new URL('../components/baseData/useBaseData.ts', import.meta.url), 'utf8', ) test('useBaseData 不再暴露没有调用方的 removeAthlete', () => { assert.doesNotMatch(USE_BASE_DATA_SOURCE, /removeAthlete/) assert.match(USE_BASE_DATA_SOURCE, /purgeAthlete/) })