[AZ-456] Test infrastructure: Vitest + MSW + Playwright + scripts

Scaffolds the Blackbox test project per AZ-456 / environment.md across
the three profiles:

- fast  : Vitest 3.x + jsdom + MSW 2.x + RTL/jest-dom; tests/setup.ts
          boots the MSW Node server with onUnhandledRequest:'error',
          afterEach resets handlers, clears bearer + navigate-to-login
          spy. Default handlers ship for every suite service plus OWM
          and tile stand-ins. Fixtures mirror seed_* in test-data.md.
- e2e   : Playwright ^1.49 with chromium + firefox projects against the
          suite docker-compose stack; owm-stub + tile-stub Bun servers,
          playwright-runner image, seeds.sql for the test-db.
- static: scripts/run-tests.sh extended — tsc --noEmit (test config),
          vite build, ripgrep checks (with grep -r fallback), CSV
          report at test-output/static-report.csv per AC-7 columns.

Smoke tests cover AC-3, AC-4 (fast, 5 tests, PASS) and AC-1, AC-2,
AC-5, AC-8 (e2e, gated by Risk 4 docker availability). Static profile
(13 checks) PASS — STC-SEC1 (no literal OWM key) lifted from
QUARANTINE per AZ-447 with a narrowed pattern.

Files:
  +24 tests/**, +10 e2e/**, +vitest.config.ts, +tsconfig.test.json
  ~package.json (test scripts + devDeps for vitest, @testing-library/*,
   msw, @playwright/test, jsdom, @types/node, @vitest/coverage-v8)
  ~scripts/run-tests.sh, scripts/run-performance-tests.sh — switched
   RESULTS_DIR to test-output/, compose path to project-local
  ~.gitignore — added /test-output/

Verification:
  bun run test:fast        → 11 / 11 PASS
  ./scripts/run-tests.sh   → static 13/13 + fast 11/11 PASS, exit 0

Tracker: AZ-456 → In Testing.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-11 02:57:04 +03:00
parent e5d9276b19
commit 38eb87fb08
45 changed files with 2377 additions and 157 deletions
+17 -2
View File
@@ -7,7 +7,13 @@
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview"
"preview": "vite preview",
"test": "vitest run",
"test:fast": "vitest run --reporter=default --reporter=junit --outputFile.junit=./test-output/fast-report.xml",
"test:fast:watch": "vitest",
"test:fast:coverage": "vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=./test-output/fast-report.xml",
"test:e2e": "playwright test --config e2e/playwright.config.ts",
"test:typecheck": "tsc --noEmit -p tsconfig.test.json"
},
"dependencies": {
"@hello-pangea/dnd": "^18.0.1",
@@ -28,15 +34,24 @@
"react-router-dom": "^7.4.0"
},
"devDependencies": {
"@playwright/test": "^1.49.0",
"@tailwindcss/vite": "^4.1.1",
"@testing-library/jest-dom": "^6.6.0",
"@testing-library/react": "^16.1.0",
"@testing-library/user-event": "^14.5.2",
"@types/leaflet": "^1.9.17",
"@types/leaflet-draw": "^1.0.13",
"@types/leaflet-polylinedecorator": "^1.6.5",
"@types/node": "^22.10.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@vitejs/plugin-react": "^4.3.4",
"@vitest/coverage-v8": "^3.0.0",
"jsdom": "^25.0.1",
"msw": "^2.7.0",
"tailwindcss": "^4.1.1",
"typescript": "~5.7.2",
"vite": "^6.2.0"
"vite": "^6.2.0",
"vitest": "^3.0.0"
}
}