122 lines
3.5 KiB
JavaScript
122 lines
3.5 KiB
JavaScript
import assert from "node:assert/strict";
|
||
import { readFile } from "node:fs/promises";
|
||
import test from "node:test";
|
||
|
||
const legalDocuments = [
|
||
{
|
||
path: "../public/privacy-policy.html",
|
||
title: "Privacy Policy - CozSweet",
|
||
marker: "PRIVACY POLICY",
|
||
},
|
||
{
|
||
path: "../public/data-deletion.html",
|
||
title: "Data Deletion – CozSweet",
|
||
marker: "HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?",
|
||
},
|
||
{
|
||
path: "../public/membership-agreement.html",
|
||
title: "Membership Service Agreement - CozSweet",
|
||
marker: "MEMBERSHIP SERVICE AGREEMENT",
|
||
},
|
||
{
|
||
path: "../public/auto-renewal-agreement.html",
|
||
title: "Auto-Renewal Service Agreement - CozSweet",
|
||
marker: "AUTO-RENEWAL SERVICE AGREEMENT",
|
||
},
|
||
{
|
||
path: "../public/cozsweet/privacy-policy.html",
|
||
title: "Privacy Policy - CozSweet",
|
||
marker: "BUYER PROTECTION POLICY",
|
||
},
|
||
{
|
||
path: "../public/cozsweet/data-deletion.html",
|
||
title: "Data Deletion – CozSweet",
|
||
marker: "HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?",
|
||
},
|
||
{
|
||
path: "../public/cozsweet/membership-agreement.html",
|
||
title: "Membership Service Agreement - CozSweet",
|
||
marker: "MEMBERSHIP SERVICE AGREEMENT",
|
||
},
|
||
{
|
||
path: "../public/cozsweet/auto-renewal-agreement.html",
|
||
title: "Auto-Renewal Service Agreement - CozSweet",
|
||
marker: "AUTO-RENEWAL SERVICE AGREEMENT",
|
||
},
|
||
];
|
||
|
||
for (const document of legalDocuments) {
|
||
test(`includes ${document.title}`, async () => {
|
||
const html = await readFile(new URL(document.path, import.meta.url), "utf8");
|
||
|
||
assert.match(html, new RegExp(`<title>${document.title}</title>`));
|
||
assert.ok(html.includes(document.marker));
|
||
assert.ok(html.length > 1_000);
|
||
});
|
||
}
|
||
|
||
test("keeps both privacy policy URLs byte-identical", async () => {
|
||
const rootPolicy = await readFile(
|
||
new URL("../public/privacy-policy.html", import.meta.url),
|
||
);
|
||
const cozsweetPolicy = await readFile(
|
||
new URL("../public/cozsweet/privacy-policy.html", import.meta.url),
|
||
);
|
||
|
||
assert.deepEqual(cozsweetPolicy, rootPolicy);
|
||
});
|
||
|
||
for (const documentName of [
|
||
"data-deletion",
|
||
"membership-agreement",
|
||
"auto-renewal-agreement",
|
||
]) {
|
||
test(`keeps both ${documentName} URLs byte-identical`, async () => {
|
||
const rootDocument = await readFile(
|
||
new URL(`../public/${documentName}.html`, import.meta.url),
|
||
);
|
||
const cozsweetDocument = await readFile(
|
||
new URL(`../public/cozsweet/${documentName}.html`, import.meta.url),
|
||
);
|
||
|
||
assert.deepEqual(cozsweetDocument, rootDocument);
|
||
});
|
||
}
|
||
|
||
test("exposes all legal documents from the site footer", async () => {
|
||
const source = await readFile(
|
||
new URL("../components/SiteShell.tsx", import.meta.url),
|
||
"utf8",
|
||
);
|
||
|
||
for (const href of [
|
||
"/cozsweet/privacy-policy.html",
|
||
"/cozsweet/data-deletion.html",
|
||
"/cozsweet/membership-agreement.html",
|
||
"/cozsweet/auto-renewal-agreement.html",
|
||
]) {
|
||
assert.ok(source.includes(`href="${href}"`), `Missing footer link: ${href}`);
|
||
}
|
||
});
|
||
|
||
test("redirects the legacy .html URLs through the worker", async () => {
|
||
const source = await readFile(
|
||
new URL("../worker/index.ts", import.meta.url),
|
||
"utf8",
|
||
);
|
||
|
||
for (const documentName of [
|
||
"privacy-policy",
|
||
"data-deletion",
|
||
"membership-agreement",
|
||
"auto-renewal-agreement",
|
||
]) {
|
||
assert.ok(
|
||
source.includes(
|
||
`"/cozsweet/${documentName}.html": "/${documentName}.html"`,
|
||
),
|
||
`Missing legacy redirect: ${documentName}`,
|
||
);
|
||
}
|
||
});
|