WFDASH-WEBAPP/src/lib/server/pos-slip-layout-service.test.ts

85 lines
2.8 KiB
TypeScript

import { describe, it, expect, vi } from "vitest";
import { getSlipLayout, saveSlipLayout } from "./pos-slip-layout-service";
const mockGetAdminPocketBase = vi.fn();
vi.mock("./pocketbase-admin", () => ({
getAdminPocketBase: () => mockGetAdminPocketBase(),
}));
describe("getSlipLayout", () => {
it("returns null when the letterhead has no saved layout", async () => {
mockGetAdminPocketBase.mockResolvedValue({
collection: () => ({
getList: async () => ({ items: [] }),
}),
});
const result = await getSlipLayout("lh-1");
expect(result).toBeNull();
});
it("returns the saved layout, defaulting delivery_show_pricing to true when unset", async () => {
mockGetAdminPocketBase.mockResolvedValue({
collection: () => ({
getList: async () => ({
items: [{
id: "row-1",
letterhead: "lh-1",
sale_blocks: [{ id: "logo", enabled: false }],
delivery_blocks: [],
cashup_blocks: [],
delivery_show_pricing: undefined,
}],
}),
}),
});
const result = await getSlipLayout("lh-1");
expect(result).toEqual({
sale_blocks: [{ id: "logo", enabled: false }],
delivery_blocks: [],
cashup_blocks: [],
delivery_show_pricing: true,
});
});
});
describe("saveSlipLayout", () => {
it("creates a new row when none exists yet, only writing the fields given", async () => {
const create = vi.fn().mockResolvedValue({
id: "row-1",
letterhead: "lh-1",
sale_blocks: [{ id: "logo", enabled: false }],
delivery_blocks: [],
cashup_blocks: [],
delivery_show_pricing: true,
});
mockGetAdminPocketBase.mockResolvedValue({
collection: () => ({
getList: async () => ({ items: [] }),
create,
}),
});
const result = await saveSlipLayout("lh-1", { sale_blocks: [{ id: "logo", enabled: false }] });
expect(create).toHaveBeenCalledWith({ letterhead: "lh-1", sale_blocks: [{ id: "logo", enabled: false }] });
expect(result.sale_blocks).toEqual([{ id: "logo", enabled: false }]);
});
it("updates the existing row when one exists", async () => {
const update = vi.fn().mockResolvedValue({
id: "row-1",
letterhead: "lh-1",
sale_blocks: [],
delivery_blocks: [],
cashup_blocks: [],
delivery_show_pricing: false,
});
mockGetAdminPocketBase.mockResolvedValue({
collection: () => ({
getList: async () => ({ items: [{ id: "row-1", letterhead: "lh-1" }] }),
update,
}),
});
const result = await saveSlipLayout("lh-1", { delivery_show_pricing: false });
expect(update).toHaveBeenCalledWith("row-1", { letterhead: "lh-1", delivery_show_pricing: false });
expect(result.delivery_show_pricing).toBe(false);
});
});