60 行
1.8 KiB
JavaScript
60 行
1.8 KiB
JavaScript
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('参数校验失败');
|
|
});
|
|
});
|