Privacy policy, terms of service, cookie policy + a cookie notice
Three plain-language documents in both app languages (lib/legal.ts, rendered by components/LegalPage.tsx): /privacy describes the local-first storage, the key never leaving the browser and the three opt-in server copies (sync, reminders, reports); /terms covers the GPL-3.0-only software, your own Ollama key, fair use and liability; /cookies states what is true — no cookies at all (no Set-Cookie, no document.cookie), strictly-necessary local storage instead, no tracking. A cookie notice tells every new browser the same thing once and remembers the dismissal (freezmo.consent.v1). It sits at z-44: below the immersive study feeds so it can never cover a session, above the phone tab bar. Settings links all three documents. The regression suite checks the pages render with real sections and that dismissing the notice sticks. Version 0.1.7, SW -> freezmo-v53.
This commit is contained in:
parent
df34337b4a
commit
464781a7fd
13 changed files with 583 additions and 2 deletions
|
|
@ -111,5 +111,32 @@ const browser = await launchBrowser();
|
|||
await context.close();
|
||||
}
|
||||
|
||||
/* 5. legal pages + the cookie notice --------------------------------- */
|
||||
{
|
||||
const { context, page } = await makePage(browser);
|
||||
await seed(page, { decks: [] });
|
||||
for (const [path, heading] of [
|
||||
["/privacy", "Privacy policy"],
|
||||
["/terms", "Terms of service"],
|
||||
["/cookies", "Cookie policy"],
|
||||
]) {
|
||||
await page.goto(`${BASE}${path}`, { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(600);
|
||||
check(`legal: ${path} renders`, await page.getByRole("heading", { name: heading, level: 1 }).isVisible());
|
||||
}
|
||||
check("legal: the pages carry real sections", (await page.locator("article section").count()) >= 3);
|
||||
|
||||
await page.goto(BASE, { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(700);
|
||||
const notice = page.getByRole("region", { name: "About cookies" });
|
||||
check("consent: the notice shows once", (await notice.count()) === 1);
|
||||
await page.getByRole("button", { name: "Got it" }).click();
|
||||
await page.waitForTimeout(400);
|
||||
await page.reload({ waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(800);
|
||||
check("consent: dismissing is remembered", (await notice.count()) === 0);
|
||||
await context.close();
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
finish();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue