mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 16:28:12 +00:00
69 lines
2.6 KiB
TypeScript
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);
|
|
});
|
|
});
|