/** * Self-tests for the mock override helpers. Verifies each helper * intercepts the matched URL and returns the expected payload/status. */ import { test, expect } from "../../fixtures/frigate-test"; import { mockEmpty, mockError, mockDelay } from "../../helpers/mock-overrides"; test.describe("Mock Overrides — empty @meta", () => { test("mockEmpty returns []", async ({ page, frigateApp }) => { await mockEmpty(page, "**/api/__meta_test__"); await frigateApp.goto("/"); const result = await page.evaluate(async () => { const r = await fetch("/api/__meta_test__"); return { status: r.status, body: await r.json() }; }); expect(result.status).toBe(200); expect(result.body).toEqual([]); }); }); test.describe("Mock Overrides — error default @meta", () => { // Match both the collected request error and the browser's console echo. // Using a single alternation regex avoids Playwright's isFixtureTuple // collision with multi-element RegExp arrays. test.use({ expectedErrors: [/500.*__meta_test__|Failed to load resource.*500/], }); test("mockError returns 500 by default", async ({ page, frigateApp }) => { await mockError(page, "**/api/__meta_test__"); await frigateApp.goto("/"); const status = await page.evaluate(async () => { const r = await fetch("/api/__meta_test__"); return r.status; }); expect(status).toBe(500); }); }); test.describe("Mock Overrides — error custom status @meta", () => { // The browser emits a "Failed to load resource" console.error for 404s, // which the error collector catches even though 404 is not a 5xx. test.use({ expectedErrors: [/Failed to load resource.*404|404.*__meta_test_404__/], }); test("mockError accepts a custom status", async ({ page, frigateApp }) => { await mockError(page, "**/api/__meta_test_404__", 404); await frigateApp.goto("/"); const status = await page.evaluate(async () => { const r = await fetch("/api/__meta_test_404__"); return r.status; }); expect(status).toBe(404); }); }); test.describe("Mock Overrides — delay @meta", () => { test("mockDelay delays response by the requested ms", async ({ page, frigateApp, }) => { await mockDelay(page, "**/api/__meta_test_delay__", 300, ["delayed"]); await frigateApp.goto("/"); const elapsed = await page.evaluate(async () => { const start = performance.now(); await fetch("/api/__meta_test_delay__"); return performance.now() - start; }); expect(elapsed).toBeGreaterThanOrEqual(250); }); });