import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' import test from 'node:test' test('人工成本配置直接展示标准商品,不再要求按日期扫描内部 SKU', async () => { const source = await readFile( new URL('../src/pages/admin/cost-center/ManualSkuConfigPanel.tsx', import.meta.url), 'utf8', ) assert.ok(source.includes('人工标准商品由人工配置自动创建')) assert.ok(source.includes("title: '人工标准商品'")) assert.ok(source.includes('SKU:{row.skuKey}')) assert.ok(!source.includes('扫描内部 SKU')) assert.ok(!source.includes('DatePicker.RangePicker')) assert.ok(!source.includes('rematchAdminManualFulfillments')) }) test('新增人工 SKU 直接保存配置,由后端自动创建标准商品', async () => { const source = await readFile( new URL('../src/pages/admin/cost-center/ManualSkuConfigPanel.tsx', import.meta.url), 'utf8', ) assert.ok(source.includes('新增人工 SKU')) assert.ok(source.includes('openCreateConfig')) assert.ok(source.includes('name="skuKey"')) assert.ok(source.includes('保存时自动创建标准商品')) assert.ok(source.includes('manualSku')) assert.ok(source.includes("returnTo.startsWith('/admin/fulfillment-channel')")) }) test('人工商品不再允许手工创建或执行旧批量归档', async () => { const [productSource, serviceSource, queueSource, shellSource] = await Promise.all([ readFile( new URL('../src/pages/admin/cost-center/ProductCatalogPanel.tsx', import.meta.url), 'utf8', ), readFile( new URL('../../backend/src/services/cost-center/product-catalog-service.ts', import.meta.url), 'utf8', ), readFile( new URL('../src/pages/admin/AdminFulfillmentChannelPage.tsx', import.meta.url), 'utf8', ), readFile( new URL('../src/pages/admin/cost-center/CostCenterShell.tsx', import.meta.url), 'utf8', ), ]) assert.ok(!productSource.includes('归档跨渠道重复商品')) assert.ok(!productSource.includes('归档纯历史人工商品')) assert.ok(productSource.includes("productSourceFilter === 'manual'")) assert.ok(productSource.includes('manualNew=1')) assert.ok(productSource.includes('人工标准商品由人工 SKU 配置自动创建')) assert.ok(serviceSource.includes('cost_manual_product_managed_by_config')) assert.ok(queueSource.includes('manualSku=${encodeURIComponent(sku)}')) assert.ok(queueSource.includes("returnTo=${encodeURIComponent('/admin/fulfillment-channel')}")) assert.ok(shellSource.includes("searchParams.get('scope')")) assert.ok(shellSource.includes("searchParams.get('tab')")) })