forked from Yara724/api
113 lines
2.8 KiB
TypeScript
113 lines
2.8 KiB
TypeScript
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,
|
|
});
|
|
});
|
|
});
|