2024-03-04 13:28:42 +01:00
|
|
|
import { test, expect } from "@playwright/test";
|
2024-03-04 09:55:39 +01:00
|
|
|
|
2024-03-04 13:28:42 +01:00
|
|
|
test("Cox can start and cancel trip", async ({ page }, testInfo) => {
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/auth");
|
2024-03-04 13:28:42 +01:00
|
|
|
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");
|
2024-03-04 09:55:39 +01:00
|
|
|
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/");
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByRole("link", { name: "Ausfahrt eintragen" }).click();
|
|
|
|
if (testInfo.project.name.includes("Mobile")) {
|
|
|
|
// No left boat selector on mobile views
|
|
|
|
await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click();
|
|
|
|
await page.getByRole("option", { name: "Joe" }).click();
|
|
|
|
} else {
|
2024-04-24 07:39:44 +02:00
|
|
|
await page.getByText('2x').click();
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByText("Joe", { exact: true }).click();
|
2024-03-04 09:55:39 +01:00
|
|
|
}
|
2024-03-04 13:28:42 +01:00
|
|
|
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");
|
2024-03-04 09:55:39 +01:00
|
|
|
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByRole("link", { name: "Joe" }).click();
|
|
|
|
page.once("dialog", (dialog) => {
|
2024-03-04 09:55:39 +01:00
|
|
|
dialog.accept().catch(() => {});
|
|
|
|
});
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByRole("link", { name: "Löschen" }).click();
|
2024-03-04 09:55:39 +01:00
|
|
|
});
|
|
|
|
|
2024-03-04 13:28:42 +01:00
|
|
|
test("Cox can start and finish trip", async ({ page }, testInfo) => {
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/auth");
|
2024-03-04 13:28:42 +01:00
|
|
|
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");
|
2024-03-04 09:55:39 +01:00
|
|
|
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/");
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByRole("link", { name: "Ausfahrt eintragen" }).click();
|
|
|
|
if (testInfo.project.name.includes("Mobile")) {
|
|
|
|
// No left boat selector on mobile views
|
|
|
|
await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click();
|
|
|
|
await page.getByRole("option", { name: "Joe" }).click();
|
|
|
|
} else {
|
2024-04-24 07:39:44 +02:00
|
|
|
await page.getByText('2x').click();
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByText("Joe", { exact: true }).click();
|
2024-03-04 09:55:39 +01:00
|
|
|
}
|
2024-03-04 13:28:42 +01:00
|
|
|
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");
|
2024-03-04 09:55:39 +01:00
|
|
|
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/log");
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.locator("div:nth-child(2) > .border-0").click();
|
2024-03-05 14:29:27 +01:00
|
|
|
|
2024-03-05 00:17:02 +01:00
|
|
|
// Add a minute
|
2024-03-05 14:29:27 +01:00
|
|
|
const datetimeSelector = '#arrivaljs';
|
|
|
|
const currentValue = await page.$eval(datetimeSelector, el => el.value);
|
|
|
|
const currentDate = new Date(currentValue);
|
|
|
|
currentDate.setMinutes(currentDate.getMinutes() + 1);
|
2024-04-15 21:32:16 +02:00
|
|
|
currentDate.setHours(currentDate.getHours() - new Date().getTimezoneOffset()/60);
|
2024-03-05 14:29:27 +01:00
|
|
|
const newDatetime = currentDate.toISOString().slice(0, 16);
|
|
|
|
await page.$eval(datetimeSelector, (el, value) => el.value = value, newDatetime);
|
2024-03-05 00:17:02 +01:00
|
|
|
|
2024-03-04 13:28:42 +01:00
|
|
|
await page.getByRole("combobox", { name: "Destination" }).click();
|
|
|
|
await page.getByRole("combobox", { name: "Destination" }).fill("Ottensheim");
|
|
|
|
await page.getByRole("button", { name: "Ausfahrt beenden" }).click();
|
|
|
|
await expect(page.locator("body")).toContainText(
|
|
|
|
"Ausfahrt korrekt eingetragen",
|
|
|
|
);
|
2024-03-04 14:04:13 +01:00
|
|
|
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto('/log/show');
|
2024-03-04 14:04:13 +01:00
|
|
|
await expect(page.locator('body')).toContainText('Joe');
|
2024-03-04 14:28:19 +01:00
|
|
|
await expect(page.locator('body')).toContainText('(cox2)');
|
2024-03-04 14:04:13 +01:00
|
|
|
await expect(page.locator('body')).toContainText('Ottensheim (25 km)');
|
2024-03-04 14:25:14 +01:00
|
|
|
await expect(page.locator('body')).toContainText('Ruderer: cox2, rower2');
|
2024-03-04 14:04:13 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
test("Kiosk can start and cancel trip", async ({ page }, testInfo) => {
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/log/kiosk/ekrv2019/Linz");
|
2024-03-04 14:04:13 +01:00
|
|
|
if (testInfo.project.name.includes("Mobile")) {
|
|
|
|
// No left boat selector on mobile views
|
|
|
|
await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click();
|
|
|
|
await page.getByRole("option", { name: "Joe" }).click();
|
|
|
|
} else {
|
2024-04-24 07:39:44 +02:00
|
|
|
await page.getByText('2x').click();
|
2024-03-04 14:04:13 +01:00
|
|
|
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) => {
|
|
|
|
dialog.accept().catch(() => {});
|
|
|
|
});
|
|
|
|
await page.getByRole("link", { name: "Löschen" }).click();
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Kiosk can start and finish trip", async ({ page }, testInfo) => {
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/log/kiosk/ekrv2019/Linz");
|
2024-03-04 14:04:13 +01:00
|
|
|
|
|
|
|
if (testInfo.project.name.includes("Mobile")) {
|
|
|
|
// No left boat selector on mobile views
|
|
|
|
await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click();
|
|
|
|
await page.getByRole("option", { name: "Joe" }).click();
|
|
|
|
} else {
|
2024-04-24 07:39:44 +02:00
|
|
|
await page.getByText('2x').click();
|
2024-03-04 14:04:13 +01:00
|
|
|
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");
|
|
|
|
|
2024-03-05 00:53:09 +01:00
|
|
|
await page.goto("/log");
|
2024-03-04 14:55:11 +01:00
|
|
|
await page.locator('div:nth-child(2) > .pt-2 > div > div > div:nth-child(2) > .border-0').click(); // 2 trips currently running, try to close second one
|
2024-03-05 00:17:02 +01:00
|
|
|
|
|
|
|
// Add a minute
|
2024-03-05 14:29:27 +01:00
|
|
|
const datetimeSelector = '#arrivaljs';
|
|
|
|
const currentValue = await page.$eval(datetimeSelector, el => el.value);
|
|
|
|
const currentDate = new Date(currentValue);
|
|
|
|
currentDate.setMinutes(currentDate.getMinutes() + 1);
|
2024-04-15 21:32:16 +02:00
|
|
|
currentDate.setHours(currentDate.getHours() - new Date().getTimezoneOffset()/60);
|
2024-03-05 14:29:27 +01:00
|
|
|
const newDatetime = currentDate.toISOString().slice(0, 16);
|
|
|
|
await page.$eval(datetimeSelector, (el, value) => el.value = value, newDatetime);
|
2024-03-05 00:17:02 +01:00
|
|
|
|
2024-03-04 14:04:13 +01:00
|
|
|
await page.getByRole("combobox", { name: "Destination" }).click();
|
|
|
|
await page.getByRole("combobox", { name: "Destination" }).fill("Ottensheim");
|
|
|
|
await page.getByRole("button", { name: "Ausfahrt beenden" }).click();
|
|
|
|
await expect(page.locator("body")).toContainText(
|
|
|
|
"Ausfahrt korrekt eingetragen",
|
|
|
|
);
|
|
|
|
|
|
|
|
await page.getByRole('link', { name: 'Logbuch' }).click();
|
|
|
|
await expect(page.locator('body')).toContainText('Joe');
|
2024-03-04 14:28:19 +01:00
|
|
|
await expect(page.locator('body')).toContainText('(cox2)');
|
2024-03-04 14:04:13 +01:00
|
|
|
await expect(page.locator('body')).toContainText('Ottensheim (25 km)');
|
2024-03-04 14:25:14 +01:00
|
|
|
await expect(page.locator('body')).toContainText('Ruderer: cox2, rower2');
|
2024-03-04 09:55:39 +01:00
|
|
|
});
|