mirror of
https://github.com/runbear-io/beardrive.git
synced 2026-08-25 08:08:08 +02:00
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
import { login } from "./helpers";
|
|
|
|
test("unauthenticated visit redirects to the login page", async ({ page }) => {
|
|
await page.goto("/");
|
|
await page.waitForURL(/auth\/login/);
|
|
await expect(page.locator('input[name="email"]')).toBeVisible();
|
|
});
|
|
|
|
test("login lands in the app shell", async ({ page }) => {
|
|
await login(page);
|
|
await expect(page).toHaveTitle(/BearDrive/); // "<project> — BearDrive" in hub mode
|
|
await expect(page.locator("#sidebar")).toBeVisible();
|
|
await expect(page.locator("#topbar")).toBeVisible();
|
|
});
|
|
|
|
test("hashed assets are served immutable, shell revalidates", async ({ page, request }) => {
|
|
await login(page);
|
|
const src = await page.locator('script[type="module"]').getAttribute("src");
|
|
expect(src).toMatch(/^\/assets\/.+\.js$/);
|
|
const asset = await request.get(src!);
|
|
expect(asset.headers()["cache-control"]).toContain("immutable");
|
|
const shell = await request.get("/");
|
|
expect(shell.headers()["cache-control"]).toBe("no-cache");
|
|
});
|
|
|
|
test("mistyped API path is a real 404, not the shell", async ({ page }) => {
|
|
await login(page); // unauthenticated /api/* is a 401 before routing
|
|
const res = await page.request.get("/api/nope");
|
|
expect(res.status()).toBe(404);
|
|
});
|
|
|
|
test("search button shows the shortcut tooltip on hover", async ({ page }) => {
|
|
const { login } = await import("./helpers");
|
|
await login(page);
|
|
await page.hover("#search-btn");
|
|
const tip = page.locator('[role="tooltip"], .tip').filter({ hasText: "Search" }).first();
|
|
await expect(tip).toBeVisible();
|
|
await expect(tip).toContainText("⌘");
|
|
});
|