UNPKG

@bangladeshi/bangladesh-address

Version:

A simple npm package for Bangladesh's administrative divisions, districts, upazilas, and metropolitan thanas.

194 lines (193 loc) 9.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("../index"); const division_name_1 = require("../division/types/division-name"); describe("Data Integrity", () => { describe("Division counts", () => { it("should have exactly 8 divisions", () => { expect((0, index_1.allDivision)()).toHaveLength(8); }); it("should match DivisionName enum values", () => { const divisions = (0, index_1.allDivision)(); const enumValues = Object.values(division_name_1.DivisionName); expect(divisions.sort()).toEqual(enumValues.sort()); }); }); describe("District counts", () => { it("should have exactly 64 districts", () => { expect((0, index_1.allDistricts)()).toHaveLength(64); }); it("should have correct district count per division", () => { const divisionDistrictCounts = { [division_name_1.DivisionName.Barisal]: 6, [division_name_1.DivisionName.Chattogram]: 11, [division_name_1.DivisionName.Dhaka]: 13, [division_name_1.DivisionName.Khulna]: 10, [division_name_1.DivisionName.Mymensingh]: 4, [division_name_1.DivisionName.Rajshahi]: 8, [division_name_1.DivisionName.Rangpur]: 8, [division_name_1.DivisionName.Sylhet]: 4, }; Object.entries(divisionDistrictCounts).forEach(([division, expectedCount]) => { const districts = (0, index_1.districtsOf)(division); expect(districts.length).toBe(expectedCount); }); }); it("total districts from all divisions should equal 64", () => { const divisions = Object.values(division_name_1.DivisionName); const allDistrictNames = new Set(); divisions.forEach((division) => { const districts = (0, index_1.districtsOf)(division); districts.forEach((d) => allDistrictNames.add(d)); }); expect(allDistrictNames.size).toBe(64); }); }); describe("Upazila counts", () => { it("should have exactly 495 upazilas", () => { expect((0, index_1.allUpazila)()).toHaveLength(495); }); it("every district should have at least one upazila", () => { const districts = (0, index_1.allDistricts)(); districts.forEach((district) => { const upazilas = (0, index_1.upazilasOf)(district); expect(upazilas.length).toBeGreaterThan(0); }); }); }); describe("Thana counts", () => { it("should have 26 metropolitan thanas", () => { const thanas = (0, index_1.allThana)(); expect(thanas.length).toBe(26); }); it("Dhaka should have 15 thanas", () => { const dhakaThanas = (0, index_1.thanasOf)("Dhaka"); expect(dhakaThanas.length).toBe(15); }); it("Chattogram should have 6 thanas", () => { const chattogramThanas = (0, index_1.thanasOf)("Chattogram"); expect(chattogramThanas.length).toBe(6); }); it("Rajshahi should have 2 thanas", () => { const rajshahiThanas = (0, index_1.thanasOf)("Rajshahi"); expect(rajshahiThanas.length).toBe(2); }); it("Khulna should have 3 thanas", () => { const khulnaThanas = (0, index_1.thanasOf)("Khulna"); expect(khulnaThanas.length).toBe(3); }); it("isThana should return true for metropolitan thanas", () => { expect((0, index_1.isThana)("Gulshan")).toBe(true); expect((0, index_1.isThana)("Dhanmondi")).toBe(true); expect((0, index_1.isThana)("Kotwali")).toBe(true); }); it("isThana should return false for regular upazilas", () => { expect((0, index_1.isThana)("Savar")).toBe(false); expect((0, index_1.isThana)("Keraniganj")).toBe(false); }); }); describe("Data consistency", () => { it("all upazilas should have valid division references", () => { const validDivisions = (0, index_1.allDivision)(); const districts = (0, index_1.allDistricts)(); districts.forEach((district) => { const upazilas = (0, index_1.upazilasOf)(district); upazilas.forEach((upazila) => { expect(validDivisions).toContain(upazila.division); }); }); }); it("all upazilas should have valid district references", () => { const validDistricts = (0, index_1.allDistricts)(); const districts = (0, index_1.allDistricts)(); districts.forEach((district) => { const upazilas = (0, index_1.upazilasOf)(district); upazilas.forEach((upazila) => { expect(validDistricts).toContain(upazila.district); }); }); }); it("thanas should have valid thana objects", () => { const thanas = (0, index_1.allThana)(); thanas.forEach((thana) => { expect(thana).toHaveProperty("thana"); expect(thana).toHaveProperty("district"); expect(thana).toHaveProperty("division"); expect(thana).toHaveProperty("type"); expect(thana.type).toBe("thana"); }); }); it("all thanas should have valid district references", () => { const validDistricts = (0, index_1.allDistricts)(); const thanas = (0, index_1.allThana)(); thanas.forEach((thana) => { expect(validDistricts).toContain(thana.district); }); }); it("all thanas should have valid division references", () => { const validDivisions = (0, index_1.allDivision)(); const thanas = (0, index_1.allThana)(); thanas.forEach((thana) => { expect(validDivisions).toContain(thana.division); }); }); }); describe("Utility functions", () => { it("allThanaNames should return same count as allThana", () => { expect((0, index_1.allThanaNames)().length).toBe((0, index_1.allThana)().length); }); it("isUpazila should return true for valid upazilas", () => { expect((0, index_1.isUpazila)("Savar")).toBe(true); expect((0, index_1.isUpazila)("Keraniganj")).toBe(true); }); it("isUpazila should return false for thanas", () => { expect((0, index_1.isUpazila)("Gulshan")).toBe(false); expect((0, index_1.isUpazila)("Dhanmondi")).toBe(false); }); it("getThana should return correct thana object", () => { const thana = (0, index_1.getThana)("Gulshan"); expect(thana === null || thana === void 0 ? void 0 : thana.district).toBe("Dhaka"); expect(thana === null || thana === void 0 ? void 0 : thana.division).toBe("Dhaka"); }); it("getUpazila should return correct upazila object", () => { const upazila = (0, index_1.getUpazila)("Savar"); expect(upazila === null || upazila === void 0 ? void 0 : upazila.district).toBe("Dhaka"); expect(upazila === null || upazila === void 0 ? void 0 : upazila.division).toBe("Dhaka"); }); it("thanas and upazilas with same name should be in different districts", () => { const thanas = (0, index_1.allThana)(); thanas.forEach((thana) => { const matchingUpazila = (0, index_1.getUpazila)(thana.thana); if (matchingUpazila) { // Same name exists as upazila - must be in different district expect(matchingUpazila.district).not.toBe(thana.district); } }); }); it("Mohammadpur thana (Dhaka) and Mohammadpur upazila (Magura) are different", () => { const thana = (0, index_1.getThana)("Mohammadpur"); const upazila = (0, index_1.getUpazila)("Mohammadpur"); expect(thana === null || thana === void 0 ? void 0 : thana.district).toBe("Dhaka"); expect(upazila === null || upazila === void 0 ? void 0 : upazila.district).toBe("Magura"); }); }); describe("Type Safety", () => { it("DivisionName enum should have correct values", () => { expect(division_name_1.DivisionName.Dhaka).toBe("Dhaka"); expect(division_name_1.DivisionName.Chattogram).toBe("Chattogram"); }); it("DistrictName type should accept valid districts", () => { const dhaka = "Dhaka"; const chattogram = "Chattogram"; expect(dhaka).toBe("Dhaka"); expect(chattogram).toBe("Chattogram"); }); it("district context should disambiguate duplicate thana names", () => { // Kotwali exists in both Dhaka and Chattogram const dhakaKotwali = (0, index_1.getThana)("Kotwali", "Dhaka"); const chattogramKotwali = (0, index_1.getThana)("Kotwali", "Chattogram"); expect(dhakaKotwali === null || dhakaKotwali === void 0 ? void 0 : dhakaKotwali.division).toBe("Dhaka"); expect(chattogramKotwali === null || chattogramKotwali === void 0 ? void 0 : chattogramKotwali.division).toBe("Chattogram"); }); }); });