CI / check (push) Successful in 32s
CI / tests-imaging-browsers (push) Successful in 1m33s
CI / tests-integration (push) Successful in 2m5s
CI / tests-unit (push) Successful in 2m7s
CI / tests-ui (push) Successful in 2m47s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 3m44s
Environment-independent contract tests (cache headers + source, CORS, OPTIONS preflight, negative figure/badge tables, concurrency burst) run in both the deploy gate and the cross-browser job. CMS-only /imaging assertions (webp/avif transcode, animated-APNG passthrough, s-maxage edge caching) live in cms-imaging.spec.ts and are skipped behind the edge proxy; the public topology has its own public-routing.spec.ts smoke that fails if the edge ever stops fronting the imager or starts shadowing the CMS endpoints. A committed per-engine visual baseline pins the static render. The cross-browser imaging job is now blocking (IMAGING_EDGE=1), so avatar imaging on chromium/firefox/webkit is a required signal.
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import {
|
|
avatarPath,
|
|
IMAGER_PATH,
|
|
IS_EDGE,
|
|
looksLikeImage,
|
|
} from "./imaging-target";
|
|
|
|
// Regression guard for the public topology: the edge proxy must front the
|
|
// imager container at `/imaging/*` while `/api/imaging/*` reaches the CMS.
|
|
// Mis-routing here blanks avatars for every visitor, and no unit test sees it.
|
|
// Only meaningful against the public origin, so it is skipped when the CMS is
|
|
// reached directly (set `IMAGING_EDGE=1` for the public origin).
|
|
test.skip(
|
|
!IS_EDGE,
|
|
"Public routing is only asserted against the edge-fronted origin",
|
|
);
|
|
|
|
test("the edge serves the imager endpoint as an image", async ({ request }) => {
|
|
const response = await request.get(IMAGER_PATH({ img_format: "png" }));
|
|
expect(response.status()).toBe(200);
|
|
expect(response.headers()["content-type"]).toContain("image/");
|
|
expect(looksLikeImage(await response.body())).toBe(true);
|
|
});
|
|
|
|
test("the CMS avatar endpoint is reachable through the edge", async ({
|
|
request,
|
|
}) => {
|
|
const response = await request.get(avatarPath({ img_format: "png" }));
|
|
expect(response.status()).toBe(200);
|
|
expect(response.headers()["content-type"]).toContain("image/");
|
|
expect(looksLikeImage(await response.body())).toBe(true);
|
|
});
|
|
|
|
test("the edge does not shadow the CMS badge endpoint", async ({ request }) => {
|
|
const response = await request.get("/api/imaging/badge?code=ADM");
|
|
expect(response.status()).toBe(200);
|
|
expect(response.headers()["content-type"]).toContain("image/");
|
|
});
|