diff --git a/src/shared/dictionaries/transform.test.ts b/src/shared/dictionaries/transform.test.ts index 968ddd35..2f746493 100644 --- a/src/shared/dictionaries/transform.test.ts +++ b/src/shared/dictionaries/transform.test.ts @@ -94,3 +94,120 @@ describe("transformDictionaries — filtering", () => { expect([...d.otherCityCodes]).toEqual(["PAR"]); }); }); + +describe("transformDictionaries — enrichment", () => { + it("picks localized city name from title[lang]", () => { + const d = transformDictionaries( + { + regions: [], + countries: [], + cities: [ + { code: "MOW", title: { ru: "Москва", en: "Moscow" }, country_code: "RU", has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + airports: [ + { code: "SVO", city_code: "MOW", title: { ru: "Шереметьево", en: "Sheremetyevo" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + }, + "en", + ); + + expect(d.cities[0]!.name).toBe("Moscow"); + expect(d.cities[0]!.airports[0]!.name).toBe("Sheremetyevo"); + }); + + it("looks up countryName from countries dictionary", () => { + const d = transformDictionaries( + { + regions: [], + countries: [{ code: "RU", title: { ru: "Россия", en: "Russia" }, world_region_id: 500374 }], + cities: [ + { code: "MOW", title: { ru: "Москва" }, country_code: "RU", has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + airports: [ + { code: "SVO", city_code: "MOW", title: { ru: "Шереметьево" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + }, + "en", + ); + + expect(d.cities[0]!.countryName).toBe("Russia"); + }); + + it("sorts a city's airports by localized name", () => { + const d = transformDictionaries( + { + regions: [], + countries: [], + cities: [ + { code: "MOW", title: { ru: "Москва" }, country_code: "RU", has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + airports: [ + { code: "SVO", city_code: "MOW", title: { ru: "Шереметьево" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + { code: "DME", city_code: "MOW", title: { ru: "Домодедово" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + { code: "VKO", city_code: "MOW", title: { ru: "Внуково" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + }, + "ru", + ); + + expect(d.cities[0]!.airports.map((a) => a.code)).toEqual(["VKO", "DME", "SVO"]); + }); +}); + +describe("transformDictionaries — lookup maps", () => { + it("keys lookup maps by uppercase", () => { + const d = transformDictionaries( + { + regions: [], + countries: [], + cities: [ + { code: "mow", title: { ru: "Москва" }, country_code: "RU", has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + airports: [ + { code: "svo", city_code: "mow", title: { ru: "Шереметьево" }, has_afl_flights: true, location: { lat: 55, lon: 37 } }, + ], + }, + "ru", + ); + + expect(d.cityByCode.get("MOW")?.code).toBe("mow"); + expect(d.airportByCode.get("SVO")?.code).toBe("svo"); + }); +}); + +describe("transformDictionaries — regions", () => { + it("drops Australia region (world_region_id 500373)", () => { + const d = transformDictionaries( + { + regions: [ + { world_region_id: 500373, title: { ru: "Австралия" } }, + { world_region_id: 500374, title: { ru: "Россия" } }, + ], + countries: [], + cities: [], + airports: [], + }, + "ru", + ); + + expect(d.regions.map((r) => r.id)).toEqual([500374]); + }); + + it("places Russia region first, others alphabetical", () => { + const d = transformDictionaries( + { + regions: [ + { world_region_id: 500374, title: { ru: "Россия" } }, + { world_region_id: 1, title: { ru: "Азия" } }, + { world_region_id: 2, title: { ru: "Европа" } }, + ], + countries: [], + cities: [], + airports: [], + }, + "ru", + ); + + expect(d.regions.map((r) => r.id)).toEqual([500374, 1, 2]); + }); +});