37 lines
1.8 KiB
JavaScript
37 lines
1.8 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import test from 'node:test'
|
|
|
|
const source = readFileSync(new URL('./InboundBillingPanel.vue', import.meta.url), 'utf8')
|
|
|
|
test('renders loading, pending, isolated error, and published states', () => {
|
|
assert.match(source, /v-if="props\.loading"/)
|
|
assert.match(source, /v-else-if="props\.error"/)
|
|
assert.match(source, /role="alert"/)
|
|
assert.match(source, /v-else-if="props\.unavailable \|\| !props\.data"/)
|
|
assert.match(source, /role="status"/)
|
|
assert.match(source, /待分柜 · 费用已发布/)
|
|
assert.match(source, /\$emit\('retry'\)/)
|
|
})
|
|
|
|
test('shows the confirmed merchant inbound and fee fields without write actions', () => {
|
|
for (const label of ['入仓码', '平台收货仓', '实际毛重', '实测体积', '托盘与库位', '换算与精度', '最终计费量', '基础费用', '附加费用', '费用合计', '平台备注']) {
|
|
assert.match(source, new RegExp(label))
|
|
}
|
|
assert.match(source, /formatInboundMoney\(props\.data\.latestFee\.totalAmount/)
|
|
assert.match(source, /formatConversionPrecision\(/)
|
|
assert.doesNotMatch(source, /确认费用|调整费用|发送费用|下载照片/)
|
|
assert.doesNotMatch(source, /internalNotes|statusHistory|files/)
|
|
assert.match(source, /latestFee\.ruleCode/)
|
|
assert.match(source, /latestFee\.rateCode/)
|
|
assert.match(source, /latestFee\.chargeRuleVersion/)
|
|
assert.match(source, /latestFee\.carrierRateVersion/)
|
|
})
|
|
|
|
test('stacks core information for 720 and 360 pixel layouts', () => {
|
|
assert.match(source, /@media \(max-width: 720px\)/)
|
|
assert.match(source, /\.inbound-overview, \.inbound-measurements, \.fee-calculation-grid \{ grid-template-columns: 1fr;/)
|
|
assert.match(source, /\.inbound-billing-state \.el-button \{[^}]*min-height: 44px;/)
|
|
assert.match(source, /@media \(max-width: 360px\)/)
|
|
})
|