mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 04:50:54 +00:00
- Introduced HazardDeclarationPanel component to display dangerous goods declaration details. - Updated URL constants to include CLEARANCE_PROCEED endpoint for re-requesting operations. - Enhanced permissions to include hazardous approval roles for contract approvals. - Integrated HazardDeclarationPanel into ContractRequestDetailPage and ContractClearanceDetailPage. - Added proceedToOperation method in bookings service for handling operation re-requests. - Updated contract forms and schemas to include hazard class and UN number fields. - Implemented validation for hazardous contracts in the contract creation flow. - Added expiry notice functionality for contracts nearing validity end. - Created tests for expiry notice calculations and labels. - Updated UI components to reflect hazardous cargo information and validation errors.
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { ForbiddenException } from '@nestjs/common';
|
|
|
|
import {
|
|
assertCanApproveContractStep,
|
|
canEditContractStep,
|
|
} from './freight-permission.util';
|
|
import { FREIGHT_PERMS } from '../seed/freight-permissions.registry';
|
|
|
|
const userWith = (...keys: string[]) => ({
|
|
permissions: keys.map((key) => ({ key })),
|
|
});
|
|
|
|
describe('hazardous contract approval steps', () => {
|
|
it('rejects an approver who only holds ordinary contract-approve permissions', () => {
|
|
// The blanket "any contract approve permission" fallback must NOT reach
|
|
// dangerous goods — that is the whole point of the dedicated desks.
|
|
const lineStaff = userWith(FREIGHT_PERMS.contracts.approveLineStaff);
|
|
|
|
expect(() =>
|
|
assertCanApproveContractStep(lineStaff, 'HAZARDOUS_APPROVAL_ONE'),
|
|
).toThrow(ForbiddenException);
|
|
expect(canEditContractStep(lineStaff, 'HAZARDOUS_APPROVAL_ONE')).toBe(false);
|
|
});
|
|
|
|
it('accepts only the matching hazardous permission', () => {
|
|
const first = userWith(FREIGHT_PERMS.contracts.hazardousApprovalOne);
|
|
|
|
expect(() =>
|
|
assertCanApproveContractStep(first, 'HAZARDOUS_APPROVAL_ONE'),
|
|
).not.toThrow();
|
|
// Holding step one does not confer step two.
|
|
expect(() =>
|
|
assertCanApproveContractStep(first, 'HAZARDOUS_APPROVAL_TWO'),
|
|
).toThrow(ForbiddenException);
|
|
});
|
|
|
|
it('does not let a hazardous approver stand in for the commercial chain', () => {
|
|
const hazardOnly = userWith(
|
|
FREIGHT_PERMS.contracts.hazardousApprovalOne,
|
|
FREIGHT_PERMS.contracts.hazardousApprovalTwo,
|
|
);
|
|
|
|
expect(() => assertCanApproveContractStep(hazardOnly, 'CEO')).toThrow(
|
|
ForbiddenException,
|
|
);
|
|
});
|
|
});
|