mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
captureException now checks isRequestOptedIn before forwarding errors to Sentry, closing a gap where server errors leaked to an external service even when no user had consented. The PII scrubbing regex is also fixed: he[ic]f? failed to match .heic due to word-boundary behavior and is replaced with hei[cf]? which correctly covers .heic, .heif, and .hei. Adds 88 new analytics tests across unit, integration, and e2e layers proving PostHog/Sentry are never invoked when analytics is disabled or users have not consented, plus full 7-day reminder lifecycle coverage.
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { test as base, expect, type Page } from "@playwright/test";
|
|
|
|
export async function login(page: Page, username = "admin", password = "admin") {
|
|
await page.goto("/login");
|
|
await page.getByLabel("Username").fill(username);
|
|
await page.getByLabel("Password").fill(password);
|
|
await page.getByRole("button", { name: /login/i }).click();
|
|
}
|
|
|
|
export async function getSessionViaApi(page: Page) {
|
|
const token = await page.evaluate(() => localStorage.getItem("snapotter-token") ?? "");
|
|
const res = await page.request.get("/api/auth/session", {
|
|
headers: { Authorization: `Bearer ${token}` },
|
|
});
|
|
return res.json();
|
|
}
|
|
|
|
export async function setConsentViaApi(
|
|
page: Page,
|
|
data: { enabled?: boolean; remindLater?: boolean },
|
|
) {
|
|
const token = await page.evaluate(() => localStorage.getItem("snapotter-token") ?? "");
|
|
const apiBase = process.env.API_URL || "http://localhost:13491";
|
|
await page.request.put(`${apiBase}/api/v1/user/analytics`, {
|
|
headers: { Authorization: `Bearer ${token}` },
|
|
data,
|
|
});
|
|
}
|
|
|
|
export const test = base.extend<{ loggedInPage: Page }>({
|
|
loggedInPage: async ({ page }, use) => {
|
|
await page.goto("/");
|
|
await use(page);
|
|
},
|
|
});
|
|
|
|
export { expect };
|