import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { aggregateDrawerRows, drawerSummaryOf } from '../src/pages/tasks/duplicate-console-logic.ts' // 验收反馈:店铺重复检测对齐 reference —— 本轮补齐 P0 缺口: // 分组筛选生效、抽屉聚合+汇总徽章、台账计数打开即显示、撞款计数走后端 total_dup、矩阵表头吸顶。 test('align_dup_console_group_filter_wired', () => { const api = readSource('src/pages/tasks/duplicate-console-api.ts') assert.match(api, /query\.group = group/, 'console 查询携带 group 参数') const page = readSource('src/pages/tasks/DuplicateCheckPage.vue') assert.match(page, /group: filter\.group\.trim\(\)/, '页面筛选把 group 传给查询') }) test('align_dup_console_group_filter_backend', () => { const ctrl = readSource('../backend-java/src/main/java/com/nanri/aiimage/modules/shopduplicatecheck/controller/AdminShopDataDuplicateCheckController.java') assert.match(ctrl, /@RequestParam\(name = "group"/, '后端 console/ledger 接收 group 参数') assert.match(ctrl, /withGroupFilter\(visibleKeys, scan, group\)/, '端点按分组裁剪可见店铺') const service = readSource('../backend-java/src/main/java/com/nanri/aiimage/modules/shopduplicatecheck/service/ShopDataDuplicateCheckQueryService.java') assert.match(service, /withGroupFilter/, 'service 提供分组裁剪方法') assert.match(service, /分组筛选/, '分组筛选留中文排查日志') }) test('align_dup_console_drawer_aggregation', () => { const rows = aggregateDrawerRows([ { asin: 'A', date: '2026-09-02 10:00', price: '1', brand: 'B', shopName: '店1', groupName: '组1', countryCodes: [], country: 'DE' }, { asin: 'A', date: '2026-09-01 10:00', price: '1', brand: 'B', shopName: '店1', groupName: '组1', countryCodes: [], country: 'DE' }, { asin: 'A', date: '2026-09-03 10:00', price: '1', brand: 'B', shopName: '店2', groupName: '组1', countryCodes: [], country: 'UK' }, ]) assert.equal(rows.length, 2, '按店铺×站点聚合') assert.equal(rows[0].count, 2, '同店同站次数累加') assert.deepEqual(rows[0].times, ['2026-09-01 10:00', '2026-09-02 10:00'], '时间升序') const summary = drawerSummaryOf(rows.flatMap((row) => row.times.map((time) => ({ asin: 'A', date: time, price: '1', brand: 'B', shopName: row.shopName, groupName: '组1', countryCodes: [], country: row.country })))) assert.equal(summary.shopCount, 2) assert.equal(summary.totalRecords, 3) assert.equal(summary.earliest, '2026-09-01 10:00') }) test('align_dup_console_drawer_template', () => { const page = readSource('src/pages/tasks/DuplicateCheckPage.vue') assert.match(page, /drawerAggRows/, '抽屉渲染聚合行') assert.match(page, /drawerSummary/, '抽屉渲染汇总徽章') assert.match(page, /次上架/, '汇总含 N 次上架') assert.match(page, /