import { test, expect, Page } from '@playwright/test'; test('cox can create and delete trip', async ({ page }) => { await page.goto('http://localhost:8000/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.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); await page.locator('.relative').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 page.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); await expect(page.locator('body')).toContainText('18:00 Uhr (cox) Details'); await page.goto('http://localhost:8000/planned'); await page.getByRole('link', { name: 'Details' }).click(); await page.getByRole('link', { name: 'Termin löschen' }).click(); await expect(page.locator('body')).toContainText('Erfolgreich gelöscht!'); }); // TODO: group -> cox can create trips // TODO: cox can help/register at trips/events test.describe('cox can edit trips', () => { let sharedPage: Page; test.beforeEach(async ({ browser }) => { const page = await browser.newPage(); await page.goto('http://localhost:8000/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.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); await page.locator('.relative').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(); sharedPage = page; }); test('edit remarks', async () => { await sharedPage.goto('http://localhost:8000/planned'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await sharedPage.locator('#sidebar #notes').click(); await sharedPage.locator('#sidebar #notes').fill('Meine Anmerkung'); await sharedPage.getByRole('button', { name: 'Speichern' }).click(); await sharedPage.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); await sharedPage.getByRole('link', { name: 'Details' }).click(); await expect(sharedPage.locator('#sidebar')).toContainText('Meine Anmerkung'); await sharedPage.getByRole('button', { name: 'Ausfahrt erstellen schließen' }).click(); }); test('add and remove guest', async () => { await sharedPage.goto('http://localhost:8000/planned'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await sharedPage.locator('#sidebar #user_note').click(); await sharedPage.locator('#sidebar #user_note').fill('Mein Gast'); await sharedPage.getByRole('button', { name: 'Gast hinzufügen' }).click(); await expect(sharedPage.locator('body')).toContainText('Erfolgreich angemeldet!'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await expect(sharedPage.locator('#sidebar')).toContainText('Freie Plätze: 4'); await expect(sharedPage.locator('#sidebar')).toContainText('Mein Gast (Gast) Abmelden'); await expect(sharedPage.getByRole('link', { name: 'Termin löschen' })).not.toBeVisible(); await sharedPage.getByRole('link', { name: 'Abmelden' }).click(); await expect(sharedPage.locator('body')).toContainText('Erfolgreich abgemeldet!'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await expect(sharedPage.locator('#sidebar')).toContainText('Freie Plätze: 5'); await expect(sharedPage.locator('#sidebar')).toContainText('Keine Ruderer angemeldet'); await expect(sharedPage.getByRole('link', { name: 'Termin löschen' })).toBeVisible(); await sharedPage.getByRole('button', { name: 'Ausfahrt erstellen schließen' }).click(); }); test('change amount rower', async () => { await sharedPage.goto('http://localhost:8000/planned'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await expect(sharedPage.locator('#sidebar')).toContainText('Freie Plätze: 5'); await sharedPage.getByRole('spinbutton').click(); await sharedPage.getByRole('spinbutton').fill('3'); await sharedPage.getByRole('button', { name: 'Speichern' }).click(); await expect(sharedPage.locator('body')).toContainText('Ausfahrt erfolgreich aktualisiert.'); await sharedPage.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); }); test('call off trip', async () => { await sharedPage.goto('http://localhost:8000/planned'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await expect(sharedPage.locator('#sidebar')).toContainText('Freie Plätze: 5'); await sharedPage.getByRole('spinbutton').click(); await sharedPage.getByRole('spinbutton').fill('0'); await sharedPage.getByRole('button', { name: 'Speichern' }).click(); await expect(sharedPage.locator('body')).toContainText('Ausfahrt erfolgreich aktualisiert.'); await sharedPage.getByRole('link', { name: 'Geplante Ausfahrten' }).click(); await expect(sharedPage.locator('body')).toContainText('(Absage cox )'); }); test.afterEach(async () => { await sharedPage.goto('http://localhost:8000/planned'); await sharedPage.getByRole('link', { name: 'Details' }).click(); await sharedPage.getByRole('link', { name: 'Termin löschen' }).click(); await sharedPage.close(); }); // TODO: 'Immer anzeigen' (also verify the functionality), 'Gesperrt' + type });