import { NZAP_TEST_ID } from "~/db/seed/constants"; import { ADMIN_ID } from "~/features/admin/admin-constants"; import { scrimsNewFormSchema } from "~/features/scrims/scrims-schemas"; import { expect, impersonate, navigate, seed, selectUser, submit, test, } from "~/utils/playwright"; import { createFormHelpers } from "~/utils/playwright-form"; import { newScrimPostPage, scrimsPage } from "~/utils/urls"; test.describe("Scrims", () => { test("creates a new scrim & deletes it", async ({ page }) => { await seed(page); await impersonate(page, ADMIN_ID); await navigate({ page, url: "/", }); await page.getByTestId("anything-adder-menu-button").click(); await page.getByTestId("menu-item-scrimPost").click(); const form = createFormHelpers(page, scrimsNewFormSchema); await page.getByLabel("With").selectOption("PICKUP"); await selectUser({ labelName: "User 2", page, userName: "N-ZAP", }); await selectUser({ labelName: "User 3", page, userName: "ab", }); await selectUser({ labelName: "User 4", page, userName: "de", }); await page.getByLabel("Visibility").selectOption("2"); // Schema-defined field - use form helper await form.fill("postText", "Test scrim"); await submit(page); await expect(page.getByTestId("limited-visibility-popover")).toBeVisible(); await page.getByRole("button", { name: "Delete" }).first().click(); await submit(page, "confirm-button"); await expect(page.getByRole("button", { name: "Delete" })).toHaveCount(1); }); test("requests an existing scrim post & cancels the request", async ({ page, }) => { await seed(page); await impersonate(page, ADMIN_ID); await navigate({ page, url: scrimsPage(), }); const requestScrimButtonLocator = page.getByTestId("request-scrim-button"); await page.getByTestId("available-scrims-tab").click(); await expect(requestScrimButtonLocator.first()).toBeVisible(); const initialCount = await requestScrimButtonLocator.count(); await requestScrimButtonLocator.first().click(); await submit(page); await expect(requestScrimButtonLocator).toHaveCount(initialCount - 1); const togglePendingRequestsButton = page.getByTestId( "toggle-pending-requests-button", ); await togglePendingRequestsButton.first().click(); await page.getByTestId("view-request-button").first().click(); const cancelButton = page.getByRole("button", { name: "Cancel", }); await cancelButton.click(); await expect(requestScrimButtonLocator).toHaveCount(initialCount); }); test("accepts a request", async ({ page }) => { await seed(page); await impersonate(page, ADMIN_ID); await navigate({ page, url: scrimsPage(), }); await page.getByTestId("confirm-modal-trigger-button").first().click(); await submit(page, "confirm-button"); await page.getByTestId("booked-scrims-tab").click(); const contactButtonLocator = page.getByRole("link", { name: "Contact" }); await expect(contactButtonLocator).toHaveCount(2); await page.getByRole("link", { name: "Contact" }).first().click(); await expect(page.getByText("Scheduled scrim")).toBeVisible(); }); test("cancels a scrim and shows canceled status", async ({ page }) => { await seed(page); await impersonate(page, ADMIN_ID); await navigate({ page, url: scrimsPage(), }); // Accept the first available scrim request to make it possible to access the scrim details page await page.getByTestId("confirm-modal-trigger-button").first().click(); await submit(page, "confirm-button"); await page.getByTestId("booked-scrims-tab").click(); await page.getByRole("link", { name: "Contact" }).first().click(); // Cancel the scrim await page.getByRole("button", { name: "Cancel" }).click(); await page.getByLabel("Reason").fill("Oops something came up"); await submit(page, "cancel-scrim-submit"); // Go back to the scrims page and check if the scrim is marked as canceled await navigate({ page, url: scrimsPage(), }); await expect(page.getByText("Canceled")).toBeVisible(); }); test("creates scrim with start time and tournament maps, accepts with time and message", async ({ page, }) => { await seed(page, "NO_SCRIMS"); await impersonate(page); await navigate({ page, url: newScrimPostPage(), }); const form = createFormHelpers(page, scrimsNewFormSchema); const tomorrowDate = new Date(); tomorrowDate.setDate(tomorrowDate.getDate() + 1); tomorrowDate.setHours(18, 0, 0, 0); await form.setDateTime("at", tomorrowDate); await form.select("rangeEnd", "+2hours"); await form.select("maps", "TOURNAMENT"); const tournamentSearchInput = page.getByTestId("tournament-search-input"); const tournamentSearchItem = page.getByTestId("tournament-search-item"); await page.getByRole("button", { name: /Tournament search/i }).click(); await tournamentSearchInput.fill("Swim or Sink"); await expect(tournamentSearchItem.first()).toBeVisible(); await tournamentSearchItem.first().click(); await submit(page); // Log in as NZAP user and request the scrim await impersonate(page, NZAP_TEST_ID); await navigate({ page, url: scrimsPage(), }); await page.getByTestId("available-scrims-tab").click(); // Find and click the request button for the scrim we just created await page.getByTestId("request-scrim-button").first().click(); await selectUser({ labelName: "User 2", page, userName: "5", }); await selectUser({ labelName: "User 3", page, userName: "6", }); await selectUser({ labelName: "User 4", page, userName: "7", }); await page.getByLabel("Start time").selectOption({ index: 1 }); await page.getByLabel("Message").fill("Ready to scrim! Let's do this."); await submit(page); // Log back in as the author (admin) and verify the scrim and request details await impersonate(page, ADMIN_ID); await navigate({ page, url: scrimsPage(), }); await expect(page.getByText("+2h")).toBeVisible(); await expect(page.getByTestId("tournament-popover-trigger")).toBeVisible(); await expect( page.getByText("Ready to scrim! Let's do this."), ).toBeVisible(); await page.getByTestId("confirm-modal-trigger-button").click(); await submit(page, "confirm-button"); await page.getByTestId("booked-scrims-tab").click(); await page.getByRole("link", { name: "Contact" }).click(); await page.getByAltText("Generate maplist").click(); // on /maps page await expect(page.getByText("Create map list")).toBeVisible(); }); });