85 lines
2.8 KiB
TypeScript
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);
|
|
});
|
|
});
|