Files
admin-web/src/modules/finance/pages/FinancePresentation.test.ts
T
2026-08-14 12:50:42 +08:00

84 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'
import { describe, expect, it } from 'vitest'
const settlement = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceFormalSettlementPage.vue'), 'utf8')
const financeRoutes = readFileSync(resolve(process.cwd(), 'src/modules/finance/routes.ts'), 'utf8')
const accounts = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceCustomerAccountsView.vue'), 'utf8')
const statements = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceCustomerStatementsView.vue'), 'utf8')
const arap = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceCustomerArapView.vue'), 'utf8')
const manual = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceManualPage.vue'), 'utf8')
describe('finance presentation governance', () => {
it('shows customer names instead of internal customer IDs in formal settlements', () => {
expect(settlement).toContain('customerName(detail.value.customerId, detail.value.customerName)')
expect(settlement).toContain('detailPartyName()')
expect(settlement).toContain('activeCustomers.value.map')
expect(settlement).not.toContain('{{ selected.customerId }}')
})
it('uses prototype-defined standalone settlement details and modal partial payments', () => {
expect(financeRoutes).toContain("finance/settlement-receivables/:settlementId")
expect(financeRoutes).toContain("finance/settlement-payables/:settlementId")
expect(financeRoutes).toContain('showPageHeading: false')
expect(settlement).toContain('class="settlement-detail-page"')
expect(settlement).toContain('返回列表')
expect(settlement).not.toContain('AppDrawer')
expect(settlement).toContain('登记后剩余余额')
expect(settlement).toContain('remainingAfter(receiptForm.amount)')
expect(settlement).toContain('remainingAfter(paymentForm.amount)')
})
it('uses optional all-customer filters without a customer-selection blocker', () => {
for (const source of [settlement, statements, arap]) {
expect(source).toContain("placeholder: '全部客户'")
expect(source).not.toContain('全客户查询暂不可用')
expect(source).not.toContain('empty-text="请选择客户查询')
}
})
it('uses active-customer name selectors across all formal finance pages', () => {
for (const source of [accounts, arap, statements, settlement]) {
expect(source).toContain("type: 'select'")
expect(source).toContain("label: '客户名称'")
expect(source).toContain('label: item.tenantName')
expect(source).not.toContain('tenantCode} · ${item.tenantName')
}
expect(accounts).not.toContain("key: 'keyword', type: 'input'")
})
it('translates source codes and provides reason placeholders', () => {
expect(arap).toContain('financeSourceTypeLabel(detail.sourceType)')
expect(arap).toContain('financeOperationActionLabel(log.action)')
expect(arap).toContain('financeOperationResultLabel(log.result)')
expect(arap).toContain('financeDirectionLabel(row.direction)')
expect(arap).toContain('financeDirectionLabel(detail.direction)')
expect(arap).not.toContain("detail.direction === 'RECEIVABLE' ? '应收' : '应付'")
expect(arap).toContain('请填写驳回原因')
expect(arap).toContain('请说明参与或排除结算的原因')
})
it('does not expose the uploaded voucher file ID in the form', () => {
expect(manual).toContain('凭证已上传,创建失败时可直接重试')
expect(manual).not.toContain('凭证 fileId:')
})
it('exposes frozen G3 controls without unavailable placeholders', () => {
expect(settlement).not.toContain('生成{{ title }}')
expect(settlement).not.toContain('接口尚未提供,暂不可操作')
expect(statements).toContain('生成对账单')
expect(statements).toContain('createReconciliationStatement')
expect(statements).toContain('actionReconciliationStatement')
expect(statements).toContain('<template #toolbar-actions>')
expect(statements).toContain('aria-label="更多对账单操作"')
expect(statements).toContain('adjustmentLines: selected.map')
expect(statements).not.toContain('disabled title="接口尚未提供')
})
it('uses bordered striped tables for statement business details', () => {
expect(statements).toContain(':data="detail.lines" size="small" border stripe')
expect(statements).toContain(':data="detail.revisions" size="small" border stripe')
expect(statements).toContain(':data="adjustLines" size="small" max-height="420" border stripe')
})
})