const integrationsRoutes = require('../../../src/routes/integrations'); describe('Integrations procurement ERP route helpers', () => { const { canReadPurchaseRequest, ensureProcurementTargetEligible, normalizeProcurementTargets, } = integrationsRoutes.__testables; it('normalizes procurement targets in fixed order', () => { expect( normalizeProcurementTargets({ targets: ['archive_summary', 'commitment_journal', 'archive_summary'], }), ).toEqual(['commitment_journal', 'archive_summary']); }); it('respects purchase read permission rules', () => { const purchaseRequest = { applicant_id: 'employee-1', submitter_id: 'employee-2', }; expect( canReadPurchaseRequest( { employee: { id: 'employee-1', permissionCodes: ['procurement.view_own'] } }, purchaseRequest, ), ).toBe(true); expect( canReadPurchaseRequest( { employee: { id: 'other', permissionCodes: ['procurement.view_own'] } }, purchaseRequest, ), ).toBe(false); expect( canReadPurchaseRequest( { employee: { id: 'other', permissionCodes: ['integration.manage', 'procurement.view_all'] } }, purchaseRequest, ), ).toBe(true); }); it('rejects commitment target when purchase is not approved', () => { expect(() => ensureProcurementTargetEligible('commitment_journal', { purchaseRequest: { status: 'reviewing' }, }), ).toThrow('参数校验失败'); }); it('rejects archive targets when archive is missing', () => { expect(() => ensureProcurementTargetEligible('accrual_journal', { purchaseRequest: { status: 'approved', order_archive: null }, }), ).toThrow('参数校验失败'); }); });