forked from Yara724/api
146 lines
4.1 KiB
TypeScript
146 lines
4.1 KiB
TypeScript
import { NotFoundException } from "@nestjs/common";
|
|
import { LookupsService } from "./lookups.service";
|
|
|
|
describe("LookupsService.vehicleById", () => {
|
|
const originalClient = process.env.FANAVARAN_CLIENT;
|
|
|
|
beforeAll(() => {
|
|
process.env.FANAVARAN_CLIENT = "parsian";
|
|
});
|
|
|
|
afterAll(() => {
|
|
process.env.FANAVARAN_CLIENT = originalClient;
|
|
});
|
|
|
|
function createService(lookup: Record<string, jest.Mock>) {
|
|
return new LookupsService({} as any, lookup as any);
|
|
}
|
|
|
|
it("returns the vehicle with kind, used, and plaque lookups", async () => {
|
|
const lookup = {
|
|
vehicleById: jest.fn().mockResolvedValue({
|
|
Id: 3379978,
|
|
VehicleKindId: 5904,
|
|
UsedId: 36,
|
|
VIN: "IRNKAEK4150012345",
|
|
PlaqueLeftNo: "12",
|
|
PlaqueMiddleCodeId: 2,
|
|
PlaqueRightNo: "345",
|
|
PlaqueSerial: "67",
|
|
VersionNo: 2,
|
|
}),
|
|
getRemoteLookup: jest.fn().mockImplementation((_key, url: string) => {
|
|
if (url.includes("vehicle-kinds")) {
|
|
return Promise.resolve([
|
|
{ Id: 5904, Caption: "بنز", VehicleGroupId: 3, IsActive: 1 },
|
|
]);
|
|
}
|
|
if (url.includes("vehicle-use-types")) {
|
|
return Promise.resolve([
|
|
{ Id: 36, Caption: "حمل مواد سريع الاشتعال", VehicleGroupId: 3, IsActive: 1 },
|
|
]);
|
|
}
|
|
return Promise.resolve([]);
|
|
}),
|
|
};
|
|
|
|
const service = createService(lookup);
|
|
const result = (await service.vehicleById(3379978, 2)) as Record<
|
|
string,
|
|
unknown
|
|
>;
|
|
|
|
expect(lookup.vehicleById).toHaveBeenCalledWith("parsian", 3379978, 2);
|
|
expect(result.Id).toBe(3379978);
|
|
expect(result.vehicleKind).toEqual({
|
|
Id: 5904,
|
|
Caption: "بنز",
|
|
VehicleGroupId: 3,
|
|
IsActive: 1,
|
|
});
|
|
expect(result.used).toEqual({
|
|
Id: 36,
|
|
Caption: "حمل مواد سريع الاشتعال",
|
|
VehicleGroupId: 3,
|
|
IsActive: 1,
|
|
});
|
|
expect(result.plaque).toEqual({
|
|
leftTwoDigits: "12",
|
|
serialLetter: "ب",
|
|
threeDigits: "345",
|
|
rightTwoDigits: "67",
|
|
});
|
|
});
|
|
|
|
it("enriches inquiry-by-vin rows with used and vehicleKind", async () => {
|
|
const lookup = {
|
|
inquiryByVin: jest.fn().mockResolvedValue([
|
|
{
|
|
Id: 3379978,
|
|
UsedId: 84,
|
|
VehicleKindId: 5950,
|
|
VIN: "NAS451100P4934023",
|
|
},
|
|
]),
|
|
getRemoteLookup: jest.fn().mockImplementation((_key, url: string) => {
|
|
if (url.includes("vehicle-kinds")) {
|
|
return Promise.resolve([
|
|
{ Id: 5950, Caption: "کامیون", VehicleGroupId: 3, IsActive: 1 },
|
|
]);
|
|
}
|
|
if (url.includes("vehicle-use-types")) {
|
|
return Promise.resolve([
|
|
{ Id: 84, Caption: "حمل بار", VehicleGroupId: 3, IsActive: 1 },
|
|
]);
|
|
}
|
|
return Promise.resolve([]);
|
|
}),
|
|
};
|
|
|
|
const service = createService(lookup);
|
|
const result = (await service.inquiryByVin("NAS451100P4934023")) as Array<
|
|
Record<string, unknown>
|
|
>;
|
|
|
|
expect(lookup.inquiryByVin).toHaveBeenCalledWith(
|
|
"parsian",
|
|
"NAS451100P4934023",
|
|
);
|
|
expect(result[0].UsedId).toBe(84);
|
|
expect(result[0].used).toEqual({
|
|
Id: 84,
|
|
Caption: "حمل بار",
|
|
VehicleGroupId: 3,
|
|
IsActive: 1,
|
|
});
|
|
expect(result[0].vehicleKind).toEqual({
|
|
Id: 5950,
|
|
Caption: "کامیون",
|
|
VehicleGroupId: 3,
|
|
IsActive: 1,
|
|
});
|
|
});
|
|
|
|
it("unwraps an array payload and 404s when Fanavaran returns nothing", async () => {
|
|
const lookup = {
|
|
vehicleById: jest
|
|
.fn()
|
|
.mockResolvedValueOnce([{ Id: 3379978, VehicleKindId: 1 }])
|
|
.mockResolvedValueOnce([]),
|
|
getRemoteLookup: jest.fn().mockResolvedValue([]),
|
|
};
|
|
|
|
const service = createService(lookup);
|
|
const unwrapped = (await service.vehicleById(3379978)) as Record<
|
|
string,
|
|
unknown
|
|
>;
|
|
expect(unwrapped.Id).toBe(3379978);
|
|
expect(unwrapped.color).toBeNull();
|
|
|
|
await expect(service.vehicleById(1)).rejects.toBeInstanceOf(
|
|
NotFoundException,
|
|
);
|
|
});
|
|
});
|