import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { parseCreatedUserId } from '../src/api/users-model.ts' test('test_task_046_create_user_request_normal_primary_path', () => { // 正常主路径:Java ApiResponse 信封 data 即为新建用户 id。 const id = parseCreatedUserId({ success: true, message: '用户创建成功', data: 7 }) assert.equal(id, 7) }) test('test_task_046_create_user_request_normal_variant_input', () => { // 正常变体:已解包/直传数字同样可归一;submit 序列化为 camelCase body 后 POST 创建端点。 assert.equal(parseCreatedUserId({ data: 42 }), 42) assert.equal(parseCreatedUserId(12), 12) const mod = readSource('src/pages/account/user-create-adapter.ts') assert.match(mod, /toCreateUserRequest/) assert.match(mod, /api\/admin\/user/) }) test('test_task_046_create_user_request_normal_repeated_operation_is_idempotent', () => { // 正常重复:解析不改输入、结果稳定,不会重复触发副作用。 const payload = { success: true, message: '用户创建成功', data: 11 } assert.equal(parseCreatedUserId(payload), 11) assert.equal(parseCreatedUserId(payload), 11) assert.deepEqual(payload, { success: true, message: '用户创建成功', data: 11 }) }) test('test_task_046_create_user_request_boundary_empty_input', () => { // 边界空值:无 data 或空负载按可读错误拒绝,不崩溃。 assert.throws(() => parseCreatedUserId({}), /创建用户响应异常/) assert.throws(() => parseCreatedUserId(undefined as never), /创建用户响应异常/) }) test('test_task_046_create_user_request_boundary_single_item', () => { // 边界单元素:最小合法用户 id=1 正常返回。 assert.equal(parseCreatedUserId({ success: true, data: 1 }), 1) }) test('test_task_046_create_user_request_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:id 必须为正整数;0/null/缺 data 均被拒绝。 assert.throws(() => parseCreatedUserId({ success: true, data: 0 }), /创建用户响应异常/) assert.throws(() => parseCreatedUserId({ success: true, data: null }), /创建用户响应异常/) assert.throws(() => parseCreatedUserId({ success: true, message: '用户创建成功' }), /创建用户响应异常/) }) test('test_task_046_create_user_request_invalid_input_rejected', () => { // 异常输入:success=false 抛后端 message;非数字 data(如字符串 id)被拒绝。 assert.throws(() => parseCreatedUserId({ success: false, message: '用户名已存在' }), /用户名已存在/) assert.throws(() => parseCreatedUserId({ success: true, data: '7' }), /创建用户响应异常/) }) test('test_task_046_create_user_request_dependency_failure_returns_actionable_message', () => { // 依赖失败:提交先经表单校验(不发请求)、序列化后 POST 创建端点;失败交给调用方,不吞异常。 const mod = readSource('src/pages/account/user-create-adapter.ts') assert.match(mod, /import \{ http \} from '@\/api\/http'/) assert.match(mod, /validateCreateUserForm/) assert.match(mod, /toCreateUserRequest/) assert.match(mod, /http\.post/) assert.match(mod, /parseCreatedUserId/) assert.equal(/\.catch\(/.test(mod), false, 'adapter 不吞异常,交由调用方提示') // 表单模型保持纯逻辑、不带 axios/http(任务 45 约束不回退)。 const model = readSource('src/pages/account/user-create-model.ts') assert.equal(/axios|from '\.\.\/\.\.\/api\/http'/.test(model), false) })