import { test, expect, Page } from "@playwright/test"; import { resetDatabase, login } from "./helpers"; test.beforeEach(async () => { await resetDatabase(); }); test("cox can create and delete trip", async ({ page }) => { await page.goto("/auth"); await page.getByPlaceholder("Name").click(); await page.getByPlaceholder("Name").fill("cox"); await page.getByPlaceholder("Name").press("Tab"); await page.getByPlaceholder("Passwort").fill("cox"); await page.getByPlaceholder("Passwort").press("Enter"); await page.locator('li').filter({ hasText: 'Geplante Ausfahrten' }).getByRole('link').click(); await page.locator('a[href="#"]:has-text("Ausfahrt")').first().click(); await page.locator("#sidebar #planned_starting_time").click(); await page.locator("#sidebar #planned_starting_time").fill("18:00"); await page.locator("#sidebar #planned_starting_time").press("Tab"); await page.locator("#sidebar #planned_starting_time").press("Tab"); await page.getByRole("spinbutton").fill("5"); await page.getByRole("button", { name: "Erstellen", exact: true }).click(); await expect(page.locator("body")).toContainText("18:00 Uhr (cox) Details"); }); // TODO: group -> cox can create trips // TODO: cox can help/register at trips/events test.describe("cox can edit trips", () => { async function createTrip(page: Page) { await page.goto("/auth"); await page.getByPlaceholder("Name").click(); await page.getByPlaceholder("Name").fill("cox"); await page.getByPlaceholder("Name").press("Tab"); await page.getByPlaceholder("Passwort").fill("cox"); await page.getByPlaceholder("Passwort").press("Enter"); await page.locator('li').filter({ hasText: 'Geplante Ausfahrten' }).getByRole('link').click(); await page.locator('a[href="#"]:has-text("Ausfahrt")').first().click(); await page.locator("#sidebar #planned_starting_time").click(); await page.locator("#sidebar #planned_starting_time").fill("18:00"); await page.locator("#sidebar #planned_starting_time").press("Tab"); await page.locator("#sidebar #planned_starting_time").press("Tab"); await page.getByRole("spinbutton").fill("5"); await page.getByRole("button", { name: "Erstellen", exact: true }).click(); } test("edit remarks", async ({ page }) => { await createTrip(page); await page.goto("/planned"); await page.getByRole('link', { name: 'Details' }).nth(1).click(); await page.locator("#sidebar #notes").click(); await page.locator("#sidebar #notes").fill("Meine Anmerkung"); await page.getByRole("button", { name: "Speichern" }).click(); await page.getByRole("link", { name: "Details" }).nth(1).click(); await expect(page.locator("#sidebar")).toContainText( "Meine Anmerkung", ); }); test("add and remove guest", async ({ page }) => { await createTrip(page); await page.goto("/planned"); await page.getByRole("link", { name: "Details" }).nth(1).click(); await page.locator("#sidebar #user_note").click(); await page.locator("#sidebar #user_note").fill("Mein Gast"); await page.getByRole("button", { name: "Gast hinzufügen" }).click(); await expect(page.locator("body")).toContainText( "Erfolgreich angemeldet!", ); await page.getByRole("link", { name: "Details" }).nth(1).click(); await expect(page.locator("#sidebar")).toContainText( "Freie Plätze: 4", ); await expect(page.locator("#sidebar")).toContainText( "Mein Gast (Gast) Abmelden", ); await expect( page.getByRole("link", { name: "Termin löschen" }), ).not.toBeVisible(); await page.getByRole("link", { name: "Abmelden" }).click(); await expect(page.locator("body")).toContainText( "Erfolgreich abgemeldet!", ); await page.getByRole("link", { name: "Details" }).nth(1).click(); await expect(page.locator("#sidebar")).toContainText( "Freie Plätze: 5", ); await expect(page.locator("#sidebar")).toContainText( "Keine Ruderer angemeldet", ); await expect( page.getByRole("link", { name: "Termin löschen" }), ).toBeVisible(); }); test("change amount rower", async ({ page }) => { await createTrip(page); await page.goto("/planned"); await page.getByRole("link", { name: "Details" }).nth(1).click(); await expect(page.locator("#sidebar")).toContainText( "Freie Plätze: 5", ); await page.getByRole("spinbutton").click(); await page.getByRole("spinbutton").fill("3"); await page.getByRole("button", { name: "Speichern" }).click(); await expect(page.locator("body")).toContainText( "Ausfahrt erfolgreich aktualisiert.", ); }); test("call off trip", async ({ page }) => { await createTrip(page); // Someone registers... await page.goto("/auth/logout"); await page.waitForURL("/auth"); await login(page, "rower", "rower"); await page.goto("/planned"); await page.getByRole('link', { name: 'Mitrudern' }).nth(1).click(); // Login as cox again await page.goto("/auth/logout"); await page.waitForURL("/auth"); await login(page, "cox", "cox"); await page.goto("/planned"); // Now cancel the trip await page.getByRole("link", { name: "Details" }).nth(1).click(); await page.getByRole("button", { name: "Ausfahrt absagen" }).click(); await expect(page.locator("body")).toContainText( "Ausfahrt erfolgreich aktualisiert.", ); await expect(page.locator("body")).toContainText("(Absage cox)"); }); // TODO: 'Immer anzeigen' (also verify the functionality), 'Gesperrt' + type });