From 5ee2f6f374a6f8fb8116346edc971c24520864f2 Mon Sep 17 00:00:00 2001 From: Alexandre Brandizzi Date: Wed, 30 Sep 2026 19:43:06 -0300 Subject: [PATCH] test(workorders): seed service registry in browser fixtures --- e2e/work-orders/advanced-filters.spec.ts | 17 ++++++++++ e2e/work-orders/work-orders.visual.spec.ts | 39 ++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/e2e/work-orders/advanced-filters.spec.ts b/e2e/work-orders/advanced-filters.spec.ts index ef4b55f1..cbda41ad 100644 --- a/e2e/work-orders/advanced-filters.spec.ts +++ b/e2e/work-orders/advanced-filters.spec.ts @@ -12,6 +12,19 @@ const TEST_USER = { id: "1", }; +const SERVICE_CATALOG = [ + { + id: 1, + name: "HVAC", + trade: "HVAC", + iconKey: "wrench", + requiresCompletionDocument: false, + completionDocTemplate: null, + isActive: true, + supportedWorkOrderTypes: ["PM"], + }, +]; + async function fulfillJson(route: Route, body: unknown, status = 200) { await route.fulfill({ status, contentType: "application/json", body: JSON.stringify(body) }); } @@ -39,6 +52,9 @@ async function mockWorkOrderApis(page: Page, searchUrls: string[]) { if (pathname.includes("/workorders/board") || pathname.includes("DropdownOptions")) { return route.fallback(); } + if (pathname === "/api/services") { + return fulfillJson(route, { data: SERVICE_CATALOG }); + } return fulfillJson(route, { data: [] }); }); await page.route("**/api/**/DropdownOptions/ByCategory/**", (route) => { @@ -136,6 +152,7 @@ test.describe("Work Orders advanced filters", () => { await sheet.getByRole("button", { name: /Indicators/i }).click(); await sheet.getByRole("button", { name: /^Add-On$/i }).click(); await sheet.getByRole("button", { name: /^Service/i }).click(); + await expect(sheet.getByText("HVAC", { exact: true })).toBeVisible(); await sheet.getByText("HVAC").click(); await sheet.getByRole("button", { name: /Completion doc/i }).click(); await sheet.getByRole("button", { name: /^Pending$/i }).click(); diff --git a/e2e/work-orders/work-orders.visual.spec.ts b/e2e/work-orders/work-orders.visual.spec.ts index 17f8d49b..46517d49 100644 --- a/e2e/work-orders/work-orders.visual.spec.ts +++ b/e2e/work-orders/work-orders.visual.spec.ts @@ -37,6 +37,29 @@ const VENDORS = [ }, ]; +const SERVICES = [ + { + id: 1, + name: "HVAC", + trade: "HVAC", + iconKey: "wrench", + requiresCompletionDocument: false, + completionDocTemplate: null, + isActive: true, + supportedWorkOrderTypes: ["PM"], + }, + { + id: 2, + name: "Plumbing", + trade: "Plumbing", + iconKey: "wrench", + requiresCompletionDocument: false, + completionDocTemplate: null, + isActive: true, + supportedWorkOrderTypes: ["PM"], + }, +]; + const scheduledRow = { id: 1, woNumber: "WO-501", @@ -150,6 +173,11 @@ async function mockWorkOrderApi(page: Page, mode: "default" | "empty" | "error" return; } + if (pathname === "/api/services") { + await fulfillJson(route, { data: SERVICES }); + return; + } + if (pathname.includes("/DropdownOptions/ByCategory/Problem")) { await fulfillJson(route, { data: [ @@ -192,7 +220,18 @@ async function mockWorkOrderApi(page: Page, mode: "default" | "empty" | "error" async function openWorkOrderPage(page: Page, mode: "default" | "empty" | "error" = "default") { await mockWorkOrderApi(page, mode); + const registryResponses = Promise.all([ + page.waitForResponse((response) => { + const url = new URL(response.url()); + return url.pathname === "/api/services" && url.searchParams.get("isActive") === "true"; + }), + page.waitForResponse((response) => { + const url = new URL(response.url()); + return url.pathname === "/api/services" && !url.searchParams.has("isActive"); + }), + ]); await page.goto("/workorders"); + await registryResponses; await page.evaluate(() => document.fonts.ready); await page.addStyleTag({ content: `