import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { nextShopKeyPageAfterDelete, shopKeyDeleteConfirmText, shopKeyDeleteTargetName, } from '../src/pages/shop/shop-key-delete.ts' import type { ShopKeyItem } from '../src/pages/shop/shop-dto.ts' test('test_task_087_shop_key_delete_normal_primary_path', () => { // 正常主路径:删除确认文案以紫鸟账号名落文案,随成功删除刷新到有效页。 const item = { id: 7, ziniaoAccountName: 'blue_agent' } as ShopKeyItem assert.equal(shopKeyDeleteTargetName(item), 'blue_agent') assert.equal(shopKeyDeleteConfirmText(item), '确定删除店铺密钥“blue_agent”吗?') assert.equal(nextShopKeyPageAfterDelete(2, 15, 31), 2, '中间页删除后仍在原页') }) test('test_task_087_shop_key_delete_normal_variant_input', () => { // 正常变体:账号名为空时用 id 兜底;末页仅剩一条删除后回退一页。 const item = { id: 12, ziniaoAccountName: '' } as ShopKeyItem assert.equal(shopKeyDeleteTargetName(item), '#12') assert.equal(shopKeyDeleteConfirmText(item), '确定删除店铺密钥“#12”吗?') assert.equal(nextShopKeyPageAfterDelete(2, 15, 16), 1, '第 2 页最后一条删除后回到第 1 页') }) test('test_task_087_shop_key_delete_repeated_is_idempotent', () => { // 正常重复:确认文案/翻页计算稳定、不改入参。 const item = { id: 1, ziniaoAccountName: 'A' } as ShopKeyItem assert.equal(shopKeyDeleteConfirmText(item), shopKeyDeleteConfirmText(item)) const before = { page: 5, pageSize: 15, totalBefore: 61 } assert.equal(nextShopKeyPageAfterDelete(before.page, before.pageSize, before.totalBefore), nextShopKeyPageAfterDelete(before.page, before.pageSize, before.totalBefore)) assert.deepEqual(before, { page: 5, pageSize: 15, totalBefore: 61 }) }) test('test_task_087_shop_key_delete_boundary_empty_input', () => { // 边界空值:删除后总数恰为空时回到第 1 页。 assert.equal(nextShopKeyPageAfterDelete(1, 15, 1), 1) assert.equal(nextShopKeyPageAfterDelete(2, 15, 0), 1, '空列表请求页钳到 1') }) test('test_task_087_shop_key_delete_boundary_single_item', () => { // 边界单元素:首页单条删除后仍为第 1 页。 assert.equal(nextShopKeyPageAfterDelete(1, 15, 1), 1) }) test('test_task_087_shop_key_delete_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:页大小无效时按默认页大小参与末页判断。 assert.equal(nextShopKeyPageAfterDelete(2, 0, 16), 1, '页大小非正回默认后按末页钳制') }) test('test_task_087_shop_key_delete_invalid_input_rejected', () => { // 异常输入:空记录不产出可误删的确认文案。 assert.equal(shopKeyDeleteTargetName(null as unknown as ShopKeyItem), '') assert.equal(shopKeyDeleteConfirmText(null as unknown as ShopKeyItem), null) }) test('test_task_087_shop_key_delete_dependency_failure_returns_actionable_message', () => { // 依赖失败/删除走 adapter:删除模型纯逻辑;adapter DELETE /api/admin/shop-keys/{id}。 const model = readSource('src/pages/shop/shop-key-delete.ts') assert.equal(/axios|http\.|vue/.test(model), false, '删除模型保持纯逻辑') const api = readSource('src/pages/shop/shop-key-api.ts') assert.match(api, /deleteShopKey/) assert.match(api, /http\.delete/) assert.match(api, /\/api\/admin\/shop-keys/) })