import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import { fileURLToPath } from 'node:url' import { isArchivedExpenseClaim } from '../src/utils/expenseClaimArchive.js' test('isArchivedExpenseClaim recognizes finance archive stage', () => { assert.equal( isArchivedExpenseClaim({ status: 'approved', approval_stage: '归档入账' }), true ) }) test('isArchivedExpenseClaim ignores in-progress claims', () => { assert.equal( isArchivedExpenseClaim({ status: 'submitted', approval_stage: '财务审批' }), false ) }) test('archive center is wired into navigation and api client', () => { const navigationScript = readFileSync( fileURLToPath(new URL('../src/composables/useNavigation.js', import.meta.url)), 'utf8' ) const reimbursementsService = readFileSync( fileURLToPath(new URL('../src/services/reimbursements.js', import.meta.url)), 'utf8' ) assert.match(navigationScript, /id:\s*'archive'/) assert.match(reimbursementsService, /\/reimbursements\/claims\/archives/) }) test('archive center uses generic archive category and type wording', () => { const archiveView = readFileSync( fileURLToPath(new URL('../src/views/ArchiveCenterView.vue', import.meta.url)), 'utf8' ) const archiveScript = readFileSync( fileURLToPath(new URL('../src/views/scripts/ArchiveCenterView.js', import.meta.url)), 'utf8' ) assert.match(archiveScript, /const tabs = \[ARCHIVE_TAB_ALL, ARCHIVE_TAB_REIMBURSEMENT\]/) assert.match(archiveScript, /const ARCHIVE_TAB_REIMBURSEMENT = '报销归档'/) assert.match(archiveScript, /archiveType:\s*ARCHIVE_TYPE_REIMBURSEMENT/) assert.match(archiveScript, /archiveTypeCode:\s*ARCHIVE_TYPE_REIMBURSEMENT_CODE/) assert.doesNotMatch(archiveScript, /'差旅报销'/) assert.doesNotMatch(archiveScript, /'招待报销'/) assert.doesNotMatch(archiveScript, /'其他费用'/) assert.match(archiveView, /placeholder="搜索单号、申请人、部门、归档类型\.\.\."/) assert.match(archiveView, /