Add department self-serve management with API integration and tests:

- Introduced `DepartmentModulesDisplay` and `DepartmentModulesSetup` components for self-serve enablement management.
- Implemented `getDepartmentSelfServeEnabled` and `setDepartmentSelfServeEnabled` helpers.
- Added unit tests for self-serve status fetching, updating, and UI synchronization.
- Enhanced connectivity and relay logic with in-progress wash session handling and detailed displays.
This commit is contained in:
Jeppe Bundgaard
2026-03-25 14:06:22 +01:00
parent d03b7d86bf
commit caec066c6c
12 changed files with 790 additions and 19 deletions
@@ -0,0 +1,90 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
const mocks = vi.hoisted(() => ({
authenticatedRequest: vi.fn(),
}));
vi.mock("@/components/session/authenticatedRequest.vue", () => ({
authenticatedRequest: mocks.authenticatedRequest,
}));
import {
getDepartmentSelfServeEnabled,
setDepartmentSelfServeEnabled,
} from "@/composables/departmentSelfServeEnabled.js";
describe("department self-serve enabled management", () => {
beforeEach(() => {
mocks.authenticatedRequest.mockReset();
});
it("gets self-serve enabled status for a department", async () => {
mocks.authenticatedRequest.mockResolvedValue({
data: {
data: {
enabled: "true",
},
},
});
const enabled = await getDepartmentSelfServeEnabled("12");
expect(enabled).toBe(true);
expect(mocks.authenticatedRequest).toHaveBeenCalledWith(
"/departments/self-serve/enabled?id=12",
"GET"
);
});
it("normalizes false-like enabled responses", async () => {
mocks.authenticatedRequest.mockResolvedValue({
data: {
enabled: 0,
},
});
const enabled = await getDepartmentSelfServeEnabled(12);
expect(enabled).toBe(false);
});
it("updates self-serve enabled status for a department", async () => {
mocks.authenticatedRequest.mockResolvedValue({
data: {
message: "updated",
},
});
const enabled = await setDepartmentSelfServeEnabled(22, true);
expect(enabled).toBe(true);
expect(mocks.authenticatedRequest).toHaveBeenCalledWith(
"/departments/self-serve/enabled?id=22&enabled=true",
"PUT"
);
});
it("uses response enabled state after update when backend returns it", async () => {
mocks.authenticatedRequest.mockResolvedValue({
data: {
data: {
enabled: "false",
},
},
});
const enabled = await setDepartmentSelfServeEnabled(22, true);
expect(enabled).toBe(false);
expect(mocks.authenticatedRequest).toHaveBeenCalledWith(
"/departments/self-serve/enabled?id=22&enabled=true",
"PUT"
);
});
it("rejects invalid department ids", async () => {
await expect(getDepartmentSelfServeEnabled(0)).rejects.toThrow("Invalid department id");
await expect(setDepartmentSelfServeEnabled("abc", true)).rejects.toThrow("Invalid department id");
expect(mocks.authenticatedRequest).not.toHaveBeenCalled();
});
});