import { asPartyInquiryRows, collectPersonNationalCodes, parseJalaliDateParts, pickPersonBirthday, pickPersonNationalCode, selectFanavaranDriverId, selectFanavaranOwnerId, } from "./fanavaran-driver-inquiry"; describe("selectFanavaranDriverId", () => { const rows = [ { Id: 10, RoleId: 161, Name: "insurer" }, { Id: 20, RoleId: 166, Name: "driver" }, ]; it("prefers insurer role 161 when the driver is the owner", () => { expect(selectFanavaranDriverId(rows, true)).toBe(10); }); it("prefers driver role 166 when the driver is not the owner", () => { expect(selectFanavaranDriverId(rows, false)).toBe(20); }); it("falls back to 166 when preferred 161 is missing", () => { expect(selectFanavaranDriverId([{ Id: 20, RoleId: 166 }], true)).toBe(20); }); it("returns null for RoleId 162 (بیمه‌شده) — GEN.44 required", () => { expect( selectFanavaranDriverId( [ { Id: 2390312, RoleId: 162, Name: "محمدعلي", LastName: "موسوي", }, ], false, ), ).toBeNull(); }); it("does not fall back to RoleId 163 for DriverId", () => { expect( selectFanavaranDriverId([{ Id: 99, RoleId: 163 }], false), ).toBeNull(); }); it("picks 4773521 from a real Fanavaran unique-identifier response", () => { expect( selectFanavaranDriverId( [ { Id: 4773521, RoleId: 161 }, { Id: 4773521, RoleId: 163 }, { Id: 4773521, RoleId: 166 }, ], true, ), ).toBe(4773521); }); }); describe("selectFanavaranOwnerId", () => { it("accepts only RoleId 161 or 166", () => { expect( selectFanavaranOwnerId([ { Id: 1, RoleId: 162 }, { Id: 2, RoleId: 163 }, ]), ).toBeNull(); expect(selectFanavaranOwnerId([{ Id: 10, RoleId: 161 }])).toBe(10); expect(selectFanavaranOwnerId([{ Id: 20, RoleId: 166 }])).toBe(20); }); }); describe("pickPersonNationalCode / birthday", () => { it("uses insurer national code when driverIsInsurer", () => { expect( pickPersonNationalCode({ driverIsInsurer: true, nationalCodeOfInsurer: "0012345678", nationalCodeOfDriver: "", }), ).toBe("0012345678"); }); it("falls back across birthday fields", () => { expect( pickPersonBirthday({ driverBirthday: null, birthday: "13480313", }), ).toBe("13480313"); }); }); describe("asPartyInquiryRows", () => { it("normalizes Persian digits and compact insurer birthday 13640628", () => { expect( collectPersonNationalCodes({ nationalCodeOfInsurer: "۰۰۸۰۰۸۶۵۱۹", }), ).toEqual(["0080086519"]); expect(parseJalaliDateParts(13640628)).toEqual({ year: 1364, month: 6, day: 28, }); }); });