Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
8 changes: 4 additions & 4 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'] },
},

Expand Down Expand Up @@ -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' },
},

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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).
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -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 }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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).
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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');

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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';

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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 }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
6 changes: 3 additions & 3 deletions tests/e2e/z-order.spec.ts → tests/e2e/ui/z-order.spec.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
6 changes: 3 additions & 3 deletions tests/sequences/unified.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
};
Expand Down
Loading