frigate/web/e2e/specs/_meta/mock-overrides.spec.ts

74 lines
2.5 KiB
TypeScript
Raw Normal View History

/**
* 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);
});
});