sendou.ink/e2e/vods.spec.ts
2026-01-03 19:25:38 +02:00

161 lines
3.8 KiB
TypeScript

import type { Page } from "@playwright/test";
import {
expect,
impersonate,
isNotVisible,
navigate,
seed,
selectStage,
selectUser,
selectWeapon,
submit,
test,
} from "~/utils/playwright";
import { newVodPage, VODS_PAGE, vodVideoPage } from "~/utils/urls";
const chooseVideoDate = async (page: Page) => {
await page
.getByRole("spinbutton", { name: "year, Video date *" })
.fill("2024");
await page.getByRole("spinbutton", { name: "month, Video date *" }).fill("5");
await page.getByRole("spinbutton", { name: "day, Video date *" }).fill("15");
};
test.describe("VoDs page", () => {
test("adds video (pov)", async ({ page }) => {
await seed(page);
await impersonate(page);
await navigate({
page,
url: newVodPage(),
});
await page
.getByLabel("YouTube URL")
.fill("https://www.youtube.com/watch?v=o7kWlMZP3lM");
await page
.getByLabel("Video title")
.fill("ITZXI Finals - Team Olive vs. Astral [CAMO TENTA PoV]");
await chooseVideoDate(page);
await page.getByLabel("Type").selectOption("SCRIM");
await selectUser({
labelName: "Player (Pov)",
page,
userName: "Sendou",
});
await page.getByLabel("Start timestamp").fill("0:20");
await page.getByRole("radio", { name: "TC" }).click();
await selectStage({ page, name: "Hammerhead Bridge", nth: 0 });
await selectWeapon({
name: "Zink Mini Splatling",
page,
testId: "match-0-weapon",
});
await page.getByTestId("add-field-button").click();
await page.getByLabel("Start timestamp").last().fill("5:55");
await page.getByRole("radio", { name: "RM" }).last().click();
await selectStage({ page, name: "Museum d'Alfonsino", nth: 1 });
await selectWeapon({
name: "Tenta Brella",
page,
testId: "match-1-weapon",
});
await submit(page);
const now = new Date();
const formattedDate = `${now.getMonth() + 1}/${now.getDate()}/${now.getFullYear()}`;
await page.getByText(formattedDate).isVisible();
await page.getByTestId("weapon-img-4001").isVisible();
await page.getByTestId("weapon-img-6010").isVisible();
});
test("adds video (cast)", async ({ page }) => {
await seed(page);
await impersonate(page);
await navigate({
page,
url: newVodPage(),
});
await page
.getByLabel("YouTube URL")
.fill("https://www.youtube.com/watch?v=QFk1Gf91SwI");
await page
.getByLabel("Video title")
.fill("BIG ! vs Starburst - Splatoon 3 Grand Finals - The Big House 10");
await chooseVideoDate(page);
await page.getByLabel("Type").selectOption("CAST");
await page.keyboard.press("Enter");
await page.getByLabel("Start timestamp").fill("0:25");
await page.getByRole("radio", { name: "CB" }).click();
await selectStage({ page, name: "MakoMart" });
for (let i = 0; i < 8; i++) {
await selectWeapon({
name: i < 4 ? "Luna Blaster" : "Tenta Brella",
page,
testId: `player-${i}-weapon`,
});
}
await submit(page);
for (let i = 0; i < 8; i++) {
await page
.getByTestId(`weapon-img-${i < 4 ? 200 : 6010}-${i}`)
.isVisible();
}
});
test("edits vod", async ({ page }) => {
await seed(page);
await impersonate(page);
await navigate({
page,
url: vodVideoPage(1),
});
await page.getByTestId("edit-vod-button").click();
await selectWeapon({
name: "Luna Blaster",
page,
testId: "match-3-weapon",
});
await submit(page);
await expect(page).toHaveURL(vodVideoPage(1));
await page.getByTestId("weapon-img-200-4").isVisible();
});
test("operates vod filters", async ({ page }) => {
await seed(page);
await impersonate(page);
await navigate({
page,
url: VODS_PAGE,
});
const nzapUserPageLink = page.getByRole("link", { name: "N-ZAP" });
await nzapUserPageLink.isVisible();
await selectWeapon({ page, name: "Carbon Roller" });
await isNotVisible(nzapUserPageLink);
});
});