Timed jobs move from in-process timers to a job registry run by pg-boss: once per schedule across processes, retries, run history, cron schedules in the church timezone, and an admin Background jobs page with Run now. Playwright end-to-end tests run against their own seeded database. A Gitea Actions workflow runs backend tests, frontend checks and the e2e tests, and deploys v* tags with scripts/deploy.sh once secrets are set. Also fixes the at-the-door check-in count for multi-day tickets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.6 KiB
TypeScript
29 lines
1.6 KiB
TypeScript
import { test, expect, seed } from "./fixtures";
|
||
|
||
test.describe("public pages", () => {
|
||
test("events list shows events, with the multi-day summary", async ({ page }) => {
|
||
await page.goto("/events");
|
||
await expect(page.getByRole("heading", { name: "All Events" })).toBeVisible();
|
||
await expect(page.getByText("E2E Free Evening")).toBeVisible();
|
||
const course = page.locator("div.border.rounded-xl", { hasText: "E2E Alpha Course" });
|
||
await expect(course.getByText(/5 sessions · /)).toBeVisible();
|
||
});
|
||
|
||
test("a multi-day event page shows the schedule and the late-joiner price", async ({ page }) => {
|
||
await page.goto(`/events/${seed().events.course}`);
|
||
await expect(page.getByRole("heading", { name: "E2E Alpha Course" })).toBeVisible();
|
||
const schedule = page.locator("div.rounded-xl", { has: page.getByRole("heading", { name: "Schedule" }) });
|
||
await expect(schedule.getByText("Week 1")).toBeVisible();
|
||
await expect(schedule.getByText("Week 5")).toBeVisible();
|
||
await expect(schedule.getByText("Next")).toBeVisible();
|
||
// Week 2 is in progress, so 3 of 5 are still to come: R300 × 3/5 = R180.
|
||
await expect(page.getByText(/3 of 5 sessions are still to come/).filter({ visible: true }).first()).toBeVisible();
|
||
await expect(page.getByText("R180.00").filter({ visible: true }).first()).toBeVisible();
|
||
});
|
||
|
||
test("an unknown certificate code is reported as not found", async ({ page }) => {
|
||
await page.goto("/certificates/verify/ABCDE-12345");
|
||
await expect(page.getByRole("heading", { name: "Certificate not found" })).toBeVisible();
|
||
});
|
||
});
|