From 0160b316c90ff367e3d7ef33fc7d32bc35d497bb Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Thu, 10 Sep 2026 20:40:49 +0500 Subject: [PATCH] test: update routes in tests --- web/e2e/catalog.spec.ts | 10 +++--- web/e2e/generators.spec.ts | 4 +-- web/e2e/helpers/page.ts | 2 +- web/e2e/known-issues.spec.ts | 2 +- web/e2e/navigation.spec.ts | 24 +++++++++------ web/package.json | 1 + web/playwright.config.ts | 2 +- web/pnpm-lock.yaml | 60 +++++++++++++++++++++++------------- 8 files changed, 64 insertions(+), 41 deletions(-) diff --git a/web/e2e/catalog.spec.ts b/web/e2e/catalog.spec.ts index 792482d..43f21fb 100644 --- a/web/e2e/catalog.spec.ts +++ b/web/e2e/catalog.spec.ts @@ -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); diff --git a/web/e2e/generators.spec.ts b/web/e2e/generators.spec.ts index 581cd4f..f17b791 100644 --- a/web/e2e/generators.spec.ts +++ b/web/e2e/generators.spec.ts @@ -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 ({ diff --git a/web/e2e/helpers/page.ts b/web/e2e/helpers/page.ts index 22e4d32..d6221b1 100644 --- a/web/e2e/helpers/page.ts +++ b/web/e2e/helpers/page.ts @@ -13,7 +13,7 @@ export function trackErrors(page: Page): ErrorSink { } export async function openTool(page: Page, id: string): Promise { - await page.goto(`/preview/tools/${id}`); + await page.goto(`/tools/${id}`); await expect(page.locator(".schema-tool h1")).toBeVisible(); } diff --git a/web/e2e/known-issues.spec.ts b/web/e2e/known-issues.spec.ts index 6be7138..591f6a6 100644 --- a/web/e2e/known-issues.spec.ts +++ b/web/e2e/known-issues.spec.ts @@ -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 и // тест станет зелёным «сам по себе». diff --git a/web/e2e/navigation.spec.ts b/web/e2e/navigation.spec.ts index 61aa80b..63808bb 100644 --- a/web/e2e/navigation.spec.ts +++ b/web/e2e/navigation.spec.ts @@ -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(); diff --git a/web/package.json b/web/package.json index a6ce3fa..0aa6016 100644 --- a/web/package.json +++ b/web/package.json @@ -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", diff --git a/web/playwright.config.ts b/web/playwright.config.ts index af24e8a..f0236b7 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -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, }, diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 43bd4c4..e6c4c4f 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -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