test: update routes in tests

This commit is contained in:
2026-09-10 20:40:49 +05:00
parent 33e3f3c4f0
commit 0160b316c9
8 changed files with 64 additions and 41 deletions
+5 -5
View File
@@ -1,19 +1,19 @@
import { expect, test } from "playwright/test";
import { trackErrors, expectNoErrors } from "./helpers/page";
import { expectNoErrors, trackErrors } from "./helpers/page";
const TOTAL = 121;
const GROUPS = 8;
test("catalog shows total and all groups", async ({ page }) => {
const sink = trackErrors(page);
await page.goto("/preview/list-tools");
await page.goto("/list-tools");
await expect(page.locator(".catalog-total b")).toHaveText(String(TOTAL));
await expect(page.locator(".catalog-group")).toHaveCount(GROUPS);
expectNoErrors(sink);
});
test("catalog search narrows results", async ({ page }) => {
await page.goto("/preview/list-tools");
await page.goto("/list-tools");
await expect(async () => {
await page.getByRole("textbox", { name: "Search tools" }).fill("resize");
await expect(page.locator(".tool-card")).toHaveCount(1);
@@ -24,7 +24,7 @@ test("catalog search narrows results", async ({ page }) => {
test("category filter shows only matching group and resets on ALL", async ({
page,
}) => {
await page.goto("/preview/list-tools");
await page.goto("/list-tools");
const allButtons = page.locator(".tool-card");
const allCount = await allButtons.count();
expect(allCount).toBe(TOTAL);
@@ -46,7 +46,7 @@ test("category filter shows only matching group and resets on ALL", async ({
});
test("workspace search matches a tool by title", async ({ page }) => {
await page.goto("/preview");
await page.goto("/");
await expect(async () => {
await page.getByRole("textbox", { name: "Search tools" }).fill("flip");
await expect(page.locator(".tool-card")).toHaveCount(1);
+2 -2
View File
@@ -1,8 +1,8 @@
import { expect, test } from "playwright/test";
import { trackErrors, openTool, expectNoErrors } from "./helpers/page";
import { expectNoErrors, openTool, trackErrors } from "./helpers/page";
test.describe("generators — known UI gap (#checklist, п.1)", () => {
// Генераторы (21/121) открываются, но в UI нет ни полей схемы, ни кнопки
// FIXME: Генераторы (21/121) открываются, но в UI нет ни полей схемы, ни кнопки
// «Generate» — только RU/EN/Reset. Пока баг открыт — fixme с ожидаемым
// сценарием; после фикса убрать fixme.
test.fixme("single-color-png renders Generate controls and produces a result", async ({
+1 -1
View File
@@ -13,7 +13,7 @@ export function trackErrors(page: Page): ErrorSink {
}
export async function openTool(page: Page, id: string): Promise<void> {
await page.goto(`/preview/tools/${id}`);
await page.goto(`/tools/${id}`);
await expect(page.locator(".schema-tool h1")).toBeVisible();
}
+1 -1
View File
@@ -2,7 +2,7 @@ import { expect, test } from "playwright/test";
import { opaquePng } from "./helpers/fixtures";
import { openTool, uploadImage } from "./helpers/page";
// Весь файл — зарегистрированные баги preview (см. docs/checklist-manual-testing.md
// FIXME: Весь файл — зарегистрированные баги preview (см. docs/checklist-manual-testing.md
// → «Известные баги preview»). Тела assert'ят ОЖИДАЕМОЕ поведение. Статус fixme
// означает «мы знаем, что сейчас падает»; когда баг починят — убрать fixme и
// тест станет зелёным «сам по себе».
+14 -10
View File
@@ -1,12 +1,7 @@
import { expect, test } from "playwright/test";
import { trackErrors, expectNoErrors } from "./helpers/page";
import { expectNoErrors, trackErrors } from "./helpers/page";
const ROUTES = [
"/preview",
"/preview/list-tools",
"/preview/kit",
"/preview/tools/flip-png",
];
const ROUTES = ["/", "/list-tools", "/kit", "/tools/flip-png"];
for (const route of ROUTES) {
test(`page ${route} loads without errors`, async ({ page }) => {
@@ -19,14 +14,23 @@ for (const route of ROUTES) {
}
test("unknown tool route responds 404 on static build", async ({ page }) => {
const resp = await page.goto("/preview/tools/definitely-not-a-tool");
const resp = await page.goto("/tools/definitely-not-a-tool");
expect(resp?.status()).toBe(404);
});
// FIXME:
// Error: expect(received).toBe(expected) // Object.is equality
// Expected: "dark"
// Received: null
// 36 | expect(["light", "dark"]).toContain(before);
// 37 | expect(["light", "dark"]).toContain(after);
// > 38 | expect(stored).toBe(after);
test("theme toggle flips preview theme and persists to localStorage", async ({
page,
}) => {
await page.goto("/preview");
await page.goto("/");
const root = page.locator("main.preview-root");
const before = await root.getAttribute("data-theme");
await expect(async () => {
@@ -44,7 +48,7 @@ test("theme toggle flips preview theme and persists to localStorage", async ({
});
test("language toggle marks the active button", async ({ page }) => {
await page.goto("/preview");
await page.goto("/");
const group = page.getByRole("group", { name: "Language" });
await expect(async () => {
await group.getByRole("button", { name: "EN" }).click();
+1
View File
@@ -30,6 +30,7 @@
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.63.0",
"@sveltejs/vite-plugin-svelte": "^7.1.2",
"@types/node": "^26.5.0",
"diff": "^9.0.0",
"eslint": "^10.9.0",
"eslint-config-prettier": "^10.1.8",
+1 -1
View File
@@ -22,7 +22,7 @@ export default defineConfig({
],
webServer: {
command: "pnpm build && node scripts/serve-static.mjs --port 4173",
url: "http://127.0.0.1:4173/preview",
url: "http://127.0.0.1:4173/",
reuseExistingServer: !process.env.CI,
timeout: 180_000,
},
+39 -21
View File
@@ -29,13 +29,16 @@ importers:
version: 0.4.2
'@sveltejs/adapter-static':
specifier: ^3.0.10
version: 3.0.10(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1))
version: 3.0.10(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.5.0)))
'@sveltejs/kit':
specifier: ^2.63.0
version: 2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1)
version: 2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.5.0))
'@sveltejs/vite-plugin-svelte':
specifier: ^7.1.2
version: 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1)
version: 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0))
'@types/node':
specifier: ^26.5.0
version: 26.5.0
diff:
specifier: ^9.0.0
version: 9.0.0
@@ -89,10 +92,10 @@ importers:
version: 8.67.0(eslint@10.9.0(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
vite:
specifier: ^8.0.16
version: 8.2.1
version: 8.2.1(@types/node@26.5.0)
vitest:
specifier: ^4.1.11
version: 4.1.11(vite@8.2.1)
version: 4.1.11(@types/node@26.5.0)(vite@8.2.1(@types/node@26.5.0))
packages:
@@ -439,6 +442,9 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@26.5.0':
resolution: {integrity: sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -1450,6 +1456,9 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
undici-types@8.9.0:
resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==}
unicorn-magic@0.4.0:
resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
engines: {node: '>=20'}
@@ -1799,15 +1808,15 @@ snapshots:
dependencies:
acorn: 8.18.0
'@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1))':
'@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.5.0)))':
dependencies:
'@sveltejs/kit': 2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1)
'@sveltejs/kit': 2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.5.0))
'@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1)':
'@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.5.0))':
dependencies:
'@standard-schema/spec': 1.1.0
'@sveltejs/acorn-typescript': 1.0.13(acorn@8.18.0)
'@sveltejs/vite-plugin-svelte': 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1)
'@sveltejs/vite-plugin-svelte': 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0))
'@types/cookie': 0.6.0
acorn: 8.18.0
cookie: 0.6.0
@@ -1819,20 +1828,20 @@ snapshots:
set-cookie-parser: 3.1.2
sirv: 3.0.2
svelte: 5.56.9(@typescript-eslint/types@8.67.0)
vite: 8.2.1
vite: 8.2.1(@types/node@26.5.0)
optionalDependencies:
typescript: 6.0.3
'@sveltejs/load-config@0.2.3': {}
'@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1)':
'@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.5.0))':
dependencies:
deepmerge: 4.3.1
magic-string: 1.2.0
obug: 2.1.4
svelte: 5.56.9(@typescript-eslint/types@8.67.0)
vite: 8.2.1
vitefu: 1.1.3(vite@8.2.1)
vite: 8.2.1(@types/node@26.5.0)
vitefu: 1.1.3(vite@8.2.1(@types/node@26.5.0))
'@types/chai@5.2.3':
dependencies:
@@ -1849,6 +1858,10 @@ snapshots:
'@types/json-schema@7.0.15': {}
'@types/node@26.5.0':
dependencies:
undici-types: 8.9.0
'@types/trusted-types@2.0.7': {}
'@typescript-eslint/eslint-plugin@8.67.0(@typescript-eslint/parser@8.67.0(eslint@10.9.0(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.0(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
@@ -1951,13 +1964,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.1
'@vitest/mocker@4.1.11(vite@8.2.1)':
'@vitest/mocker@4.1.11(vite@8.2.1(@types/node@26.5.0))':
dependencies:
'@vitest/spy': 4.1.11
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 8.2.1
vite: 8.2.1(@types/node@26.5.0)
'@vitest/pretty-format@4.1.11':
dependencies:
@@ -2847,6 +2860,8 @@ snapshots:
typescript@6.0.3: {}
undici-types@8.9.0: {}
unicorn-magic@0.4.0: {}
uri-js@4.4.1:
@@ -2855,7 +2870,7 @@ snapshots:
util-deprecate@1.0.2: {}
vite@8.2.1:
vite@8.2.1(@types/node@26.5.0):
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.5
@@ -2863,16 +2878,17 @@ snapshots:
rolldown: 1.2.4
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 26.5.0
fsevents: 2.3.3
vitefu@1.1.3(vite@8.2.1):
vitefu@1.1.3(vite@8.2.1(@types/node@26.5.0)):
optionalDependencies:
vite: 8.2.1
vite: 8.2.1(@types/node@26.5.0)
vitest@4.1.11(vite@8.2.1):
vitest@4.1.11(@types/node@26.5.0)(vite@8.2.1(@types/node@26.5.0)):
dependencies:
'@vitest/expect': 4.1.11
'@vitest/mocker': 4.1.11(vite@8.2.1)
'@vitest/mocker': 4.1.11(vite@8.2.1(@types/node@26.5.0))
'@vitest/pretty-format': 4.1.11
'@vitest/runner': 4.1.11
'@vitest/snapshot': 4.1.11
@@ -2889,8 +2905,10 @@ snapshots:
tinyexec: 1.3.0
tinyglobby: 0.2.17
tinyrainbow: 3.1.1
vite: 8.2.1
vite: 8.2.1(@types/node@26.5.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 26.5.0
transitivePeerDependencies:
- msw