mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-10-01 15:48:23 -05:00
Move app to apps/web-react in pnpm workspace layout
This commit is contained in:
103
apps/web-react/e2e/params.spec.ts
Normal file
103
apps/web-react/e2e/params.spec.ts
Normal file
@@ -0,0 +1,103 @@
|
||||
import { NZAP_TEST_ID } from "~/db/seed/constants";
|
||||
import { expect, impersonate, navigate, test } from "./helpers/playwright";
|
||||
import { AnalyzerPage } from "./pages/analyzer/analyzer-page";
|
||||
import { WeaponParamsPage } from "./pages/analyzer/weapon-params-page";
|
||||
import { GlobalSearchDialog } from "./pages/search/global-search-dialog";
|
||||
|
||||
test.describe("Weapon parameters", () => {
|
||||
test("table filtering, comparison bar graph and history rows (via Analyzer)", async ({
|
||||
page,
|
||||
}) => {
|
||||
const analyzer = new AnalyzerPage(page);
|
||||
await analyzer.goto();
|
||||
|
||||
await analyzer.selectWeapon("Splattershot");
|
||||
|
||||
const weaponParams = await analyzer.openRawParameters("splattershot");
|
||||
await expect(page).toHaveURL(/\/params\/splattershot/);
|
||||
|
||||
// Filtering: hide a weapon column. Wait for a sibling column to render after the client-side
|
||||
// navigation before counting, otherwise the count can be taken mid-hydration.
|
||||
const { weaponHeaders, showAllWeaponsButton } = weaponParams.locators;
|
||||
await expect(weaponHeaders.nth(1)).toBeVisible();
|
||||
const initialColumnCount = await weaponHeaders.count();
|
||||
expect(initialColumnCount).toBeGreaterThan(1);
|
||||
|
||||
await weaponParams.hideWeapon();
|
||||
|
||||
await expect(showAllWeaponsButton).toBeVisible();
|
||||
await expect(weaponHeaders).toHaveCount(initialColumnCount - 1);
|
||||
await expect(page).toHaveURL(/hidden=\d/);
|
||||
|
||||
// Refresh keeps the hidden selection
|
||||
await page.reload();
|
||||
await expect(page).toHaveURL(/hidden=\d/);
|
||||
await expect(showAllWeaponsButton).toBeVisible();
|
||||
await expect(weaponHeaders).toHaveCount(initialColumnCount - 1);
|
||||
|
||||
// Restore all weapons
|
||||
await weaponParams.showAllWeapons();
|
||||
await expect(showAllWeaponsButton).not.toBeVisible();
|
||||
await expect(weaponHeaders).toHaveCount(initialColumnCount);
|
||||
await expect(page).not.toHaveURL(/hidden=\d/);
|
||||
|
||||
// Comparison bar graph
|
||||
await weaponParams.openParamComparison();
|
||||
await expect(weaponParams.locators.comparisonDialog).toBeVisible();
|
||||
expect(
|
||||
await weaponParams.locators.comparisonBars.count(),
|
||||
).toBeGreaterThanOrEqual(2);
|
||||
await weaponParams.closeParamComparison();
|
||||
await expect(weaponParams.locators.comparisonDialog).not.toBeVisible();
|
||||
|
||||
// Collapsing a history row after expanding it. The patch-count badge is shown while the row
|
||||
// is collapsed and hidden once expanded, so it is a reliable signal for the toggle state.
|
||||
const historyRow = weaponParams.historyRow(0);
|
||||
await expect(historyRow.root).toBeVisible();
|
||||
await expect(historyRow.historyBadge).toBeVisible();
|
||||
|
||||
await historyRow.toggle();
|
||||
await expect(historyRow.historyBadge).not.toBeVisible();
|
||||
|
||||
await historyRow.toggle();
|
||||
await expect(historyRow.historyBadge).toBeVisible();
|
||||
});
|
||||
|
||||
test("patch history tab persists across refresh (via weapon search)", async ({
|
||||
page,
|
||||
}) => {
|
||||
await impersonate(page, NZAP_TEST_ID);
|
||||
await navigate({ page, url: "/" });
|
||||
|
||||
const search = new GlobalSearchDialog(page);
|
||||
await search.open();
|
||||
await search.search("splattershot");
|
||||
await search.selectOption("Splattershot");
|
||||
await search.selectOption("Parameters");
|
||||
await expect(page).toHaveURL(/\/params\/splattershot/);
|
||||
|
||||
const weaponParams = new WeaponParamsPage(page);
|
||||
const { patchHistoryTab, subAndSpecialChangesSwitch } =
|
||||
weaponParams.locators;
|
||||
|
||||
await weaponParams.openPatchHistoryTab();
|
||||
await expect(page).toHaveURL(/tab=patches/);
|
||||
|
||||
// Refresh keeps the selected tab
|
||||
await page.reload();
|
||||
await expect(page).toHaveURL(/tab=patches/);
|
||||
await expect(patchHistoryTab).toHaveAttribute("aria-selected", "true");
|
||||
|
||||
// Either patch columns are shown or the empty state
|
||||
await expect(weaponParams.locators.patchColumns.first()).toBeVisible();
|
||||
|
||||
// Toggle "Show sub & special changes" and verify it persists on refresh
|
||||
await expect(subAndSpecialChangesSwitch).toBeChecked();
|
||||
await weaponParams.toggleSubAndSpecialChanges();
|
||||
await expect(page).toHaveURL(/kitExtras=false/);
|
||||
|
||||
await page.reload();
|
||||
await expect(page).toHaveURL(/kitExtras=false/);
|
||||
await expect(subAndSpecialChangesSwitch).not.toBeChecked();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user