Files
route-commerce/tests/smoke.spec.ts

62 lines
2.3 KiB
TypeScript

import { test, expect } from "@playwright/test";
const BASE = process.env.PLAYWRIGHT_URL ?? "http://localhost:3000";
test.describe("Smoke Tests", () => {
test("Login — dev_session platform_admin lands on admin dashboard", async ({ page }) => {
await page.context().addCookies([
{ name: "dev_session", value: "platform_admin", domain: "localhost", path: "/" },
]);
await page.goto(`${BASE}/admin`);
await expect(page).toHaveURL(/\/admin/, { timeout: 5000 });
// Admin sidebar nav should be loaded (sidebar is rendered by layout)
await expect(page.locator("aside").first()).toBeVisible({ timeout: 5000 });
});
test("Admin Settings — page loads", async ({ page }) => {
await page.context().addCookies([
{ name: "dev_session", value: "platform_admin", domain: "localhost", path: "/" },
]);
await page.goto(`${BASE}/admin/settings`);
// Wait for redirect to complete (may go to /login first)
await page.waitForURL(/\/admin\/settings/, { timeout: 10000 });
// Page renders without crash — main content area should exist
await expect(page.locator("main").first()).toBeVisible({ timeout: 8000 });
});
test("Time Tracking — page loads", async ({ page }) => {
await page.context().addCookies([
{ name: "dev_session", value: "platform_admin", domain: "localhost", path: "/" },
]);
await page.goto(`${BASE}/admin/time-tracking`);
await expect(page).toHaveURL(/\/admin\/time-tracking/, { timeout: 5000 });
await expect(page.locator("body")).toBeVisible();
});
test("Tuxedo storefront — homepage loads without console errors", async ({ page }) => {
const errors: string[] = [];
page.on("console", (msg) => {
if (msg.type() === "error") errors.push(msg.text());
});
await page.goto(`${BASE}/tuxedo`);
// Hero brand name — use a more stable anchor
await expect(page.locator("h1").first()).toBeVisible({ timeout: 10000 });
// "Why Choose" section heading is a strong signal the page rendered correctly
await expect(page.getByRole("heading", { name: /why choose/i })).toBeVisible({ timeout: 5000 });
// No console errors (filter known non-critical)
const criticalErrors = errors.filter(
(e) => !e.includes("favicon") && !e.includes("Warning:")
);
expect(criticalErrors).toHaveLength(0);
});
});