52 lines
2.2 KiB
TypeScript
52 lines
2.2 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import { fileURLToPath } from 'node:url'
|
|
import test from 'node:test'
|
|
|
|
function read(relativePath: string) {
|
|
return readFileSync(fileURLToPath(new URL(relativePath, import.meta.url)), 'utf8').replace(
|
|
/\r\n/g,
|
|
'\n',
|
|
)
|
|
}
|
|
|
|
const panel = read('../src/pages/admin/panels/ConsignmentConfigPanel.tsx')
|
|
const page = read('../src/pages/worker/WorkerConsignmentPage.tsx')
|
|
|
|
test('管理端:数量开关语义必须是「允许修改寄售数量」/「可改 / 固定 1」', () => {
|
|
assert.ok(panel.includes('label="允许修改寄售数量"'), '文案必须改成是否允许修改')
|
|
assert.ok(panel.includes('extra="关闭后打手端数量固定为 1,输入框禁用"'), '必须说明关闭后的行为')
|
|
assert.ok(panel.includes('checkedChildren="可改"'), '开启文案应为「可改」')
|
|
assert.ok(panel.includes('unCheckedChildren="固定 1"'), '关闭文案应为「固定 1」')
|
|
assert.ok(!panel.includes('label="显示寄售数量"'), '旧的「显示寄售数量」必须移除')
|
|
})
|
|
|
|
test('打手端:数量字段必须始终渲染,关闭时禁用并灰显 1', () => {
|
|
assert.ok(
|
|
page.includes('const quantityLocked = selectedProfile?.config.fields.quantity === false'),
|
|
'必须由 fields.quantity === false 推导锁定状态',
|
|
)
|
|
assert.ok(page.includes('disabled={quantityLocked}'), '锁定时输入框必须禁用')
|
|
assert.ok(
|
|
page.includes("extra={quantityLocked ? '该分类数量固定为 1,不可修改' : undefined}"),
|
|
'锁定时要给出固定 1 的提示',
|
|
)
|
|
assert.ok(
|
|
!page.includes('selectedProfile?.config.fields.quantity !== false ? ('),
|
|
'不能再按开关隐藏数量字段',
|
|
)
|
|
assert.ok(page.includes('initialValue={1}'), '数量默认值必须为 1')
|
|
assert.ok(
|
|
page.includes('const quantityForDeposit = quantityLocked ? 1 :'),
|
|
'锁定后押金必须按 1 件计算',
|
|
)
|
|
})
|
|
|
|
test('打手端:数量始终显示,价格区固定三列,不再按数量切两列', () => {
|
|
assert.ok(page.includes('className="worker-consignment-price-grid"'), '价格区必须固定三列')
|
|
assert.ok(
|
|
!page.includes("selectedProfile?.config.fields.quantity === false ? ' is-two' : ''"),
|
|
'不能再用 is-two 布局',
|
|
)
|
|
})
|