feat: add Gitea integration, E2E booking flow, Docker DNS fix, browser-launcher module

- Add tests/scripts/lib/gitea-client.js: Gitea API client with auth, comments,
  attachments, and Markdown report formatters for visual and console reports
- Add tests/scripts/lib/browser-launcher.js: shared Playwright launch config with
  --dns-resolution-order=hostname-first, realistic UA, and navigateTo() helper
  using waitUntil:'commit' + waitForLoadState('domcontentloaded')
- Add tests/scripts/e2e-booking-flow-v2.js: full E2E scenario for irina-vik.ru
  (register → book service → login → personal cabinet) with Gitea reporting
- Update visual-test-pipeline.js: GITEA_ISSUE env var, Gitea comment+attachment
  posting, browser-launcher integration, waitUntil:'commit' navigation
- Update console-error-monitor-standalone.js: same Gitea + DNS fixes
- Update capture-screenshots.js: browser-launcher integration, DNS fix
- Update docker-compose.web-testing.yml: NETWORK_MODE env var (bridge),
  DNS_RESOLUTION_ORDER, GITEA_USER/PASSWORD env passthrough, e2e-booking service
- Update tests/package.json: pin playwright to exact 1.52.0 (matches Docker image)
- Update .gitignore: add tests/visual/e2e/ for E2E screenshots
- Update .kilo/agents/visual-tester.md: Docker networking note, Gitea scripts,
  e2e-booking service, updated script table
- Update .kilo/commands/web-test.md: Docker Networking section, --issue flag,
  Gitea Integration section, e2e-booking service
- Update .kilo/commands/e2e-test.md: complete rewrite — Docker-based Playwright,
  no more MCP dependency, proper service table, Gitea integration docs
- Update .kilo/capability-index.yaml: add gitea_integration, e2e_booking_flow,
  docker_networking capabilities to visual-tester; add routing entries
This commit is contained in:
NW
2026-04-17 09:27:27 +01:00
parent 3a8aa6b416
commit c258d16ef5
13 changed files with 1149 additions and 238 deletions

View File

