Files
edr-platform/apps/edr-freight-api/src/contracts/contract-template.registry.spec.ts

69 lines
2.6 KiB
TypeScript

import {
CONTRACT_TEMPLATE_KEYS,
CONTRACT_TEMPLATE_REGISTRY,
getTemplateMeta,
isValidTemplateKey,
} from './contract-template.registry';
describe('ContractTemplateRegistry', () => {
it('defines exactly 24 template keys', () => {
expect(CONTRACT_TEMPLATE_KEYS).toHaveLength(24);
expect(Object.keys(CONTRACT_TEMPLATE_REGISTRY)).toHaveLength(24);
});
it('keys match the direction_freight_currency_service pattern', () => {
for (const key of CONTRACT_TEMPLATE_KEYS) {
expect(isValidTemplateKey(key)).toBe(true);
}
});
it('each meta has non-empty obligations and article1 scope', () => {
for (const key of CONTRACT_TEMPLATE_KEYS) {
const meta = CONTRACT_TEMPLATE_REGISTRY[key]!;
expect(meta.clientObligations.length).toBeGreaterThan(0);
expect(meta.providerObligations.length).toBeGreaterThan(0);
expect(meta.article1.scope.length).toBeGreaterThan(0);
expect(meta.article1.objective.length).toBeGreaterThan(0);
expect(meta.contractDocuments.length).toBeGreaterThan(0);
}
});
it('IMP_CON_ETB_TRANSPORT_ONLY retains import container flagship clauses', () => {
const meta = getTemplateMeta('IMP_CON_ETB_TRANSPORT_ONLY');
expect(meta.direction).toBe('IMP');
expect(meta.freight).toBe('CON');
expect(meta.article1.objective).toContain('SGTD');
expect(meta.article1.objective).toContain('empty container return');
const clientText = meta.clientObligations.join(' ');
expect(clientText).toContain('Djibouti Nagad');
const providerText = meta.providerObligations.join(' ');
expect(providerText).toContain('seven (7) calendar days');
});
it('EXP_CON_USD_TRANSPORT_ONLY uses export-oriented article1', () => {
const meta = getTemplateMeta('EXP_CON_USD_TRANSPORT_ONLY');
expect(meta.direction).toBe('EXP');
expect(meta.article1.objective).toContain('SGTD');
expect(meta.providerObligations.join(' ')).not.toContain(
'Return empty containers from Dire Dawa',
);
});
it('FORWARDING adds scope and provider obligations', () => {
const transport = getTemplateMeta('IMP_CON_ETB_TRANSPORT_ONLY');
const forwarding = getTemplateMeta('IMP_CON_ETB_FORWARDING');
expect(forwarding.article1.scope.length).toBeGreaterThan(
transport.article1.scope.length,
);
expect(forwarding.providerObligations.length).toBeGreaterThan(
transport.providerObligations.length,
);
});
it('getTemplateMeta fallback includes clause arrays for unknown keys', () => {
const meta = getTemplateMeta('UNKNOWN_KEY');
expect(meta.clientObligations.length).toBeGreaterThan(0);
expect(meta.article1.scope.length).toBeGreaterThan(0);
});
});