UNPKG

@bangladeshi/bangladesh-address

Version:

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

483 lines (482 loc) 24.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const upazila_1 = require("../upazila"); describe("Upazila functions", () => { describe("upazilasOf", () => { it("should return upazilas for Dhaka district", () => { const upazilas = (0, upazila_1.upazilasOf)("Dhaka"); expect(upazilas.length).toBeGreaterThan(0); upazilas.forEach((item) => { expect(item.district).toBe("Dhaka"); }); }); it("should handle lowercase input", () => { const upazilas = (0, upazila_1.upazilasOf)("dhaka"); expect(upazilas.length).toBeGreaterThan(0); upazilas.forEach((item) => { expect(item.district).toBe("Dhaka"); }); }); it("should return objects with upazila, district, and division", () => { const upazilas = (0, upazila_1.upazilasOf)("Sylhet"); expect(upazilas.length).toBeGreaterThan(0); upazilas.forEach((item) => { expect(item).toHaveProperty("upazila"); expect(item).toHaveProperty("district"); expect(item).toHaveProperty("division"); }); }); it("should return empty array for invalid district", () => { const upazilas = (0, upazila_1.upazilasOf)("InvalidDistrict"); expect(upazilas).toHaveLength(0); }); it("should return correct division for each upazila", () => { const upazilas = (0, upazila_1.upazilasOf)("Chattogram"); upazilas.forEach((item) => { expect(item.division).toBe("Chattogram"); }); }); it("should return empty array for null/undefined input", () => { expect((0, upazila_1.upazilasOf)(null)).toHaveLength(0); expect((0, upazila_1.upazilasOf)(undefined)).toHaveLength(0); expect((0, upazila_1.upazilasOf)("")).toHaveLength(0); }); it("should handle whitespace in input", () => { const upazilas = (0, upazila_1.upazilasOf)(" Dhaka "); expect(upazilas.length).toBeGreaterThan(0); }); }); describe("allUpazila", () => { it("should return all 495 upazilas of Bangladesh", () => { const upazilas = (0, upazila_1.allUpazila)(); expect(upazilas).toHaveLength(495); }); it("should return an array of strings", () => { const upazilas = (0, upazila_1.allUpazila)(); upazilas.forEach((upazila) => { expect(typeof upazila).toBe("string"); }); }); it("should contain known upazilas", () => { const upazilas = (0, upazila_1.allUpazila)(); expect(upazilas).toContain("Savar"); expect(upazilas).toContain("Keraniganj"); }); it("should not contain thanas (they are separate)", () => { const upazilas = (0, upazila_1.allUpazila)(); expect(upazilas).not.toContain("Gulshan"); expect(upazilas).not.toContain("Dhanmondi"); }); }); describe("allThana", () => { it("should return all 26 metropolitan thanas", () => { const thanas = (0, upazila_1.allThana)(); expect(thanas).toHaveLength(26); }); it("should return thana objects with correct properties", () => { const thanas = (0, upazila_1.allThana)(); thanas.forEach((thana) => { expect(thana).toHaveProperty("thana"); expect(thana).toHaveProperty("district"); expect(thana).toHaveProperty("division"); }); }); it("should contain Dhaka metropolitan thanas", () => { const thanas = (0, upazila_1.allThana)(); const thanaNames = thanas.map((t) => t.thana); expect(thanaNames).toContain("Gulshan"); expect(thanaNames).toContain("Dhanmondi"); expect(thanaNames).toContain("Mirpur"); }); }); describe("allThanaNames", () => { it("should return all 26 thana names", () => { const thanaNames = (0, upazila_1.allThanaNames)(); expect(thanaNames).toHaveLength(26); }); it("should return an array of strings", () => { const thanaNames = (0, upazila_1.allThanaNames)(); thanaNames.forEach((name) => { expect(typeof name).toBe("string"); }); }); it("should contain known thana names", () => { const thanaNames = (0, upazila_1.allThanaNames)(); expect(thanaNames).toContain("Gulshan"); expect(thanaNames).toContain("Dhanmondi"); expect(thanaNames).toContain("Kotwali"); }); it("should be consistent with allThana", () => { const thanaObjects = (0, upazila_1.allThana)(); const thanaNames = (0, upazila_1.allThanaNames)(); expect(thanaNames.length).toBe(thanaObjects.length); thanaObjects.forEach((thana) => { expect(thanaNames).toContain(thana.thana); }); }); }); describe("thanasOf", () => { it("should return thanas for Dhaka district", () => { const thanas = (0, upazila_1.thanasOf)("Dhaka"); expect(thanas.length).toBe(15); thanas.forEach((thana) => { expect(thana.district).toBe("Dhaka"); }); }); it("should return empty array for districts without thanas", () => { const thanas = (0, upazila_1.thanasOf)("Barguna"); expect(thanas).toHaveLength(0); }); it("should handle case-insensitive input", () => { const thanas = (0, upazila_1.thanasOf)("dhaka"); expect(thanas.length).toBe(15); }); it("should return empty array for null/undefined input", () => { expect((0, upazila_1.thanasOf)(null)).toHaveLength(0); expect((0, upazila_1.thanasOf)(undefined)).toHaveLength(0); expect((0, upazila_1.thanasOf)("")).toHaveLength(0); }); it("should handle whitespace in input", () => { const thanas = (0, upazila_1.thanasOf)(" Dhaka "); expect(thanas.length).toBe(15); }); }); describe("isThana", () => { it("should return true for known thanas", () => { expect((0, upazila_1.isThana)("Gulshan")).toBe(true); expect((0, upazila_1.isThana)("Dhanmondi")).toBe(true); expect((0, upazila_1.isThana)("Motijheel")).toBe(true); }); it("should return false for regular upazilas", () => { expect((0, upazila_1.isThana)("Savar")).toBe(false); expect((0, upazila_1.isThana)("Keraniganj")).toBe(false); }); it("should handle case-insensitive input", () => { expect((0, upazila_1.isThana)("gulshan")).toBe(true); expect((0, upazila_1.isThana)("DHANMONDI")).toBe(true); }); it("should return false for non-existent locations", () => { expect((0, upazila_1.isThana)("NonExistent")).toBe(false); }); it("should return false for null/undefined input", () => { expect((0, upazila_1.isThana)(null)).toBe(false); expect((0, upazila_1.isThana)(undefined)).toBe(false); expect((0, upazila_1.isThana)("")).toBe(false); }); it("should handle whitespace in input", () => { expect((0, upazila_1.isThana)(" Gulshan ")).toBe(true); }); it("should disambiguate with district context", () => { // Kotwali exists in both Dhaka and Chattogram expect((0, upazila_1.isThana)("Kotwali")).toBe(true); expect((0, upazila_1.isThana)("Kotwali", "Dhaka")).toBe(true); expect((0, upazila_1.isThana)("Kotwali", "Chattogram")).toBe(true); expect((0, upazila_1.isThana)("Kotwali", "Sylhet")).toBe(false); }); }); describe("isUpazila", () => { it("should return true for known upazilas", () => { expect((0, upazila_1.isUpazila)("Savar")).toBe(true); expect((0, upazila_1.isUpazila)("Keraniganj")).toBe(true); expect((0, upazila_1.isUpazila)("Dhamrai")).toBe(true); }); it("should return false for thanas", () => { expect((0, upazila_1.isUpazila)("Gulshan")).toBe(false); expect((0, upazila_1.isUpazila)("Dhanmondi")).toBe(false); }); it("should handle case-insensitive input", () => { expect((0, upazila_1.isUpazila)("savar")).toBe(true); expect((0, upazila_1.isUpazila)("KERANIGANJ")).toBe(true); }); it("should return false for non-existent locations", () => { expect((0, upazila_1.isUpazila)("NonExistent")).toBe(false); }); it("should return false for null/undefined input", () => { expect((0, upazila_1.isUpazila)(null)).toBe(false); expect((0, upazila_1.isUpazila)(undefined)).toBe(false); expect((0, upazila_1.isUpazila)("")).toBe(false); }); it("should handle whitespace in input", () => { expect((0, upazila_1.isUpazila)(" Savar ")).toBe(true); }); it("should disambiguate with district context", () => { // Mohammadpur exists as upazila in Magura expect((0, upazila_1.isUpazila)("Mohammadpur")).toBe(true); expect((0, upazila_1.isUpazila)("Mohammadpur", "Magura")).toBe(true); expect((0, upazila_1.isUpazila)("Mohammadpur", "Dhaka")).toBe(false); }); }); describe("getThana", () => { it("should return thana object for known thana", () => { const thana = (0, upazila_1.getThana)("Gulshan"); expect(thana).toBeDefined(); expect(thana === null || thana === void 0 ? void 0 : thana.thana).toBe("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("should return undefined for non-existent thana", () => { expect((0, upazila_1.getThana)("NonExistent")).toBeUndefined(); }); it("should return undefined for upazilas", () => { expect((0, upazila_1.getThana)("Savar")).toBeUndefined(); }); it("should handle case-insensitive input", () => { const thana = (0, upazila_1.getThana)("gulshan"); expect(thana === null || thana === void 0 ? void 0 : thana.thana).toBe("Gulshan"); }); it("should return undefined for null/undefined input", () => { expect((0, upazila_1.getThana)(null)).toBeUndefined(); expect((0, upazila_1.getThana)(undefined)).toBeUndefined(); expect((0, upazila_1.getThana)("")).toBeUndefined(); }); it("should handle whitespace in input", () => { const thana = (0, upazila_1.getThana)(" Gulshan "); expect(thana === null || thana === void 0 ? void 0 : thana.thana).toBe("Gulshan"); }); it("should disambiguate with district context", () => { // Kotwali exists in both Dhaka and Chattogram const dhakaKotwali = (0, upazila_1.getThana)("Kotwali", "Dhaka"); const chattogramKotwali = (0, upazila_1.getThana)("Kotwali", "Chattogram"); expect(dhakaKotwali === null || dhakaKotwali === void 0 ? void 0 : dhakaKotwali.district).toBe("Dhaka"); expect(chattogramKotwali === null || chattogramKotwali === void 0 ? void 0 : chattogramKotwali.district).toBe("Chattogram"); }); }); describe("getUpazila", () => { it("should return upazila object for known upazila", () => { const upazila = (0, upazila_1.getUpazila)("Savar"); expect(upazila).toBeDefined(); expect(upazila === null || upazila === void 0 ? void 0 : upazila.upazila).toBe("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("should return undefined for non-existent upazila", () => { expect((0, upazila_1.getUpazila)("NonExistent")).toBeUndefined(); }); it("should return undefined for thanas", () => { expect((0, upazila_1.getUpazila)("Gulshan")).toBeUndefined(); }); it("should handle case-insensitive input", () => { const upazila = (0, upazila_1.getUpazila)("savar"); expect(upazila === null || upazila === void 0 ? void 0 : upazila.upazila).toBe("Savar"); }); it("should return undefined for null/undefined input", () => { expect((0, upazila_1.getUpazila)(null)).toBeUndefined(); expect((0, upazila_1.getUpazila)(undefined)).toBeUndefined(); expect((0, upazila_1.getUpazila)("")).toBeUndefined(); }); it("should handle whitespace in input", () => { const upazila = (0, upazila_1.getUpazila)(" Savar "); expect(upazila === null || upazila === void 0 ? void 0 : upazila.upazila).toBe("Savar"); }); it("should disambiguate with district context", () => { // Mohammadpur exists as upazila in Magura const maguraUpazila = (0, upazila_1.getUpazila)("Mohammadpur", "Magura"); expect(maguraUpazila === null || maguraUpazila === void 0 ? void 0 : maguraUpazila.district).toBe("Magura"); expect((0, upazila_1.getUpazila)("Mohammadpur", "Dhaka")).toBeUndefined(); }); }); describe("getDistrictOfUpazila", () => { it("should return district for known upazila", () => { expect((0, upazila_1.getDistrictOfUpazila)("Savar")).toBe("Dhaka"); expect((0, upazila_1.getDistrictOfUpazila)("Keraniganj")).toBe("Dhaka"); }); it("should return undefined for non-existent upazila", () => { expect((0, upazila_1.getDistrictOfUpazila)("NonExistent")).toBeUndefined(); }); it("should return undefined for thanas", () => { expect((0, upazila_1.getDistrictOfUpazila)("Gulshan")).toBeUndefined(); }); it("should handle case-insensitive input", () => { expect((0, upazila_1.getDistrictOfUpazila)("savar")).toBe("Dhaka"); expect((0, upazila_1.getDistrictOfUpazila)("KERANIGANJ")).toBe("Dhaka"); }); it("should return undefined for null/undefined input", () => { expect((0, upazila_1.getDistrictOfUpazila)(null)).toBeUndefined(); expect((0, upazila_1.getDistrictOfUpazila)(undefined)).toBeUndefined(); expect((0, upazila_1.getDistrictOfUpazila)("")).toBeUndefined(); }); it("should handle whitespace in input", () => { expect((0, upazila_1.getDistrictOfUpazila)(" Savar ")).toBe("Dhaka"); }); it("should disambiguate with division context", () => { // Mohammadpur exists as upazila in Magura (Khulna division) expect((0, upazila_1.getDistrictOfUpazila)("Mohammadpur")).toBe("Magura"); expect((0, upazila_1.getDistrictOfUpazila)("Mohammadpur", "Khulna")).toBe("Magura"); }); }); describe("upazilasOfDivision", () => { it("should return upazilas for Dhaka division", () => { const upazilas = (0, upazila_1.upazilasOfDivision)("Dhaka"); expect(upazilas.length).toBeGreaterThan(0); upazilas.forEach((item) => { expect(item.division).toBe("Dhaka"); }); }); it("should return all 8 divisions worth of upazilas", () => { const divisions = ["Dhaka", "Chattogram", "Rajshahi", "Khulna", "Barisal", "Sylhet", "Rangpur", "Mymensingh"]; divisions.forEach((division) => { const upazilas = (0, upazila_1.upazilasOfDivision)(division); expect(upazilas.length).toBeGreaterThan(0); }); }); it("should return empty array for invalid division", () => { expect((0, upazila_1.upazilasOfDivision)("InvalidDivision")).toHaveLength(0); }); it("should handle case-insensitive input", () => { const upazilas = (0, upazila_1.upazilasOfDivision)("dhaka"); expect(upazilas.length).toBeGreaterThan(0); }); it("should return empty array for null/undefined input", () => { expect((0, upazila_1.upazilasOfDivision)(null)).toHaveLength(0); expect((0, upazila_1.upazilasOfDivision)(undefined)).toHaveLength(0); expect((0, upazila_1.upazilasOfDivision)("")).toHaveLength(0); }); it("should handle whitespace in input", () => { const upazilas = (0, upazila_1.upazilasOfDivision)(" Dhaka "); expect(upazilas.length).toBeGreaterThan(0); }); it("total upazilas from all divisions should equal 495", () => { const divisions = ["Dhaka", "Chattogram", "Rajshahi", "Khulna", "Barisal", "Sylhet", "Rangpur", "Mymensingh"]; let totalCount = 0; divisions.forEach((division) => { totalCount += (0, upazila_1.upazilasOfDivision)(division).length; }); expect(totalCount).toBe(495); }); }); describe("searchLocations", () => { it("should find divisions", () => { const results = (0, upazila_1.searchLocations)("Dhaka"); const divisionResults = results.filter((r) => r.type === "division"); expect(divisionResults.length).toBeGreaterThan(0); expect(divisionResults[0].name).toBe("Dhaka"); }); it("should find districts", () => { const results = (0, upazila_1.searchLocations)("Tangail"); const districtResults = results.filter((r) => r.type === "district"); expect(districtResults.length).toBeGreaterThan(0); expect(districtResults[0].name).toBe("Tangail"); }); it("should find upazilas", () => { const results = (0, upazila_1.searchLocations)("Savar"); const upazilaResults = results.filter((r) => r.type === "upazila"); expect(upazilaResults.length).toBeGreaterThan(0); expect(upazilaResults[0].name).toBe("Savar"); }); it("should find thanas", () => { const results = (0, upazila_1.searchLocations)("Gulshan"); const thanaResults = results.filter((r) => r.type === "thana"); expect(thanaResults.length).toBeGreaterThan(0); expect(thanaResults[0].name).toBe("Gulshan"); }); it("should return multiple matches for partial queries", () => { const results = (0, upazila_1.searchLocations)("pur"); expect(results.length).toBeGreaterThan(5); }); it("should handle case-insensitive search", () => { const results = (0, upazila_1.searchLocations)("DHAKA"); expect(results.length).toBeGreaterThan(0); }); it("should return empty array for no matches", () => { const results = (0, upazila_1.searchLocations)("xyz123nonexistent"); expect(results).toHaveLength(0); }); it("should return empty array for null/undefined input", () => { expect((0, upazila_1.searchLocations)(null)).toHaveLength(0); expect((0, upazila_1.searchLocations)(undefined)).toHaveLength(0); expect((0, upazila_1.searchLocations)("")).toHaveLength(0); expect((0, upazila_1.searchLocations)(" ")).toHaveLength(0); }); it("should include district and division in results", () => { const results = (0, upazila_1.searchLocations)("Savar"); const upazilaResult = results.find((r) => r.type === "upazila" && r.name === "Savar"); expect(upazilaResult === null || upazilaResult === void 0 ? void 0 : upazilaResult.district).toBe("Dhaka"); expect(upazilaResult === null || upazilaResult === void 0 ? void 0 : upazilaResult.division).toBe("Dhaka"); }); }); describe("Raw data exports", () => { it("should export upazilaData with 495 entries", () => { expect(Array.isArray(upazila_1.upazilaData)).toBe(true); expect(upazila_1.upazilaData.length).toBe(495); }); it("should export thanaData with 26 entries", () => { expect(Array.isArray(upazila_1.thanaData)).toBe(true); expect(upazila_1.thanaData.length).toBe(26); }); it("upazilaData entries should have correct structure", () => { upazila_1.upazilaData.forEach((item) => { expect(item).toHaveProperty("upazila"); expect(item).toHaveProperty("district"); expect(item).toHaveProperty("division"); }); }); it("thanaData entries should have correct structure", () => { upazila_1.thanaData.forEach((item) => { expect(item).toHaveProperty("thana"); expect(item).toHaveProperty("district"); expect(item).toHaveProperty("division"); }); }); }); describe("*NamesOf functions (v2.0.0)", () => { describe("upazilaNamesOf", () => { it("should return upazila names for a district", () => { const names = (0, upazila_1.upazilaNamesOf)("Dhaka"); expect(names.length).toBeGreaterThan(0); names.forEach((name) => { expect(typeof name).toBe("string"); }); }); it("should return same count as upazilasOf", () => { const objects = (0, upazila_1.upazilasOf)("Dhaka"); const names = (0, upazila_1.upazilaNamesOf)("Dhaka"); expect(names.length).toBe(objects.length); }); it("should return empty array for invalid district", () => { expect((0, upazila_1.upazilaNamesOf)("InvalidDistrict")).toHaveLength(0); }); }); describe("thanaNamesOf", () => { it("should return thana names for a district", () => { const names = (0, upazila_1.thanaNamesOf)("Dhaka"); expect(names.length).toBe(15); names.forEach((name) => { expect(typeof name).toBe("string"); }); }); it("should return same count as thanasOf", () => { const objects = (0, upazila_1.thanasOf)("Dhaka"); const names = (0, upazila_1.thanaNamesOf)("Dhaka"); expect(names.length).toBe(objects.length); }); it("should return empty array for districts without thanas", () => { expect((0, upazila_1.thanaNamesOf)("Tangail")).toHaveLength(0); }); }); describe("upazilaNamesOfDivision", () => { it("should return upazila names for a division", () => { const names = (0, upazila_1.upazilaNamesOfDivision)("Dhaka"); expect(names.length).toBeGreaterThan(0); names.forEach((name) => { expect(typeof name).toBe("string"); }); }); it("should return same count as upazilasOfDivision", () => { const objects = (0, upazila_1.upazilasOfDivision)("Dhaka"); const names = (0, upazila_1.upazilaNamesOfDivision)("Dhaka"); expect(names.length).toBe(objects.length); }); it("should return empty array for invalid division", () => { expect((0, upazila_1.upazilaNamesOfDivision)("InvalidDivision")).toHaveLength(0); }); it("total upazila names from all divisions should equal 495", () => { const divisions = ["Dhaka", "Chattogram", "Rajshahi", "Khulna", "Barisal", "Sylhet", "Rangpur", "Mymensingh"]; let totalCount = 0; divisions.forEach((division) => { totalCount += (0, upazila_1.upazilaNamesOfDivision)(division).length; }); expect(totalCount).toBe(495); }); }); }); });