@@ -2,10 +2,17 @@
# Covers: Visual Regression, Link Checking, Form Testing, Console Errors
#
# Usage:
# docker compose -f docker/docker-compose.web-testing.yml up visual-tester
# docker compose -f docker/docker-compose.web-testing.yml run --rm screenshot-baseline
# docker compose -f docker/docker-compose.web-testing.yml run --rm screenshot-current
# docker compose -f docker/docker-compose.web-testing.yml run --rm visual-compare
# Local app testing (bridge network):
# docker compose -f docker/docker-compose.web-testing.yml up visual-tester
#
# External site testing (host network for DNS):
# docker compose --profile external -f docker/docker-compose.web-testing.yml up visual-tester
#
# Override target URL:
# TARGET_URL=https://example.com docker compose --profile external -f docker/docker-compose.web-testing.yml up visual-tester
#
# Gitea integration:
# GITEA_ISSUE=42 docker compose --profile external -f docker/docker-compose.web-testing.yml up visual-tester
services:
# ─── Screenshot Capture: Create Baselines ─────────────────────────
@@ -16,15 +23,17 @@ services:
volumes:
- ../tests:/app/tests
environment:
- TARGET_URL=http://host.docker.internal:3000
- TARGET_URL=${TARGET_URL:-http://host.docker.internal:3000}
- PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
- DNS_RESOLUTION_ORDER=hostname-first
command: >
sh -c "npm install --prefix /app/tests pixelmatch pngjs 2>/dev/null;
node /app/tests/scripts/capture-screenshots.js baseline"
sh -c "cd /app/tests && npm install --ignore-scripts 2>/dev/null;
node scripts/capture-screenshots.js baseline"
extra_hosts:
- "host.docker.internal:host-gateway"
shm_size: '2gb'
ipc: host
network_mode: ${NETWORK_MODE:-bridge}
# ─── Screenshot Capture: Create Current ──────────────────────────
screenshot-current:
@@ -34,15 +43,17 @@ services:
volumes:
- ../tests:/app/tests
environment:
- TARGET_URL=http://host.docker.internal:3000
- TARGET_URL=${TARGET_URL:-http://host.docker.internal:3000}
- PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
- DNS_RESOLUTION_ORDER=hostname-first
command: >
sh -c "npm install --prefix /app/tests pixelmatch pngjs 2>/dev/null;
node /app/tests/scripts/capture-screenshots.js current"
sh -c "cd /app/tests && npm install --ignore-scripts 2>/dev/null;
node scripts/capture-screenshots.js current"
extra_hosts:
- "host.docker.internal:host-gateway"
shm_size: '2gb'
ipc: host
network_mode: ${NETWORK_MODE:-bridge}
# ─── Visual Regression: Compare Screenshots ──────────────────────
visual-compare:
@@ -70,13 +81,19 @@ services:
volumes:
- ../tests:/app/tests
environment:
- TARGET_URL=http://host.docker.internal:3000
- TARGET_URL=${TARGET_URL:-http://host.docker.internal:3000}
- PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
- PIXELMATCH_THRESHOLD=0.05
- PIXELMATCH_THRESHOLD=${PIXELMATCH_THRESHOLD:-0.05}
- PAGES=${PAGES:-/,/admin/login}
- BASELINE_DIR=/app/tests/visual/baseline
- CURRENT_DIR=/app/tests/visual/current
- DIFF_DIR=/app/tests/visual/diff
- REPORTS_DIR=/app/tests/reports
- GITEA_ISSUE=${GITEA_ISSUE:-}
- GITEA_TOKEN=${GITEA_TOKEN:-}
- GITEA_USER=${GITEA_USER:-}
- GITEA_PASSWORD=${GITEA_PASSWORD:-}
- DNS_RESOLUTION_ORDER=hostname-first
command: >
sh -c "cd /app/tests && npm install --ignore-scripts 2>/dev/null;
node scripts/visual-test-pipeline.js"
@@ -84,6 +101,7 @@ services:
- "host.docker.internal:host-gateway"
shm_size: '2gb'
ipc: host
network_mode: ${NETWORK_MODE:-bridge}
# ─── Console Error Monitor ──────────────────────────────────────
console-monitor:
@@ -93,8 +111,13 @@ services:
volumes:
- ../tests:/app/tests
environment:
- TARGET_URL=http://host.docker.internal:3000
- TARGET_URL=${TARGET_URL:-http://host.docker.internal:3000}
- REPORTS_DIR=/app/tests/reports
- GITEA_ISSUE=${GITEA_ISSUE:-}
- GITEA_TOKEN=${GITEA_TOKEN:-}
- GITEA_USER=${GITEA_USER:-}
- GITEA_PASSWORD=${GITEA_PASSWORD:-}
- DNS_RESOLUTION_ORDER=hostname-first
command: >
sh -c "cd /app/tests && npm install --ignore-scripts 2>/dev/null;
node scripts/console-error-monitor-standalone.js"
@@ -102,7 +125,25 @@ services:
- "host.docker.internal:host-gateway"
shm_size: '2gb'
ipc: host
network_mode: ${NETWORK_MODE:-bridge}
networks:
default:
name: apaw-testing
# ─── E2E Booking Flow ──────────────────────────────────────────
e2e-booking:
image: mcr.microsoft.com/playwright:v1.52.0-noble
container_name: apaw-e2e-booking
working_dir: /app
volumes:
- ../tests:/app/tests
environment:
- TARGET_URL=${TARGET_URL:-https://irina-vik.ru}
- GITEA_ISSUE=${GITEA_ISSUE:-}
- GITEA_TOKEN=${GITEA_TOKEN:-}
- GITEA_USER=${GITEA_USER:-}
- GITEA_PASSWORD=${GITEA_PASSWORD:-}
- DNS_RESOLUTION_ORDER=hostname-first
command: >
sh -c "cd /app/tests && npm install --ignore-scripts 2>/dev/null;
node scripts/e2e-booking-flow-v2.js"
shm_size: '2gb'
ipc: host
network_mode: ${NETWORK_MODE:-host}