first commit
This commit is contained in:
@@ -0,0 +1,267 @@
|
|||||||
|
# Full ERP UAT + VAPT Suite v2.3
|
||||||
|
|
||||||
|
This is a **separate Playwright testing project** for Audit Firm ERP. It can run from your local system or from a separate Coolify/Node container against the ERP URL.
|
||||||
|
|
||||||
|
## What v2.3 includes
|
||||||
|
|
||||||
|
- Updated checklist workbook with v2.0.4 security/FY additions.
|
||||||
|
- 272 source use cases in `data/checklist-rows.json`.
|
||||||
|
- 1,296 generated runnable/traceable variants in `data/generated-test-matrix.json`.
|
||||||
|
- Existing v2.2 coverage for UAT, RBAC, validation, boundary, CSRF, IDOR, upload and security header checks.
|
||||||
|
- New targeted v2.0.4 checks for:
|
||||||
|
- Forgot-password reset token exposure
|
||||||
|
- Reset-token rejection
|
||||||
|
- API login brute-force safety
|
||||||
|
- `X-Tenant-Code`, `X-Branch-Code`, `X-Year-Code` spoofing lockdown
|
||||||
|
- Trusted context-header secret mode
|
||||||
|
- Active FY selector/session visibility
|
||||||
|
- Active FY transactional screen smoke test
|
||||||
|
- Locked FY write protection
|
||||||
|
- Backup export access protection
|
||||||
|
- Executable/oversized upload rejection
|
||||||
|
- Storage-agent authentication
|
||||||
|
- Cookie/security header checks
|
||||||
|
- Optional strict CSP check
|
||||||
|
- Seed data helper: `seed/seed_data.py`.
|
||||||
|
- OTP auto-read support when this suite starts ERP itself.
|
||||||
|
- Excel result update support.
|
||||||
|
|
||||||
|
## Important truth
|
||||||
|
|
||||||
|
This suite gives strong repeatable UAT/VAPT regression coverage, but it does not replace a professional manual VAPT. Some tests are intentionally defensive and skip when the corresponding seed IDs or optional production flags are not configured.
|
||||||
|
|
||||||
|
For strongest results:
|
||||||
|
|
||||||
|
1. Run ERP migrations.
|
||||||
|
2. Run `seed/seed_data.py`.
|
||||||
|
3. Paste emitted IDs into `.env`.
|
||||||
|
4. Run targeted v2.0.4 checks using `npm run test:v204`.
|
||||||
|
5. Run the full matrix using `npm run test:excel`.
|
||||||
|
|
||||||
|
## Folder layout
|
||||||
|
|
||||||
|
```text
|
||||||
|
playwright_full_erp_uat_vapt_v22
|
||||||
|
├─ Audit_Firm_ERP_Master_UAT_VAPT_Checklist.xlsx
|
||||||
|
├─ data/
|
||||||
|
│ ├─ checklist-rows.json
|
||||||
|
│ ├─ generated-test-matrix.json
|
||||||
|
│ └─ summary.json
|
||||||
|
├─ fixtures/
|
||||||
|
│ ├─ auth.js
|
||||||
|
│ ├─ assertions.js
|
||||||
|
│ └─ v204-helpers.js
|
||||||
|
├─ scripts/
|
||||||
|
├─ seed/
|
||||||
|
│ └─ seed_data.py
|
||||||
|
├─ tests/
|
||||||
|
│ ├─ full-excel-variants.spec.js
|
||||||
|
│ ├─ vapt-targeted.spec.js
|
||||||
|
│ └─ v204-security-additions.spec.js
|
||||||
|
└─ test-data/uploads/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 1 — Install
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm install
|
||||||
|
npx playwright install chromium
|
||||||
|
copy .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 2 — Seed ERP data
|
||||||
|
|
||||||
|
From your ERP project root, after migrations:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
python D:\path\to\playwright_full_erp_uat_vapt_v22\seed\seed_data.py
|
||||||
|
```
|
||||||
|
|
||||||
|
The script prints IDs like:
|
||||||
|
|
||||||
|
```env
|
||||||
|
TENANT_A_ID=...
|
||||||
|
TENANT_B_ID=...
|
||||||
|
CLIENT_A_ID=...
|
||||||
|
NOTICE_CASE_A_ID=...
|
||||||
|
```
|
||||||
|
|
||||||
|
Paste those into `.env` of this Playwright suite.
|
||||||
|
|
||||||
|
## Step 3 — Configure `.env`
|
||||||
|
|
||||||
|
Minimum:
|
||||||
|
|
||||||
|
```env
|
||||||
|
BASE_URL=http://127.0.0.1:8000
|
||||||
|
SYSTEM_ADMIN_EMAIL=admin@auditfirm.local
|
||||||
|
SYSTEM_ADMIN_PASSWORD=your-password
|
||||||
|
FIRM_ADMIN_EMAIL=uat.firmadmin@tenant-a.test
|
||||||
|
FIRM_ADMIN_PASSWORD=Password@123
|
||||||
|
STAFF_EMAIL=uat.staff@tenant-a.test
|
||||||
|
STAFF_PASSWORD=Password@123
|
||||||
|
ACTIVE_FY=2025-26
|
||||||
|
PREVIOUS_FY=2024-25
|
||||||
|
TRUST_CONTEXT_HEADERS=false
|
||||||
|
```
|
||||||
|
|
||||||
|
For locked-year tests, first lock a FY in ERP, then set:
|
||||||
|
|
||||||
|
```env
|
||||||
|
LOCKED_FY=2024-25
|
||||||
|
```
|
||||||
|
|
||||||
|
For production cookie assertion on HTTPS:
|
||||||
|
|
||||||
|
```env
|
||||||
|
EXPECT_SECURE_COOKIES=true
|
||||||
|
```
|
||||||
|
|
||||||
|
For strict CSP assertion only after inline JS/CSS is removed:
|
||||||
|
|
||||||
|
```env
|
||||||
|
EXPECT_STRICT_CSP=true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 4 — Run ERP
|
||||||
|
|
||||||
|
Option A: run ERP separately:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
uvicorn app.main:app --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use:
|
||||||
|
|
||||||
|
```env
|
||||||
|
START_ERP=false
|
||||||
|
BASE_URL=http://127.0.0.1:8000
|
||||||
|
STATIC_OTP=123456
|
||||||
|
```
|
||||||
|
|
||||||
|
Option B: let Playwright start ERP and read OTP from console:
|
||||||
|
|
||||||
|
```env
|
||||||
|
START_ERP=true
|
||||||
|
OTP_FROM_CONSOLE=true
|
||||||
|
ERP_WORKDIR=D:\01 Project\versions\version 2.0\audit_firm_v2_baseline_with_alembic\Audit_Firm_v2.0.3.6\Audit_Firm_v2.0.3.6
|
||||||
|
ERP_COMMAND=uvicorn app.main:app --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 5 — Check matrix and seed config
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run matrix
|
||||||
|
npm run test:seed-check
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected v2.3 summary:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Source Excel rows: 272
|
||||||
|
Generated variants: 1296
|
||||||
|
v204AdditionalChecks: 16
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 6 — Run tests
|
||||||
|
|
||||||
|
Full Excel mapped suite:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run test:excel
|
||||||
|
```
|
||||||
|
|
||||||
|
Original targeted VAPT checks:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run test:vapt
|
||||||
|
```
|
||||||
|
|
||||||
|
New v2.0.4 targeted hardening checks:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run test:v204
|
||||||
|
```
|
||||||
|
|
||||||
|
All tests:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run test:all
|
||||||
|
```
|
||||||
|
|
||||||
|
Show report:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run show-report
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 7 — Update Excel result status
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
npm run report:json
|
||||||
|
npm run update:excel
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```text
|
||||||
|
results/Audit_Firm_ERP_Master_UAT_VAPT_Checklist_v2_2_Results.xlsx
|
||||||
|
```
|
||||||
|
|
||||||
|
## Coolify test-runner usage
|
||||||
|
|
||||||
|
You can run this suite as a separate Node/Playwright container in Coolify. Set:
|
||||||
|
|
||||||
|
```env
|
||||||
|
BASE_URL=https://uat-erp.yourdomain.com
|
||||||
|
START_ERP=false
|
||||||
|
TRUST_CONTEXT_HEADERS=false
|
||||||
|
```
|
||||||
|
|
||||||
|
Do not run heavy load tests from the same VPS that hosts the ERP. Use this suite for functional UAT, regression, and security flow checks.
|
||||||
|
|
||||||
|
## Recommended ERP UI improvement for stronger automation
|
||||||
|
|
||||||
|
Add stable selectors over time:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<select data-testid="active-fy-select"></select>
|
||||||
|
<button data-testid="client-create-submit">Save</button>
|
||||||
|
<input data-testid="client-pan">
|
||||||
|
<a data-testid="notice-case-new">New Case</a>
|
||||||
|
```
|
||||||
|
|
||||||
|
Without stable selectors, Playwright uses defensive generic selectors, which is useful but less precise.
|
||||||
|
|
||||||
|
## Security note
|
||||||
|
|
||||||
|
Keep public deployment with:
|
||||||
|
|
||||||
|
```env
|
||||||
|
TRUST_CONTEXT_HEADERS=false
|
||||||
|
```
|
||||||
|
|
||||||
|
Trusted internal context headers should only be used for backend-to-backend automation and must include `X-AuditFirm-Context-Secret` when enabled.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v2.4.0 changelog
|
||||||
|
|
||||||
|
- **Checklist reconciled to automation.** The Excel checklist is now regenerated
|
||||||
|
from the Playwright source matrix (`data/checklist-rows.json`, 272 source cases
|
||||||
|
/ 1296 variants) so every automated case has exactly one tracking row.
|
||||||
|
New file: `Audit_Firm_ERP_Master_UAT_VAPT_Checklist_v2.4.xlsx` (302 rows total).
|
||||||
|
- **Added `UAT_Work`, `UAT_Domains`, `VAPT_Domains`, `V204_Additional_Checks`** to
|
||||||
|
the checklist — previously automated but missing from the tracker.
|
||||||
|
- **`UAT_FY_Lock_Backup` (30 cases) carried in as a MANUAL block** and given
|
||||||
|
scaffolding in `tests/fy-lock-backup.spec.js`.
|
||||||
|
⚠️ This scaffolding is **UNTESTED**: every case is `test.fixme()` and must be
|
||||||
|
verified against a running ERP (routes/selectors/assertions) before it counts
|
||||||
|
as coverage. Run with `npm run test:fy`.
|
||||||
|
- 9 API-level security checks were recorded from a local SQLite run
|
||||||
|
(6 Pass, 1 Partial in the v204 block, plus 2 more). All UI/browser and manual
|
||||||
|
cases remain **Not Started** pending a full run against the deployed environment.
|
||||||
|
|
||||||
|
### Known source-of-truth note
|
||||||
|
The older `Audit_Firm_ERP_Master_UAT_VAPT_Checklist.xlsx` (218 rows) is superseded
|
||||||
|
by the v2.4 file. Use the v2.4 file going forward.
|
||||||
Reference in New Issue
Block a user