This commit is contained in:
wujinliang
2026-08-25 22:08:59 +08:00
parent f702d1b988
commit 57de615717
13 changed files with 199 additions and 15 deletions
@@ -7,6 +7,7 @@ import { enableAutoUnmount, flushPromises, mount } from '@vue/test-utils'
import { afterAll, afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import { useAuthStore } from '@/core/auth/auth'
import { ApiResponseError } from '@/shared/api/http'
import { createPlatformExportTask } from '@/modules/downloads'
import { listPlatformTenants } from '@/modules/iam'
import { showExportTaskCreatedDialog } from '@/shared/components/exportTaskCreatedDialog'
@@ -292,6 +293,30 @@ describe('FinanceCustomerStatementsView', () => {
expect(router.currentRoute.value).toMatchObject({ name: 'finance-customer-statement-detail', params: { statementId: '502' } })
})
it('keeps the generation dialog open with a customer-friendly message when no billable fees exist', async () => {
const permissions = ['platform:finance:customer-statement:list', 'platform:finance:reconciliation:create', 'platform:customer:list']
const { wrapper } = await mountPage(permissions)
const vm = wrapper.vm as unknown as {
createOpen: boolean
createError: { message: string } | null
createForm: { customerId: string; periodStart: string; periodEnd: string; generationMode: string; feeSourceIds: string[] }
openCreate(): void
createStatement(): Promise<void>
}
vm.openCreate()
vm.createForm.customerId = '10001'
vm.createForm.generationMode = 'BY_CUTOFF'
vm.createForm.periodStart = '2026-08-01'
vm.createForm.periodEnd = '2026-08-25'
vi.mocked(createReconciliationStatement).mockRejectedValueOnce(new ApiResponseError('没有符合结算条件的CNY应收费用来源', 'FIN_409'))
await vm.createStatement()
await flushPromises()
expect(vm.createOpen).toBe(true)
expect(vm.createError?.message).toContain('没有可生成的应收费用')
expect(document.body.textContent).toContain('请调整账期或选择其他客户后重试')
})
it('uses statement detail snapshots without a second fee-source request or technical trace fields', async () => {
const { wrapper } = await mountPage(['platform:finance:customer-statement:list'])
await (wrapper.vm as unknown as { openDetail(row: FinanceStatementReadModel): Promise<void> }).openDetail(statement)