import { readFileSync, existsSync } from "node:fs"; import path from "node:path"; import { describe, expect, it } from "vitest"; const root = path.resolve(__dirname, ".."); const manifest = JSON.parse(readFileSync(path.join(root, "public/manifest.json"), "utf-8")) as { name: string; short_name: string; theme_color: string; icons: Array<{ src: string }>; }; const indexHtml = readFileSync(path.join(root, "index.html"), "utf-8"); describe("PWA install metadata", () => { it("identifies the app as Sea Haven, not template branding", () => { expect(manifest.name).toContain("Sea Haven"); expect(manifest.short_name).not.toBe("React App"); expect(manifest.name).not.toContain("Create React App"); }); it("uses the design-system theme color, matching index.html", () => { expect(manifest.theme_color).toBe("#1c75bc"); expect(indexHtml).toContain(``); }); it("only references icon files that exist in public/", () => { for (const icon of manifest.icons) { expect(existsSync(path.join(root, "public", icon.src)), `missing public/${icon.src}`).toBe( true, ); } }); });