84 lines
4.6 KiB
TypeScript
84 lines
4.6 KiB
TypeScript
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')
|
||
})
|
||
})
|