Files
rf4-spotter/apps/web/tests/smoke.spec.ts
T

58 lines
3.0 KiB
TypeScript

import { expect, test } from "@playwright/test";
test("player can open an active spot", async ({ page }) => {
await page.goto("/");
await expect(page.getByRole("heading", { name: "Выбирай место, пока клюёт." })).toBeVisible();
const seedSpot = page.getByTestId("spot-110-103");
await expect(seedSpot.getByRole("heading", { name: "Щука" })).toBeVisible();
await seedSpot.click();
await expect(page.getByRole("heading", { name: "Точка 110:103" })).toBeVisible();
await expect(page.getByRole("heading", { name: "Последние уловы" })).toBeVisible();
});
test("submitted catch appears publicly only after moderation", async ({ page }) => {
const player = `E2E Player ${Date.now()}`;
const x = 1000 + Date.now() % 8000;
const y = x + 1;
const spotTestId = `spot-${x}-${y}`;
await page.goto("/report");
await page.getByLabel("Координата X *").fill(String(x));
await page.getByLabel("Координата Y *").fill(String(y));
await page.getByLabel("Вес, граммы *").fill("6789");
await page.getByLabel("Ник игрока").fill(player);
await page.getByRole("button", { name: "Отправить на проверку" }).click();
await expect(page.getByText("Улов отправлен на модерацию. Спасибо!")).toBeVisible();
await page.goto("/");
await expect(page.getByTestId(spotTestId)).toHaveCount(0);
await page.goto("/admin/moderation");
await page.getByLabel("Административный токен").fill("change-me-in-production");
await page.getByRole("button", { name: "Открыть очередь" }).click();
const report = page.locator(".moderation-card").filter({ hasText: player });
await expect(report).toBeVisible();
await report.getByRole("button", { name: "Одобрить" }).click();
await expect(report).toHaveCount(0);
await page.goto("/");
await expect(page.getByTestId(spotTestId)).toBeVisible();
});
for (const viewport of [{ name: "desktop", width: 1280, height: 900 }, { name: "mobile", width: 390, height: 844 }]) {
test(`home filters work on ${viewport.name}`, async ({ page }) => {
await page.setViewportSize(viewport);
await page.goto("/");
await page.getByLabel("Водоём").selectOption("kuori");
await page.getByLabel("Рыба").selectOption("lake-trout");
await page.getByLabel("Период").selectOption("72");
await page.getByLabel("Сначала").selectOption("freshness");
await page.getByRole("button", { name: "⌕ Найти клёв" }).click();
await expect(page).toHaveURL(/waterbody=kuori.*fish=lake-trout.*hours=72.*sort=freshness/);
await expect(page.getByTestId("spot-85-92")).toBeVisible();
await expect(page.getByTestId("spot-110-103")).toHaveCount(0);
const dimensions = await page.evaluate(() => ({ width: document.documentElement.clientWidth, scroll: document.documentElement.scrollWidth }));
expect(dimensions.scroll).toBeLessThanOrEqual(dimensions.width);
});
}