diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ae18c80..8d79392c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -189,7 +189,7 @@ jobs: TEST_URL: http://localhost:3127 CI: true - name: Living-graph effects render (LIVE-*) - run: npx playwright test tests/e2e/living-graph.spec.ts --project="GraphDone-Core/dev-neo4j/chromium" --reporter=line + run: npx playwright test tests/e2e/graph/living-graph-effects.spec.ts --project="GraphDone-Core/dev-neo4j/chromium" --reporter=line env: TEST_URL: http://localhost:3127 CI: true diff --git a/package.json b/package.json index d070c4bb..ac8fbda0 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "test:coverage": "turbo run test:coverage", "test:e2e": "playwright test", "test:e2e:core": "playwright test --grep=\"@core\"", - "test:e2e:visual": "playwright test tests/e2e/visual-regression-suite.spec.ts", + "test:e2e:visual": "playwright test tests/e2e/reports/visual-regression.spec.ts", "test:e2e:ui": "playwright test --ui", "test:e2e:debug": "playwright test --debug", "test:all": "npm run test:unit && npm run test:e2e", @@ -37,7 +37,7 @@ "db:seed": "cd packages/server && npm run db:seed", "docker:dev": "docker compose -f deployment/docker-compose.dev.yml up", "docker:prod": "docker compose -f deployment/docker-compose.yml up", - "test:smoke": "playwright test tests/e2e/user-smoke.spec.ts --reporter=line", + "test:smoke": "playwright test tests/e2e/smoke/user-smoke.spec.ts --reporter=line", "test:mobile": "playwright test --grep \"@mobile|@audit\" --project=\"GraphDone-Core/dev-neo4j/chromium\" --reporter=line", "report:showcase": "playwright test --project=showcase && node tests/generate-showcase-report.mjs", "report:matrix": "playwright test --project=matrix --reporter=line,html && node tests/generate-matrix-report.mjs", diff --git a/playwright.config.ts b/playwright.config.ts index 236434ce..7ace5769 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -38,10 +38,10 @@ export default defineConfig({ projects: [ { name: 'GraphDone-Core/dev-neo4j/chromium', - // The showcase tour and the local-VLM visual eval run in their own - // capture-heavy projects below; keep them out of the default (fast) + // Capture-heavy, report-only specs live under tests/e2e/reports/ and run in + // their own projects below; keep that whole folder out of the default (fast) // project so the smoke gate stays quick. - testIgnore: [/showcase\.spec\.ts/, /visual-vlm\.spec\.ts/, /feature-matrix\.spec\.ts/, /matrix\.setup\.ts/], + testIgnore: '**/reports/**', use: { ...devices['Desktop Chrome'] }, }, @@ -103,7 +103,7 @@ export default defineConfig({ { name: 'vlm', testDir: './tests/e2e', - testMatch: /visual-vlm\.spec\.ts/, + testMatch: /vlm-evaluation\.spec\.ts/, use: { ...devices['Desktop Chrome'], screenshot: 'on' }, }, diff --git a/tests/diagnostics/explorer-tree.spec.ts b/tests/diagnostics/hierarchy/explorer-tree.spec.ts similarity index 96% rename from tests/diagnostics/explorer-tree.spec.ts rename to tests/diagnostics/hierarchy/explorer-tree.spec.ts index afc4fee1..36dad1aa 100644 --- a/tests/diagnostics/explorer-tree.spec.ts +++ b/tests/diagnostics/hierarchy/explorer-tree.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Project-explorer hierarchy: the graph selector expands a parent graph diff --git a/tests/diagnostics/hierarchy-navigation.spec.ts b/tests/diagnostics/hierarchy/navigation.spec.ts similarity index 98% rename from tests/diagnostics/hierarchy-navigation.spec.ts rename to tests/diagnostics/hierarchy/navigation.spec.ts index 986e7167..5b9902c2 100644 --- a/tests/diagnostics/hierarchy-navigation.spec.ts +++ b/tests/diagnostics/hierarchy/navigation.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Altium-style "graphs of graphs" navigation: from the System Overview, a diff --git a/tests/diagnostics/node-inspector.spec.ts b/tests/diagnostics/inspector/node-inspector.spec.ts similarity index 98% rename from tests/diagnostics/node-inspector.spec.ts rename to tests/diagnostics/inspector/node-inspector.spec.ts index 0e3b902f..415ac718 100644 --- a/tests/diagnostics/node-inspector.spec.ts +++ b/tests/diagnostics/inspector/node-inspector.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Docked inspector: selecting a node opens it; Contents renders its description diff --git a/tests/diagnostics/core-interactions.spec.ts b/tests/diagnostics/interactions/core-matrix.spec.ts similarity index 99% rename from tests/diagnostics/core-interactions.spec.ts rename to tests/diagnostics/interactions/core-matrix.spec.ts index 223a5d70..47de5a8a 100644 --- a/tests/diagnostics/core-interactions.spec.ts +++ b/tests/diagnostics/interactions/core-matrix.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * CORE INTERACTION MATRIX — the "basic user checks" every build must pass. diff --git a/tests/diagnostics/interaction-audit.spec.ts b/tests/diagnostics/interactions/relationship-audit.spec.ts similarity index 98% rename from tests/diagnostics/interaction-audit.spec.ts rename to tests/diagnostics/interactions/relationship-audit.spec.ts index 8d061594..8708cd93 100644 --- a/tests/diagnostics/interaction-audit.spec.ts +++ b/tests/diagnostics/interactions/relationship-audit.spec.ts @@ -1,8 +1,8 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; -import { sweepTestData, TEST_GRAPH_PREFIX } from '../lib/dbHealing'; +import { login, TEST_USERS } from '../../lib/auth'; +import { sweepTestData, TEST_GRAPH_PREFIX } from '../../lib/dbHealing'; /** * Basic-interaction audit — walks the everyday graph interactions a user does diff --git a/tests/diagnostics/graph-geometry.spec.ts b/tests/diagnostics/layout/geometry.spec.ts similarity index 99% rename from tests/diagnostics/graph-geometry.spec.ts rename to tests/diagnostics/layout/geometry.spec.ts index f4f9af68..992fc554 100644 --- a/tests/diagnostics/graph-geometry.spec.ts +++ b/tests/diagnostics/layout/geometry.spec.ts @@ -1,8 +1,8 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; -import { sweepTestData, TEST_GRAPH_PREFIX } from '../lib/dbHealing'; +import { login, TEST_USERS } from '../../lib/auth'; +import { sweepTestData, TEST_GRAPH_PREFIX } from '../../lib/dbHealing'; /** * Graph-geometry diagnostic — measures node/edge/label geometry from the REAL diff --git a/tests/diagnostics/graph-balance.spec.ts b/tests/diagnostics/layout/graph-balance.spec.ts similarity index 98% rename from tests/diagnostics/graph-balance.spec.ts rename to tests/diagnostics/layout/graph-balance.spec.ts index 30d01532..880a2201 100644 --- a/tests/diagnostics/graph-balance.spec.ts +++ b/tests/diagnostics/layout/graph-balance.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; import { execFileSync } from 'node:child_process'; import { mkdirSync } from 'node:fs'; import * as path from 'node:path'; diff --git a/tests/diagnostics/large-graph-profile.spec.ts b/tests/diagnostics/perf/large-graph-profile.spec.ts similarity index 99% rename from tests/diagnostics/large-graph-profile.spec.ts rename to tests/diagnostics/perf/large-graph-profile.spec.ts index fde3f8e4..5373548e 100644 --- a/tests/diagnostics/large-graph-profile.spec.ts +++ b/tests/diagnostics/perf/large-graph-profile.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * BASELINE profiler for the Compute Core (1000-node) example graph the user diff --git a/tests/diagnostics/physics-settle.spec.ts b/tests/diagnostics/physics/settle.spec.ts similarity index 98% rename from tests/diagnostics/physics-settle.spec.ts rename to tests/diagnostics/physics/settle.spec.ts index b99f1356..6f76f2b2 100644 --- a/tests/diagnostics/physics-settle.spec.ts +++ b/tests/diagnostics/physics/settle.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Physics-lifecycle diagnostic — proves the one-shot model: a graph settles, diff --git a/tests/diagnostics/captcha-layout.spec.ts b/tests/diagnostics/ui/captcha-layout.spec.ts similarity index 100% rename from tests/diagnostics/captcha-layout.spec.ts rename to tests/diagnostics/ui/captcha-layout.spec.ts diff --git a/tests/diagnostics/node-expand-legibility.spec.ts b/tests/diagnostics/ui/legibility-floor.spec.ts similarity index 99% rename from tests/diagnostics/node-expand-legibility.spec.ts rename to tests/diagnostics/ui/legibility-floor.spec.ts index ed5d911a..dfdb4816 100644 --- a/tests/diagnostics/node-expand-legibility.spec.ts +++ b/tests/diagnostics/ui/legibility-floor.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * PR-3 (expand-in-place) + PR-4 (zoom-decoupled legibility floor). diff --git a/tests/diagnostics/minimap-zoom.spec.ts b/tests/diagnostics/ui/minimap-zoom.spec.ts similarity index 97% rename from tests/diagnostics/minimap-zoom.spec.ts rename to tests/diagnostics/ui/minimap-zoom.spec.ts index 11beacfd..cf9ca260 100644 --- a/tests/diagnostics/minimap-zoom.spec.ts +++ b/tests/diagnostics/ui/minimap-zoom.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Minimap wheel/pinch zoom: a wheel over the minimap zooms the MAIN view diff --git a/tests/diagnostics/insecure-connection-banner.spec.ts b/tests/diagnostics/ui/tls-banner.spec.ts similarity index 98% rename from tests/diagnostics/insecure-connection-banner.spec.ts rename to tests/diagnostics/ui/tls-banner.spec.ts index a4d0cade..31581fbb 100644 --- a/tests/diagnostics/insecure-connection-banner.spec.ts +++ b/tests/diagnostics/ui/tls-banner.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * The insecure-connection (HTTP) warning must integrate cleanly: a slim strip diff --git a/tests/e2e/a11y-focus.spec.ts b/tests/e2e/a11y/modal-focus.spec.ts similarity index 98% rename from tests/e2e/a11y-focus.spec.ts rename to tests/e2e/a11y/modal-focus.spec.ts index 3980f95f..d9bf2484 100644 --- a/tests/e2e/a11y-focus.spec.ts +++ b/tests/e2e/a11y/modal-focus.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * Modal accessibility / keyboard-focus gate (@a11y). Asserts the contract added diff --git a/tests/e2e/admin-database-tab.spec.ts b/tests/e2e/admin/database-tab.spec.ts similarity index 98% rename from tests/e2e/admin-database-tab.spec.ts rename to tests/e2e/admin/database-tab.spec.ts index 10186c99..18ee76a2 100644 --- a/tests/e2e/admin-database-tab.spec.ts +++ b/tests/e2e/admin/database-tab.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; test.describe('Admin Database Tab', () => { test.beforeEach(async ({ page }) => { diff --git a/tests/e2e/oauth-provider-config.spec.ts b/tests/e2e/admin/oauth-provider-config.spec.ts similarity index 98% rename from tests/e2e/oauth-provider-config.spec.ts rename to tests/e2e/admin/oauth-provider-config.spec.ts index 648a6742..0e6f4961 100644 --- a/tests/e2e/oauth-provider-config.spec.ts +++ b/tests/e2e/admin/oauth-provider-config.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; test.describe('OAuth Provider Configuration (Admin Panel)', () => { test.beforeEach(async ({ page }) => { diff --git a/tests/e2e/api-health.spec.ts b/tests/e2e/api/health.spec.ts similarity index 97% rename from tests/e2e/api-health.spec.ts rename to tests/e2e/api/health.spec.ts index 4abea61e..87bbd5d6 100644 --- a/tests/e2e/api-health.spec.ts +++ b/tests/e2e/api/health.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { HEALTH_URL, gqlRequest, apiLogin } from '../lib/api'; +import { HEALTH_URL, gqlRequest, apiLogin } from '../../lib/api'; // API health checks, deployment-agnostic: every URL derives from TEST_URL // (nginx route layout in production, Vite proxy in dev) and data queries diff --git a/tests/e2e/form-validation.spec.ts b/tests/e2e/auth/form-validation.spec.ts similarity index 99% rename from tests/e2e/form-validation.spec.ts rename to tests/e2e/auth/form-validation.spec.ts index 7abbed1e..12883d28 100644 --- a/tests/e2e/form-validation.spec.ts +++ b/tests/e2e/auth/form-validation.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * Form-validation gate (@validation). Exercises the client-side validation diff --git a/tests/e2e/login-focus.spec.ts b/tests/e2e/auth/passwordless-focus.spec.ts similarity index 97% rename from tests/e2e/login-focus.spec.ts rename to tests/e2e/auth/passwordless-focus.spec.ts index 8fd1154e..fee99ba2 100644 --- a/tests/e2e/login-focus.spec.ts +++ b/tests/e2e/auth/passwordless-focus.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { getBaseURL } from '../lib/auth'; +import { getBaseURL } from '../../lib/auth'; /** * Passwordless sign-in focus order (@loginfocus). When the user switches to the diff --git a/tests/e2e/signup-fit.spec.ts b/tests/e2e/auth/responsive-layout.spec.ts similarity index 98% rename from tests/e2e/signup-fit.spec.ts rename to tests/e2e/auth/responsive-layout.spec.ts index 03815498..ee6d58e3 100644 --- a/tests/e2e/signup-fit.spec.ts +++ b/tests/e2e/auth/responsive-layout.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { getBaseURL } from '../lib/auth'; +import { getBaseURL } from '../../lib/auth'; /** * Responsive "fit the window" religion (@signup-fit): on a large screen the diff --git a/tests/e2e/camera.spec.ts b/tests/e2e/graph/camera.spec.ts similarity index 99% rename from tests/e2e/camera.spec.ts rename to tests/e2e/graph/camera.spec.ts index 64236514..2f5eb85f 100644 --- a/tests/e2e/camera.spec.ts +++ b/tests/e2e/graph/camera.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * Camera framing + persistence (@camera). diff --git a/tests/e2e/living-graph.spec.ts b/tests/e2e/graph/living-graph-effects.spec.ts similarity index 99% rename from tests/e2e/living-graph.spec.ts rename to tests/e2e/graph/living-graph-effects.spec.ts index fcf5486f..0ca0478d 100644 --- a/tests/e2e/living-graph.spec.ts +++ b/tests/e2e/graph/living-graph-effects.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * The living graph is the product's differentiator (breathing, glow, energy diff --git a/tests/e2e/copy-id.spec.ts b/tests/e2e/graph/node-inspector-copyid.spec.ts similarity index 95% rename from tests/e2e/copy-id.spec.ts rename to tests/e2e/graph/node-inspector-copyid.spec.ts index 1bd8d9a8..d935704a 100644 --- a/tests/e2e/copy-id.spec.ts +++ b/tests/e2e/graph/node-inspector-copyid.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * Click-to-copy node id (@copyid, #23): the node inspector shows a short id chip; diff --git a/tests/e2e/node-quick-edit.spec.ts b/tests/e2e/graph/node-quick-edit.spec.ts similarity index 98% rename from tests/e2e/node-quick-edit.spec.ts rename to tests/e2e/graph/node-quick-edit.spec.ts index f5b0f405..c54f393d 100644 --- a/tests/e2e/node-quick-edit.spec.ts +++ b/tests/e2e/graph/node-quick-edit.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * In-context node quick-edit (@quickedit, #87): double-clicking a node opens a diff --git a/tests/e2e/relationship-flip.spec.ts b/tests/e2e/graph/relationship-flip.spec.ts similarity index 99% rename from tests/e2e/relationship-flip.spec.ts rename to tests/e2e/graph/relationship-flip.spec.ts index f28123d9..30d129e6 100644 --- a/tests/e2e/relationship-flip.spec.ts +++ b/tests/e2e/graph/relationship-flip.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, navigateToWorkspace } from '../lib/auth'; +import { login, TEST_USERS, navigateToWorkspace } from '../../lib/auth'; test.describe('Relationship Flip Functionality', () => { test.beforeEach(async ({ page }) => { diff --git a/tests/e2e/mobile-audit.spec.ts b/tests/e2e/mobile/accessibility-audit.spec.ts similarity index 95% rename from tests/e2e/mobile-audit.spec.ts rename to tests/e2e/mobile/accessibility-audit.spec.ts index c879dcfb..db2ff3c1 100644 --- a/tests/e2e/mobile-audit.spec.ts +++ b/tests/e2e/mobile/accessibility-audit.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; -import { auditLayout, auditContrast } from '../lib/mobileAudit'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; +import { auditLayout, auditContrast } from '../../lib/mobileAudit'; /** * Automated mobile sweep — runs the layout + contrast auditors against EVERY diff --git a/tests/e2e/mobile-dialogs.spec.ts b/tests/e2e/mobile/dialog-positioning.spec.ts similarity index 94% rename from tests/e2e/mobile-dialogs.spec.ts rename to tests/e2e/mobile/dialog-positioning.spec.ts index 38ee38f7..4c3fd968 100644 --- a/tests/e2e/mobile-dialogs.spec.ts +++ b/tests/e2e/mobile/dialog-positioning.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; -import { auditDialog } from '../lib/mobileAudit'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; +import { auditDialog } from '../../lib/mobileAudit'; /** * Automated dialog sweep — opens the modals a phone user actually hits and diff --git a/tests/e2e/mobile-experience.spec.ts b/tests/e2e/mobile/experience.spec.ts similarity index 98% rename from tests/e2e/mobile-experience.spec.ts rename to tests/e2e/mobile/experience.spec.ts index ac8b6a25..47bf27fd 100644 --- a/tests/e2e/mobile-experience.spec.ts +++ b/tests/e2e/mobile/experience.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Mobile experience contract. A phone-sized screen should land on a readable diff --git a/tests/e2e/mobile-views.spec.ts b/tests/e2e/mobile/view-navigation.spec.ts similarity index 98% rename from tests/e2e/mobile-views.spec.ts rename to tests/e2e/mobile/view-navigation.spec.ts index 0b6092b9..ee6eaa09 100644 --- a/tests/e2e/mobile-views.spec.ts +++ b/tests/e2e/mobile/view-navigation.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * Mobile usability of the non-graph views. On a phone a user should be able to diff --git a/tests/e2e/VISUAL_REGRESSION_README.md b/tests/e2e/reports/VISUAL_REGRESSION_README.md similarity index 100% rename from tests/e2e/VISUAL_REGRESSION_README.md rename to tests/e2e/reports/VISUAL_REGRESSION_README.md diff --git a/tests/e2e/feature-matrix.spec.ts b/tests/e2e/reports/feature-matrix.spec.ts similarity index 98% rename from tests/e2e/feature-matrix.spec.ts rename to tests/e2e/reports/feature-matrix.spec.ts index db0d7307..f60a1dec 100644 --- a/tests/e2e/feature-matrix.spec.ts +++ b/tests/e2e/reports/feature-matrix.spec.ts @@ -1,8 +1,8 @@ import { test, expect, Page, TestInfo } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { getBaseURL } from '../lib/auth'; -import { auditLayout, auditContrast } from '../lib/mobileAudit'; +import { getBaseURL } from '../../lib/auth'; +import { auditLayout, auditContrast } from '../../lib/mobileAudit'; const SHOT_ROOT = path.resolve(process.cwd(), 'test-artifacts/matrix'); diff --git a/tests/e2e/matrix.setup.ts b/tests/e2e/reports/matrix.setup.ts similarity index 90% rename from tests/e2e/matrix.setup.ts rename to tests/e2e/reports/matrix.setup.ts index a1137a33..79ae97bc 100644 --- a/tests/e2e/matrix.setup.ts +++ b/tests/e2e/reports/matrix.setup.ts @@ -1,5 +1,5 @@ import { test as setup } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; // One real login for the whole matrix run; every feature-matrix test reuses this // storage state so the ~100-cell resolution×feature sweep doesn't re-login each diff --git a/tests/e2e/showcase.spec.ts b/tests/e2e/reports/showcase.spec.ts similarity index 99% rename from tests/e2e/showcase.spec.ts rename to tests/e2e/reports/showcase.spec.ts index 5fddbf16..87d5a4f1 100644 --- a/tests/e2e/showcase.spec.ts +++ b/tests/e2e/reports/showcase.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; import * as fs from 'fs'; import * as path from 'path'; diff --git a/tests/e2e/visual-regression-suite.spec.ts b/tests/e2e/reports/visual-regression.spec.ts similarity index 100% rename from tests/e2e/visual-regression-suite.spec.ts rename to tests/e2e/reports/visual-regression.spec.ts diff --git a/tests/e2e/visual-vlm.spec.ts b/tests/e2e/reports/vlm-evaluation.spec.ts similarity index 96% rename from tests/e2e/visual-vlm.spec.ts rename to tests/e2e/reports/vlm-evaluation.spec.ts index b35e379e..d9112178 100644 --- a/tests/e2e/visual-vlm.spec.ts +++ b/tests/e2e/reports/vlm-evaluation.spec.ts @@ -1,11 +1,11 @@ import { test, expect, Page } from '@playwright/test'; import * as fs from 'fs'; import * as path from 'path'; -import { login, TEST_USERS } from '../lib/auth'; -import { seedLargeGraph, deleteGraphDeep } from '../lib/seedGraph'; -import { sweepTestData, TEST_GRAPH_PREFIX } from '../lib/dbHealing'; -import '../lib/testEnv'; -import { isVlmAvailable, evaluateBatch, PERSONAS, personaByKey } from '../lib/vlm'; +import { login, TEST_USERS } from '../../lib/auth'; +import { seedLargeGraph, deleteGraphDeep } from '../../lib/seedGraph'; +import { sweepTestData, TEST_GRAPH_PREFIX } from '../../lib/dbHealing'; +import '../../lib/testEnv'; +import { isVlmAvailable, evaluateBatch, PERSONAS, personaByKey } from '../../lib/vlm'; /** * Local-VLM visual evaluation. Captures key user-facing states, then asks a diff --git a/tests/e2e/responsive.spec.ts b/tests/e2e/responsive/viewports.spec.ts similarity index 97% rename from tests/e2e/responsive.spec.ts rename to tests/e2e/responsive/viewports.spec.ts index 5508b05d..2d6f2779 100644 --- a/tests/e2e/responsive.spec.ts +++ b/tests/e2e/responsive/viewports.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; // RESP-5 (docs/USER_STORIES.md): the core flow must work on phone, tablet and // desktop viewports, with no horizontal scroll and visible primary navigation. diff --git a/tests/e2e/basic-workflow.spec.ts b/tests/e2e/smoke/basic-workflow.spec.ts similarity index 99% rename from tests/e2e/basic-workflow.spec.ts rename to tests/e2e/smoke/basic-workflow.spec.ts index 95a79daf..0a4f84f9 100644 --- a/tests/e2e/basic-workflow.spec.ts +++ b/tests/e2e/smoke/basic-workflow.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; test.describe('Basic User Workflow', () => { test('should complete full user journey: login → select/create graph → create node → verify node appears without refresh', async ({ page }) => { diff --git a/tests/e2e/user-smoke.spec.ts b/tests/e2e/smoke/user-smoke.spec.ts similarity index 99% rename from tests/e2e/user-smoke.spec.ts rename to tests/e2e/smoke/user-smoke.spec.ts index 9919e283..bcd7342e 100644 --- a/tests/e2e/user-smoke.spec.ts +++ b/tests/e2e/smoke/user-smoke.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { login, TEST_USERS } from '../lib/auth'; +import { login, TEST_USERS } from '../../lib/auth'; /** * THE GATE. This spec sees the app exactly as a user does — if it fails, diff --git a/tests/e2e/overlay-dismissal.spec.ts b/tests/e2e/ui/overlay-dismissal.spec.ts similarity index 99% rename from tests/e2e/overlay-dismissal.spec.ts rename to tests/e2e/ui/overlay-dismissal.spec.ts index 648c2b7b..a4a8132f 100644 --- a/tests/e2e/overlay-dismissal.spec.ts +++ b/tests/e2e/ui/overlay-dismissal.spec.ts @@ -1,5 +1,5 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; /** * Overlay dismissal gate (@dismissal). Verifies the dialog-manager "friction diff --git a/tests/e2e/z-order.spec.ts b/tests/e2e/ui/z-order.spec.ts similarity index 98% rename from tests/e2e/z-order.spec.ts rename to tests/e2e/ui/z-order.spec.ts index 661bcddc..da32d909 100644 --- a/tests/e2e/z-order.spec.ts +++ b/tests/e2e/ui/z-order.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test'; -import { login, TEST_USERS, getBaseURL } from '../lib/auth'; -import { auditOnTop } from '../lib/zorder'; -import { auditDialog } from '../lib/mobileAudit'; +import { login, TEST_USERS, getBaseURL } from '../../lib/auth'; +import { auditOnTop } from '../../lib/zorder'; +import { auditDialog } from '../../lib/mobileAudit'; /** * Z-order / stacking gate. Opens every floating overlay in the app (dropdowns, diff --git a/tests/e2e/installation-validation.spec.ts b/tests/integration/installation-validation.spec.ts similarity index 100% rename from tests/e2e/installation-validation.spec.ts rename to tests/integration/installation-validation.spec.ts diff --git a/tests/e2e/tls-integration.spec.ts b/tests/integration/tls-integration.spec.ts similarity index 100% rename from tests/e2e/tls-integration.spec.ts rename to tests/integration/tls-integration.spec.ts diff --git a/tests/sequences/unified.config.mjs b/tests/sequences/unified.config.mjs index 56105de5..589971d8 100644 --- a/tests/sequences/unified.config.mjs +++ b/tests/sequences/unified.config.mjs @@ -14,9 +14,9 @@ const PW = 'GraphDone-Core/dev-neo4j/chromium'; export const SEQUENCES = { 'unit-web': { adapter: 'vitest', title: 'Web unit tests', cwd: 'packages/web', blocking: true }, - 'smoke': { adapter: 'playwright', title: 'Smoke gate (THE GATE)', args: ['tests/e2e/user-smoke.spec.ts', `--project=${PW}`], blocking: true }, - 'e2e-auth': { adapter: 'playwright', title: 'Auth e2e — passwordless focus', args: ['tests/e2e/login-focus.spec.ts', `--project=${PW}`], blocking: true }, - 'e2e-graph': { adapter: 'playwright', title: 'Graph e2e — camera', args: ['tests/e2e/camera.spec.ts', `--project=${PW}`], blocking: true }, + 'smoke': { adapter: 'playwright', title: 'Smoke gate (THE GATE)', args: ['tests/e2e/smoke/user-smoke.spec.ts', `--project=${PW}`], blocking: true }, + 'e2e-auth': { adapter: 'playwright', title: 'Auth e2e — passwordless focus', args: ['tests/e2e/auth/passwordless-focus.spec.ts', `--project=${PW}`], blocking: true }, + 'e2e-graph': { adapter: 'playwright', title: 'Graph e2e — camera', args: ['tests/e2e/graph/camera.spec.ts', `--project=${PW}`], blocking: true }, 'mobile': { adapter: 'playwright', title: 'Mobile audit', args: ['--grep', '@mobile|@audit', `--project=${PW}`], blocking: false }, 'showcase': { adapter: 'playwright', title: 'Showcase — video + screenshots', args: ['--project=showcase'], blocking: false }, };