mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 16:28:12 +00:00
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import { ETHIOPIAN_REGIONS, normalizeRegion } from '@edr/types';
|
|
|
|
/**
|
|
* normalizeRegion lives in @edr/types (no jest there), but it exists to keep
|
|
* eTrade autofill from feeding UpdateProfileDto a region its @IsIn will reject.
|
|
* That contract is an API concern, so it is guarded here.
|
|
*/
|
|
describe('normalizeRegion', () => {
|
|
it('passes through every canonical region unchanged', () => {
|
|
for (const region of ETHIOPIAN_REGIONS) {
|
|
expect(normalizeRegion(region)).toBe(region);
|
|
}
|
|
});
|
|
|
|
it.each([
|
|
['ADDIS ABABA', 'Addis Ababa'],
|
|
['Addis ababa', 'Addis Ababa'],
|
|
[' addis ababa ', 'Addis Ababa'],
|
|
['oromoia', 'Oromia'],
|
|
['OROMIYA', 'Oromia'],
|
|
['gambella', 'Gambela'],
|
|
['TIGRAI', 'Tigray'],
|
|
['benishangul gumuz', 'Benishangul-Gumuz'],
|
|
])('resolves the variant %s', (input, expected) => {
|
|
expect(normalizeRegion(input)).toBe(expected);
|
|
});
|
|
|
|
it('maps a zone name in the region slot back to its parent region', () => {
|
|
// eTrade's own placeholder data does this — "EASTERN TIGRAY" is a zone.
|
|
expect(normalizeRegion('EASTERN TIGRAY')).toBe('Tigray');
|
|
expect(normalizeRegion('North Wollo')).toBe('Amhara');
|
|
});
|
|
|
|
it.each([
|
|
['a city, not a region', 'Arba Minch'],
|
|
['unknown text', 'Nowhere Land'],
|
|
['empty', ''],
|
|
['whitespace only', ' '],
|
|
['null', null],
|
|
['undefined', undefined],
|
|
])('returns null for %s rather than guessing', (_label, input) => {
|
|
expect(normalizeRegion(input as string | null | undefined)).toBeNull();
|
|
});
|
|
|
|
it('never returns a value outside the canonical set', () => {
|
|
const samples = ['ADDIS ABABA', 'oromoia', 'EASTERN TIGRAY', 'garbage', ''];
|
|
for (const s of samples) {
|
|
const out = normalizeRegion(s);
|
|
if (out !== null) {
|
|
expect(ETHIOPIAN_REGIONS).toContain(out);
|
|
}
|
|
}
|
|
});
|
|
});
|