@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
JavaScript
;
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);
});
});
});
});