88 lines
2.7 KiB
TypeScript
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",
|
|
});
|
|
});
|
|
});
|