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", }); }); });