Files
clean-architecture-frontend…/tests/unit/service-worker-build-input.test.ts
T
2026-08-01 19:39:59 +09:00

88 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { resolveServiceWorkerBuildInput } from "../../scripts/lib/service-worker-build-input.ts";
const digest = (character: string) => `sha256:${character.repeat(64)}`;
describe("service worker build input", () => {
const selection = {
mode: "ACTIVE" as const,
scriptPath: "service-worker.js" as const,
handlers: ["PWA_STATIC_ASSETS" as const],
};
const assets = {
schemaVersion: 1 as const,
buildId: "build-1",
releaseId: "release-1",
setDigest: digest("a"),
assets: [],
};
it("rejects a direct worker build when ACTIVE selection or generated inputs are absent", () => {
expect(() =>
resolveServiceWorkerBuildInput({
selection: null,
assets,
contractSet: { setDigest: digest("b") },
runtimeConfig: { RELEASE_MANIFEST_URL: "/release-manifest.json" },
buildId: "build-1",
releaseId: "release-1",
}),
).toThrow(/ACTIVE/u);
expect(() =>
resolveServiceWorkerBuildInput({
selection,
assets: null,
contractSet: { setDigest: digest("b") },
runtimeConfig: { RELEASE_MANIFEST_URL: "/release-manifest.json" },
buildId: "build-1",
releaseId: "release-1",
}),
).toThrow(/asset manifest/u);
});
it("rejects stale generated identity instead of compiling a mismatched worker", () => {
expect(() =>
resolveServiceWorkerBuildInput({
selection,
assets: { ...assets, buildId: "old-build" },
contractSet: { setDigest: digest("b") },
runtimeConfig: { RELEASE_MANIFEST_URL: "/release-manifest.json" },
buildId: "build-1",
releaseId: "release-1",
}),
).toThrow(/identity/u);
});
it("rejects WEB_PUSH selection until its product-owned worker contribution exists", () => {
expect(() =>
resolveServiceWorkerBuildInput({
selection: { ...selection, handlers: ["WEB_PUSH"] },
assets,
contractSet: { setDigest: digest("b") },
runtimeConfig: { RELEASE_MANIFEST_URL: "/release-manifest.json" },
buildId: "build-1",
releaseId: "release-1",
}),
).toThrow(/WEB_PUSH.*contribution/u);
});
it("returns only fully matched, digest-bearing generated inputs", () => {
expect(
resolveServiceWorkerBuildInput({
selection,
assets,
contractSet: { setDigest: digest("b") },
runtimeConfig: { RELEASE_MANIFEST_URL: "/release-manifest.json" },
buildId: "build-1",
releaseId: "release-1",
}),
).toMatchObject({
assets,
handlers: ["PWA_STATIC_ASSETS"],
contractSetDigest: digest("b"),
releaseManifestUrl: "/release-manifest.json",
});
});
});