Files
pleno-vue/tests/unit/department-lanes-relay-options.spec.js

110 lines
3.4 KiB
JavaScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const mocks = vi.hoisted(() => ({
setColumn: vi.fn(),
addObject: vi.fn(),
listShellyRelayOptions: vi.fn(),
}));
vi.mock("@/i18n", () => ({
default: {
global: {
t: (key) => key,
},
},
}));
vi.mock("@/services/shellyRelayOptions.js", () => ({
listShellyRelayOptions: mocks.listShellyRelayOptions,
}));
vi.mock("@/components/session/token/SessionUser.vue", () => ({
SessionUser: {
objects: {
departments: {
get: {
all: vi.fn().mockResolvedValue([]),
},
},
self_serve_machine_types: {
get: {
all: vi.fn().mockResolvedValue([]),
},
},
},
},
}));
vi.mock("@/components/session/token/SessionUser/Objects/ObjectsGlobal.vue", () => ({
ObjectsGlobal: {
set: {
column: mocks.setColumn,
},
add: {
object: mocks.addObject,
},
get: {
objects: vi.fn(),
object: vi.fn(),
},
delete: {
object: vi.fn(),
},
showEditObjectFieldForm: vi.fn(),
showCreateObjectForm: vi.fn(),
showDeleteObjectForm: vi.fn(),
},
}));
import { DepartmentLanes } from "@/components/session/token/SessionUser/Objects/DepartmentLanes.vue";
describe("DepartmentLanes relay option fields", () => {
beforeEach(() => {
mocks.setColumn.mockReset();
mocks.addObject.mockReset();
mocks.listShellyRelayOptions.mockReset();
});
it("uses Shelly-backed select fields for relay bindings", async () => {
mocks.listShellyRelayOptions.mockResolvedValue([{ id: "shelly-plus-01", name: "Entry Gate (shelly-plus-01)" }]);
const relayOptions = await DepartmentLanes.columns.relay_in_id.options();
expect(DepartmentLanes.columns.relay_in_id.type).toBe("select");
expect(DepartmentLanes.columns.relay_out_id.type).toBe("select");
expect(DepartmentLanes.columns.relay_machine_id.type).toBe("select");
expect(DepartmentLanes.columns.relay_machine_program_picker_id.type).toBe("select");
expect(DepartmentLanes.columns.relay_machine_cleaner_id.type).toBe("select");
expect(relayOptions).toEqual([
{ id: 0, name: "global.not_configured" },
{ id: "shelly-plus-01", name: "Entry Gate (shelly-plus-01)" },
]);
});
it("normalizes blank relay selections to null when saving", async () => {
mocks.setColumn.mockResolvedValue({});
mocks.addObject.mockResolvedValue({});
await DepartmentLanes.set.relay_in_id(7, "0");
await DepartmentLanes.set.relay_out_id(7, "");
await DepartmentLanes.set.relay_machine_id(7, " ");
await DepartmentLanes.add(1, "Lane 7", "0", "", " ", "shelly-plus-02", null, null, null);
expect(mocks.setColumn).toHaveBeenNthCalledWith(1, DepartmentLanes.meta.endpoint, 7, "relay_in_id", null);
expect(mocks.setColumn).toHaveBeenNthCalledWith(2, DepartmentLanes.meta.endpoint, 7, "relay_out_id", null);
expect(mocks.setColumn).toHaveBeenNthCalledWith(3, DepartmentLanes.meta.endpoint, 7, "relay_machine_id", null);
expect(mocks.addObject).toHaveBeenCalledWith(DepartmentLanes.meta.endpoint, {
department: 1,
name: "Lane 7",
relay_in_id: null,
relay_out_id: null,
relay_machine_id: null,
relay_machine_program_picker_id: "shelly-plus-02",
relay_machine_cleaner_id: null,
dynamic_image_id: null,
machine_type_id: null,
selfserve_enabled: true,
});
});
});