47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { afterEach, expect, test, vi } from "vitest";
|
|
import {
|
|
reloadWithUpdatedServiceWorker,
|
|
versionedServiceWorkerURL,
|
|
} from "./util.ts";
|
|
|
|
afterEach(() => vi.unstubAllGlobals());
|
|
|
|
test("builds a versioned worker URL at the root", () => {
|
|
expect(
|
|
versionedServiceWorkerURL("2.10.0-build", "https://notes.example/").href,
|
|
).toBe("https://notes.example/service_worker.js?v=2.10.0-build");
|
|
});
|
|
|
|
test("keeps a space prefix in the versioned worker URL", () => {
|
|
expect(
|
|
versionedServiceWorkerURL(
|
|
"release 1",
|
|
"https://notes.example/personal/page",
|
|
).href,
|
|
).toBe("https://notes.example/personal/service_worker.js?v=release+1");
|
|
});
|
|
|
|
test("falls back to unregistering the worker without clearing local data", async () => {
|
|
const registration = {
|
|
update: vi.fn().mockResolvedValue(undefined),
|
|
unregister: vi.fn().mockResolvedValue(true),
|
|
waiting: null,
|
|
installing: null,
|
|
};
|
|
const reload = vi.fn();
|
|
vi.stubGlobal("location", { reload });
|
|
vi.stubGlobal("document", { baseURI: "https://notes.example/" });
|
|
vi.stubGlobal("navigator", {
|
|
serviceWorker: {
|
|
getRegistration: vi.fn().mockResolvedValue(registration),
|
|
},
|
|
});
|
|
|
|
await reloadWithUpdatedServiceWorker();
|
|
|
|
expect(registration.update).toHaveBeenCalledOnce();
|
|
expect(registration.unregister).toHaveBeenCalledOnce();
|
|
expect(reload).toHaveBeenCalledOnce();
|
|
expect(globalThis.indexedDB).toBeUndefined();
|
|
});
|