77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
jest.mock("../db/pool", () => ({
|
|
connect: jest.fn(),
|
|
}));
|
|
|
|
const pool = require("../db/pool");
|
|
const LocationMap = require("../models/location-map.model");
|
|
|
|
function createClient() {
|
|
return {
|
|
query: jest.fn(),
|
|
release: jest.fn(),
|
|
};
|
|
}
|
|
|
|
describe("location-map.model", () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
test("unlinks saved map objects from zones outside the current location", async () => {
|
|
const client = createClient();
|
|
pool.connect.mockResolvedValue(client);
|
|
const getMapStateSpy = jest.spyOn(LocationMap, "getMapState").mockResolvedValue({
|
|
draft_map: { id: 900 },
|
|
draft_objects: [],
|
|
});
|
|
|
|
client.query.mockImplementation(async (sql) => {
|
|
if (sql === "BEGIN" || sql === "COMMIT") {
|
|
return { rows: [], rowCount: 0 };
|
|
}
|
|
if (String(sql).includes("INSERT INTO location_maps")) {
|
|
return {
|
|
rows: [
|
|
{
|
|
id: 900,
|
|
household_id: 1,
|
|
store_location_id: 10,
|
|
name: "Store Map",
|
|
width: 1000,
|
|
height: 700,
|
|
status: "draft",
|
|
version: 1,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
if (String(sql).includes("FROM store_location_zones")) {
|
|
return { rows: [{ id: 501 }] };
|
|
}
|
|
return { rows: [], rowCount: 0 };
|
|
});
|
|
|
|
await LocationMap.saveDraft(1, 10, 42, {
|
|
objects: [
|
|
{ zone_id: 501, label: "Valid zone" },
|
|
{ zone_id: 999, label: "Foreign zone" },
|
|
],
|
|
});
|
|
|
|
const insertCalls = client.query.mock.calls.filter(([sql]) =>
|
|
String(sql).includes("INSERT INTO location_map_objects")
|
|
);
|
|
|
|
expect(insertCalls).toHaveLength(2);
|
|
expect(insertCalls[0][1][1]).toBe(501);
|
|
expect(insertCalls[1][1][1]).toBeNull();
|
|
expect(client.query).toHaveBeenCalledWith(
|
|
expect.stringContaining("FROM store_location_zones"),
|
|
[1, 10]
|
|
);
|
|
expect(getMapStateSpy).toHaveBeenCalledWith(1, 10, true);
|
|
expect(client.query).toHaveBeenCalledWith("COMMIT");
|
|
expect(client.release).toHaveBeenCalled();
|
|
});
|
|
});
|