# SQLite-first UAT/VAPT Results This build records Playwright UAT/VAPT execution directly into SQLite. ## Output files After a run, the important files are: ```text results/uat_vapt_results.sqlite results/UAT_VAPT_SQLite_Export.xlsx results/merged-results.json results/Audit_Firm_ERP_Master_UAT_VAPT_Checklist_v2_4_Results.xlsx results/playwright-results.json ``` ## How it works 1. `data/generated-test-matrix.json` is imported into SQLite table `test_cases`. 2. A new row is created in `test_runs`. 3. Every Playwright test result is inserted immediately into `test_results` by `reporters/sqlite-reporter.js`. 4. Screenshots, traces, and videos are recorded in `test_attachments`. 5. SQLite is exported to JSON and Excel after the run. ## Important command Use this command, without overriding the reporter: ```bash cd /tests node run-api-checks.js npm run db:import-cases npx playwright test --workers=1 npm run db:summary npm run db:export-json npm run db:export-excel npm run update:excel node scripts/result-server.js ``` Do not run with `--reporter=list`, because that disables the configured SQLite/json/html reporters. ## Query SQLite Summary: ```bash sqlite3 results/uat_vapt_results.sqlite "SELECT status, COUNT(*) FROM test_results GROUP BY status;" ``` Latest failures: ```bash sqlite3 results/uat_vapt_results.sqlite " SELECT tc.variant_id, tc.module, tc.scenario, tr.status, substr(tr.error_message,1,250) AS error FROM test_results tr LEFT JOIN test_cases tc ON tc.variant_id = tr.variant_id WHERE tr.run_id = (SELECT MAX(id) FROM test_runs) AND tr.status != 'passed' ORDER BY tc.module, tc.variant_id LIMIT 100; " ``` Not-run cases: ```bash sqlite3 results/uat_vapt_results.sqlite " SELECT tc.variant_id, tc.module, tc.scenario FROM test_cases tc LEFT JOIN test_results tr ON tr.variant_id = tc.variant_id AND tr.run_id = (SELECT MAX(id) FROM test_runs) WHERE tr.id IS NULL AND tc.automation != 'manual' ORDER BY tc.variant_id; " ``` ## Result dashboard The Dockerfile starts `scripts/result-server.js` on port `3000` after tests complete. In Coolify expose port `3000` and protect it using Basic Auth or IP restriction. Suggested persistent volumes: ```text /tests/results /tests/test-results /tests/playwright-report ```