diff --git a/frontend/main.ts b/frontend/main.ts index 5a25b2b..2ddfe48 100644 --- a/frontend/main.ts +++ b/frontend/main.ts @@ -107,6 +107,7 @@ interface ChoiceBoatEvent extends Event{ amount_seats: number, owner: number, default_destination: string, + boat_in_ottensheim: boolean, } }; } @@ -277,6 +278,7 @@ interface ChoiceEvent extends Event{ is_cox: boolean, steers: boolean, cox_on_boat: boolean, + is_racing: boolean, } }; } @@ -323,7 +325,7 @@ function initNewChoice(select: HTMLInputElement) { }, callbackOnInit: function() { this._currentState.items.forEach(function(obj){ - if (boat_in_ottensheim) { + if (boat_in_ottensheim && obj.customProperties) { if (obj.customProperties.is_racing) { const coxSelect = document.querySelector('#shipmaster-' + select.id + 'js'); var new_option = new Option(obj.label, obj.value); @@ -359,7 +361,7 @@ function initNewChoice(select: HTMLInputElement) { const user_id = event.detail.value; const name = event.detail.label; - if (boat_in_ottensheim) { + if (boat_in_ottensheim && event.detail.customProperties.is_racing) { if (event.detail.customProperties.is_racing) { const coxSelect = document.querySelector('#shipmaster-' + select.id + 'js'); if (coxSelect){ diff --git a/frontend/tests/log.spec.ts b/frontend/tests/log.spec.ts new file mode 100644 index 0000000..0a19224 --- /dev/null +++ b/frontend/tests/log.spec.ts @@ -0,0 +1,60 @@ +import { test, expect } from '@playwright/test'; + +test('Cox can start and cancel trip', async ({ page }) => { + await page.goto('http://localhost:8000/auth'); + await page.getByPlaceholder('Name').click(); + await page.getByPlaceholder('Name').fill('cox2'); + await page.getByPlaceholder('Name').press('Tab'); + await page.getByPlaceholder('Passwort').fill('cox'); + await page.getByPlaceholder('Passwort').press('Enter'); + + await page.goto('http://localhost:8000/'); + await page.getByRole('link', { name: 'Ausfahrt eintragen' }).click(); + await page.getByText('Joe', { exact: true }).click(); + await page.getByPlaceholder('Ruderer auswählen').click(); + await page.getByRole('option', { name: 'rower2' }).click(); + await page.getByRole('option', { name: 'cox2' }).click(); + await expect(page.getByRole('listbox')).toContainText('Nur 2 Ruderer können hinzugefügt werden'); + await expect(page.locator('#shipmaster-newrowerjs')).toContainText('cox'); + await expect(page.locator('#steering_person-newrowerjs')).toContainText('rower2 cox'); + await page.getByRole('button', { name: 'Ausfahrt eintragen' }).click(); + await expect(page.locator('body')).toContainText('Ausfahrt erfolgreich hinzugefügt'); + await expect(page.locator('body')).toContainText('Joe'); + + await page.getByRole('link', { name: 'Joe' }).click(); + page.once('dialog', dialog => { + console.log(`Dialog message: ${dialog.message()}`); + dialog.dismiss().catch(() => {}); + }); + await page.getByRole('link', { name: 'Löschen' }).click(); +}); + +test('Cox can start and finish trip', async ({ page }) => { + await page.goto('http://localhost:8000/auth'); + await page.getByPlaceholder('Name').click(); + await page.getByPlaceholder('Name').fill('cox2'); + await page.getByPlaceholder('Name').press('Tab'); + await page.getByPlaceholder('Passwort').fill('cox'); + await page.getByPlaceholder('Passwort').press('Enter'); + + await page.goto('http://localhost:8000/'); + await page.getByRole('link', { name: 'Ausfahrt eintragen' }).click(); + await page.getByText('Joe', { exact: true }).click(); + await page.getByPlaceholder('Ruderer auswählen').click(); + await page.getByRole('option', { name: 'rower2' }).click(); + await page.getByRole('option', { name: 'cox2' }).click(); + await expect(page.getByRole('listbox')).toContainText('Nur 2 Ruderer können hinzugefügt werden'); + await expect(page.locator('#shipmaster-newrowerjs')).toContainText('cox'); + await expect(page.locator('#steering_person-newrowerjs')).toContainText('rower2 cox'); + await page.getByRole('button', { name: 'Ausfahrt eintragen' }).click(); + await expect(page.locator('body')).toContainText('Ausfahrt erfolgreich hinzugefügt'); + await expect(page.locator('body')).toContainText('Joe'); + + await page.goto('http://localhost:8000/log'); + await page.locator('div:nth-child(2) > .border-0').click(); + await page.getByRole('combobox', { name: 'Destination' }).click(); + await page.getByRole('combobox', { name: 'Destination' }).fill('Ottensheim'); + await page.waitForTimeout(60000); + await page.getByRole('button', { name: 'Ausfahrt beenden' }).click(); + await expect(page.locator('body')).toContainText('Ausfahrt korrekt eingetragen'); +});