@keber/qa-framework 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +233 -0
- package/agent-instructions/00-module-analysis.md +263 -0
- package/agent-instructions/01-spec-generation.md +278 -0
- package/agent-instructions/02-test-plan-generation.md +202 -0
- package/agent-instructions/03-test-case-generation.md +147 -0
- package/agent-instructions/04-automation-generation.md +310 -0
- package/agent-instructions/04b-test-stabilization.md +306 -0
- package/agent-instructions/05-ado-integration.md +244 -0
- package/agent-instructions/06-maintenance.md +125 -0
- package/docs/architecture.md +227 -0
- package/docs/comparison-matrix.md +131 -0
- package/docs/final-report.md +279 -0
- package/docs/folder-structure-guide.md +291 -0
- package/docs/generalization-decisions.md +203 -0
- package/docs/installation.md +239 -0
- package/docs/spec-driven-philosophy.md +170 -0
- package/docs/usage-with-agent.md +203 -0
- package/examples/module-example/README.md +34 -0
- package/examples/module-example/suppliers/00-inventory.md +56 -0
- package/examples/module-example/suppliers/suppliers-create.spec.ts +148 -0
- package/integrations/ado-powershell/README.md +75 -0
- package/integrations/ado-powershell/pipelines/azure-pipeline-qa.yml +133 -0
- package/integrations/ado-powershell/scripts/create-testplan-from-mapping.ps1 +114 -0
- package/integrations/ado-powershell/scripts/inject-ado-ids.ps1 +96 -0
- package/integrations/ado-powershell/scripts/sync-ado-titles.ps1 +93 -0
- package/integrations/playwright/README.md +68 -0
- package/integrations/playwright-azure-reporter/README.md +88 -0
- package/package.json +57 -0
- package/qa-framework.config.json +87 -0
- package/scripts/cli.js +74 -0
- package/scripts/generate.js +92 -0
- package/scripts/init.js +322 -0
- package/scripts/validate.js +184 -0
- package/templates/automation-scaffold/.env.example +56 -0
- package/templates/automation-scaffold/fixtures/auth.ts +77 -0
- package/templates/automation-scaffold/fixtures/test-helpers.ts +85 -0
- package/templates/automation-scaffold/global-setup.ts +106 -0
- package/templates/automation-scaffold/package.json +24 -0
- package/templates/automation-scaffold/playwright.config.ts +85 -0
- package/templates/defect-report.md +101 -0
- package/templates/execution-report.md +116 -0
- package/templates/session-summary.md +73 -0
- package/templates/specification/00-inventory.md +81 -0
- package/templates/specification/01-business-rules.md +90 -0
- package/templates/specification/02-workflows.md +114 -0
- package/templates/specification/03-roles-permissions.md +49 -0
- package/templates/specification/04-test-data.md +104 -0
- package/templates/specification/05-test-scenarios.md +226 -0
- package/templates/test-case.md +81 -0
- package/templates/test-plan.md +130 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# docs/comparison-matrix.md
|
|
2
|
+
|
|
3
|
+
**Phase 1 Artifact** — Source: analysis of two embedded QA implementations.
|
|
4
|
+
|
|
5
|
+
> **Note**: This document covers the comparative inventory of Repo A (`redacted-repo-web`) and Repo B (`redacted-repo`). It was the primary input for Phase 2 (classification) and Phase 3 (framework design).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Repository Profiles
|
|
10
|
+
|
|
11
|
+
| Attribute | Repo A (`redacted-repo-web`) | Repo B (`redacted-repo`) |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| **Application stack** | ASP.NET MVC 5 + Web API 2 + SQL Server | Blazor WebAssembly + .NET + Radzen |
|
|
14
|
+
| **UI component library** | jQuery, Select2, toastr, SweetAlert2, Metronic | Radzen Blazor components |
|
|
15
|
+
| **Authentication** | Form login: RUT + password, `/Seguridad/Login` | Form login: email + password, Blazor identity |
|
|
16
|
+
| **QA environment URL** | `https://redactedURL.com` | `https://redactedURL.com` |
|
|
17
|
+
| **Modules documented** | 1 module (RCL Colación Fría), 7 submodules | 4 modules (Personas, Operación, Sistema, Reportes), 17+ submodules |
|
|
18
|
+
| **Test cases documented** | ~160 TCs across 7 submodules | ~894 TCs across 17+ submodules |
|
|
19
|
+
| **ADO integration level** | Partial (Wiki tools, Plan IDs referenced) | Full (pipeline, reporter, inject-ado-ids.ps1, module-registry.json) |
|
|
20
|
+
| **Playwright suite** | Yes (Sprint 40: 26 P0 tests, 24 pass/2 skip) | Yes (67 automated, 53 pass/2 fail/12 skip) |
|
|
21
|
+
| **Standards folder** | No (`00-standards/` not present) | Yes (naming-conventions, bug-template, TC-template, test-data-guidelines) |
|
|
22
|
+
| **Session retrospectives** | Yes (06-defects used, 2 defects filed) | Extensive (SESSION-SUMMARY-* files at qa root) |
|
|
23
|
+
| **08-azure-integration** | Not present | Fully implemented |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Item-by-Item Comparison Matrix
|
|
28
|
+
|
|
29
|
+
| Item | Repo A | Repo B | Common? | Different? | Generalizable? | Needs Param? | Out of Framework? |
|
|
30
|
+
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
31
|
+
| **8-folder qa/ structure (00–08)** | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
|
32
|
+
| **6-file submodule template** | ✅ | ✅ | ✅ | Minor | ✅ | ❌ | ❌ |
|
|
33
|
+
| `00-inventory.md` | ✅ | ✅ | ✅ | ❌ | ✅ | Module code | ❌ |
|
|
34
|
+
| `01-business-rules.md` | ✅ (RN-* IDs) | ✅ (RN-* IDs) | ✅ | ❌ | ✅ | Module code | ❌ |
|
|
35
|
+
| `02-workflows.md` (FL-* IDs) | ✅ | ✅ | ✅ | ❌ | ✅ | Module code | ❌ |
|
|
36
|
+
| `03-roles-permissions.md` | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
|
37
|
+
| `04-test-data.md` | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
|
38
|
+
| `05-test-scenarios.md` (TC-* IDs) | ✅ | ✅ | ✅ | ❌ | ✅ | Module code | ❌ |
|
|
39
|
+
| **Agent instructions: module analysis** | ✅ (766 lines) | ✅ (834 lines) | ✅ | Minor | ✅ | Project URL | ❌ |
|
|
40
|
+
| **Agent instructions: E2E generation** | ✅ (Sprint-specific) | ❌ | ❌ | Major | ✅ (extract pattern) | Module scope | ❌ |
|
|
41
|
+
| **ADO integration instructions** | ❌ | ✅ (AGENT-ADO-INTEGRATION.md) | ❌ | — | ✅ | Org/Project/IDs | ❌ |
|
|
42
|
+
| **QA Structure Guide** | ✅ (994 lines) | ✅ (1018 lines) | ✅ | Minor wording | ✅ | ❌ | ❌ |
|
|
43
|
+
| **00-standards/ folder** | ❌ | ✅ | ❌ | — | ✅ (adopt from B) | ❌ | ❌ |
|
|
44
|
+
| **Naming conventions doc** | Embedded in structure guide | Standalone doc | Partial | Yes | ✅ | Module codes | ❌ |
|
|
45
|
+
| **Bug report template** | ❌ | ✅ | ❌ | — | ✅ | ❌ | ❌ |
|
|
46
|
+
| **Test case template** | ❌ | ✅ | ❌ | — | ✅ | ❌ | ❌ |
|
|
47
|
+
| **Test data guidelines** | ❌ | ✅ | ❌ | — | ✅ | Env var names | ❌ |
|
|
48
|
+
| **session-summary.md pattern** | ❌ | ✅ (2 examples) | ❌ | — | ✅ | ❌ | ❌ |
|
|
49
|
+
| **Multi-role globalSetup (Playwright)** | ✅ (3 roles, sequential) | ✅ (1 role, single) | ✅ (pattern) | Parameters | ✅ | Role count, selectors | ❌ |
|
|
50
|
+
| **storageState auth reuse** | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
|
51
|
+
| **EXEC_IDX / RUN_SLOT date pattern** | ✅ | ❌ (uses Date.now() only) | ❌ | Major | ✅ (adopt from A) | ❌ | ❌ |
|
|
52
|
+
| **3-layer email validation strategy** | ✅ | ❌ | ❌ | — | ✅ (domain-agnostic) | ❌ | Optional |
|
|
53
|
+
| **playwright-azure-reporter** | ❌ | ✅ | ❌ | — | ✅ | planId, suiteId | Optional |
|
|
54
|
+
| **inject-ado-ids.ps1** | ❌ | ✅ | ❌ | — | ✅ | ❌ | Optional |
|
|
55
|
+
| **ADO pipeline (azure-pipeline-qa.yml)** | ❌ | ✅ (367 lines) | ❌ | — | ✅ | Org, project, branch | Optional |
|
|
56
|
+
| **module-registry.json** | ❌ | ✅ | ❌ | — | ✅ | Module paths/IDs | Optional |
|
|
57
|
+
| **ado-ids-mapping.json** | ❌ | ✅ | ❌ | — | ✅ | All IDs | Optional |
|
|
58
|
+
| **Debug artifact policy** | ❌ | ✅ (DEBUG-ARTIFACTS-POLICY.md) | ❌ | — | ✅ | ❌ | ❌ |
|
|
59
|
+
| **UI as source of truth principle** | Implied | ✅ (UI_COMO_FUENTE_DE_VERDAD.md) | ✅ (implicit) | Documentation | ✅ | ❌ | ❌ |
|
|
60
|
+
| **TC origin classification** | ❌ | ✅ (UI-OBSERVADO/PENDIENTE-CODE/BLOQUEADO-PERMISOS) | ❌ | — | ✅ | ❌ | ❌ |
|
|
61
|
+
| **BLAZOR_WASM_AUTOMATION.md** | ❌ | ✅ | ❌ | — | Partial | UI library | Optional |
|
|
62
|
+
| **RADZEN_COMPONENTS_PLAYWRIGHT.md** | ❌ | ✅ | ❌ | — | Partial | UI library | Optional (Blazor adapter) |
|
|
63
|
+
| **DB schema documentation pattern** | ✅ (Mermaid ER) | ❌ | ❌ | — | ✅ (pattern only) | DB naming | Optional |
|
|
64
|
+
| **Correctness criteria** | ✅ (≥2 passes with different EXEC_IDX) | ❌ | ❌ | — | ✅ | ❌ | ❌ |
|
|
65
|
+
| **5-layer debugging methodology** | ✅ | ❌ | ❌ | — | ✅ | ❌ | ❌ |
|
|
66
|
+
| **Page Object Model (POM) pattern** | ✅ (4 POMs) | Inline (no POMs) | Partial | Approach | ✅ (recommend POMs) | ❌ | ❌ |
|
|
67
|
+
| **06-defects/ directory** | ✅ (2 active DEFs used) | ✅ (folder only, no active DEFs) | ✅ | Usage | Conditional | ❌ | Optional |
|
|
68
|
+
| **Seed specs pattern** | ❌ | ✅ (seeds/*.spec.ts excluded from runs) | ❌ | — | ✅ | ❌ | Optional |
|
|
69
|
+
| **automation-feasibility-analysis.md** | ❌ | ✅ | ❌ | — | ✅ | ❌ | ❌ |
|
|
70
|
+
| **Coverage mapping (COVERAGE-MAPPING.md)** | ❌ | ✅ | ❌ | — | ✅ | ADO IDs | Optional |
|
|
71
|
+
| **Project-specific URLs** | ✅ (redacted) | ✅ (redacted) | Both | Different | ❌ (parameterize) | QA_BASE_URL | ❌ |
|
|
72
|
+
| **ADO org / project names** | redacted-organization / redacted-project | redacted-organization / redacted-project | Org same | Project different | ❌ (parameterize) | ADO_ORG, ADO_PROJECT | ❌ |
|
|
73
|
+
| **Login selectors** | `#m_login_signin_submit` (Metronic) | `#email-input`, `#password-input` (Blazor) | Different | Major | ❌ (parameterize) | LOGIN_EMAIL_SELECTOR, etc. | ❌ |
|
|
74
|
+
| **Application-specific form selectors** | `#tbl_redacted`, `#redacted` | `.rz-data-row`, `input.rz-textbox` | None | Major | ❌ | ❌ | Yes (project adapters) |
|
|
75
|
+
| **Test user DNIs / real personal data** | DNIs in test-data.ts, personas.md | None (uses env vars) | None | Major | ❌ | ❌ | Yes (project data) |
|
|
76
|
+
| **Module-specific business data** | redacted | redacted | None | Major | ❌ | ❌ | Yes (project data) |
|
|
77
|
+
| **Sprint references** | redacted sprint | No sprints (session-based) | None | Different | ❌ | ❌ | Yes (project context) |
|
|
78
|
+
| **Developer names** | redacted names | None | None | — | ❌ | ❌ | Yes (project context) |
|
|
79
|
+
| **Internal SOAP email service** | EnvioMailSoapClient | None | None | — | ❌ | ❌ | Yes |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Summary Counts
|
|
84
|
+
|
|
85
|
+
| Category | Count |
|
|
86
|
+
|---|---|
|
|
87
|
+
| Items common to both repos | 14 |
|
|
88
|
+
| Items only in Repo A, generalizable | 8 |
|
|
89
|
+
| Items only in Repo B, generalizable | 16 |
|
|
90
|
+
| Items that need parameterization | 12 |
|
|
91
|
+
| Items that are purely project-specific (out of framework) | 10+ |
|
|
92
|
+
| Optional/plugin items | 9 |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Key Differences That Create Design Tensions
|
|
97
|
+
|
|
98
|
+
### 1. Login credential type: RUT vs email
|
|
99
|
+
|
|
100
|
+
- Repo A uses RUT (Chilean national ID) as username
|
|
101
|
+
- Repo B uses email as username
|
|
102
|
+
- **Resolution**: Parameterize via `QA_USER_EMAIL` and `QA_USER_PASSWORD` env vars; the login selector set is a project config parameter in `qa-framework.config.json`
|
|
103
|
+
|
|
104
|
+
### 2. Single-role vs multi-role globalSetup
|
|
105
|
+
|
|
106
|
+
- Repo A: 3 roles (solicitante, encargado, admin) saved sequentially to `.auth/{role}.json`
|
|
107
|
+
- Repo B: 1 role saved to `.auth/session.json`
|
|
108
|
+
- **Resolution**: Scaffold supports both. Config parameter `testUsers[]` drives how many roles are set up. Template defaults to single-role; multi-role is documented as an extension.
|
|
109
|
+
|
|
110
|
+
### 3. ADO integration depth
|
|
111
|
+
|
|
112
|
+
- Repo A: ADO IDs referenced in comments; no pipeline or reporter
|
|
113
|
+
- Repo B: Full pipeline, playwright-azure-reporter, inject-ado-ids.ps1, module-registry.json
|
|
114
|
+
- **Resolution**: ADO integration is a fully optional plugin (`integrations/ado-powershell/`). The framework core does not require it.
|
|
115
|
+
|
|
116
|
+
### 4. Standards folder
|
|
117
|
+
|
|
118
|
+
- Repo B has a mature `00-standards/` folder absent from Repo A
|
|
119
|
+
- **Resolution**: Adopt the standards from Repo B as the framework baseline, since they are the more complete and generalized set.
|
|
120
|
+
|
|
121
|
+
### 5. `06-defects/` directory
|
|
122
|
+
|
|
123
|
+
- Repo A: Used actively (2 bugs filed, test skips reference DEF-IDs)
|
|
124
|
+
- Repo B: Folder exists but no active defect files
|
|
125
|
+
- **Resolution**: See `docs/generalization-decisions.md` §7 for the full evaluation. Decision: **keep as optional, not required by framework core**.
|
|
126
|
+
|
|
127
|
+
### 6. Test naming convention
|
|
128
|
+
|
|
129
|
+
- Repo A: `[Nx] Title @Pp` (sprint-relative sequential numbering)
|
|
130
|
+
- Repo B: `[ADO_ID] Title` (ADO Work Item ID prefix)
|
|
131
|
+
- **Resolution**: Framework uses `[{ID}] {title} @{priority}` where `{ID}` defaults to a local TC-ID (e.g., TC-MOD-SUB-001) and is replaced with ADO WI ID when ADO integration is enabled.
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Phase 6 — Final Report: keber/qa-framework
|
|
2
|
+
|
|
3
|
+
**Date**: 2025-01-15
|
|
4
|
+
**Version analyzed**: 1.0.0
|
|
5
|
+
**Prepared by**: GitHub Copilot (agent output)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Executive Summary
|
|
10
|
+
|
|
11
|
+
Two production QA repositories were analyzed, compared, and generalized into a single,
|
|
12
|
+
decoupled, npm-installable QA framework: `keber/qa-framework`.
|
|
13
|
+
|
|
14
|
+
The framework:
|
|
15
|
+
- Encodes all conventions shared between both source repositories
|
|
16
|
+
- Removes all project-specific hardcoding
|
|
17
|
+
- Is designed for consumption by an IDE agent (GitHub Copilot / similar)
|
|
18
|
+
- Provides a complete opinionated structure: docs, templates, agent instructions, integrations, CLI, and examples
|
|
19
|
+
- Supports both ADO-integrated and ADO-free project configurations
|
|
20
|
+
- Is ready for `npm publish` or local `npm link` installation
|
|
21
|
+
|
|
22
|
+
Both source repositories can migrate to this framework with minimal disruption using the
|
|
23
|
+
procedures documented in `MIGRATION-NOTES.md`.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Source Repository Findings
|
|
28
|
+
|
|
29
|
+
### Repo A — redacted-repo-web
|
|
30
|
+
|
|
31
|
+
| Category | Finding |
|
|
32
|
+
|----------|---------|
|
|
33
|
+
| Stack | ASP.NET MVC 5 + Web API 2 + SQL Server |
|
|
34
|
+
| Frontend | jQuery + Select2 + toastr + SweetAlert2 + Metronic |
|
|
35
|
+
| Auth | RUT-based login (`#m_login_signin_submit`) |
|
|
36
|
+
| QA maturity | Medium — spec files present, standards missing |
|
|
37
|
+
| Automation | Sprint 40: 26 P0 tests (24 pass, 2 skip via DEF-001/DEF-002) |
|
|
38
|
+
| ADO | Referenced (Plan 21992/Suite 21993) but not reporter-integrated |
|
|
39
|
+
| Modules | 7 submodules documented (~160 TCs across 82 QA files) |
|
|
40
|
+
| Strengths | EXEC_IDX pattern, POM structure, multi-role auth, skip+DEF |
|
|
41
|
+
| Gaps | No `00-standards/`, no `08-azure-integration/`, no session summaries |
|
|
42
|
+
|
|
43
|
+
### Repo B — redacted-repo
|
|
44
|
+
|
|
45
|
+
| Category | Finding |
|
|
46
|
+
|----------|---------|
|
|
47
|
+
| Stack | Blazor WebAssembly + .NET + Radzen components |
|
|
48
|
+
| Auth | Email-based (`#email-input` / `#password-input`) |
|
|
49
|
+
| QA maturity | High — complete standards folder, ADO fully integrated |
|
|
50
|
+
| Automation | 67 automated TCs (53 pass / 2 fail / 12 skip) |
|
|
51
|
+
| ADO | Full: Plans 22304/22794/22875, WI IDs 22957–23034, bi-directional sync |
|
|
52
|
+
| Modules | 4 modules × 17+ submodules (~894 TCs) |
|
|
53
|
+
| Strengths | `00-standards/`, `08-azure-integration/`, module-registry, ado reporter |
|
|
54
|
+
| Gaps | No EXEC_IDX pattern, no POM convention, no session summaries |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 3. Common Elements (Adopted by Framework)
|
|
59
|
+
|
|
60
|
+
| Element | Source | Decision |
|
|
61
|
+
|---------|--------|----------|
|
|
62
|
+
| 6-file submodule spec pattern | Both | Core framework pattern |
|
|
63
|
+
| Playwright `@playwright/test` | Both | Standard automation library |
|
|
64
|
+
| Priority levels P0–P3 | Both | Universal tagging via `@PX` |
|
|
65
|
+
| `test.skip()` + DEF reference | Repo A | Adopted as standard skip convention |
|
|
66
|
+
| `06-defects/` folder | Repo A | Optional — recommended without ADO |
|
|
67
|
+
| `00-standards/` folder | Repo B | Adopted; templates included |
|
|
68
|
+
| `08-azure-integration/` folder | Repo B | Optional; fully documented |
|
|
69
|
+
| `module-registry.json` | Repo B | Included in ADO integration |
|
|
70
|
+
| ADO reporter integration | Repo B | Optional plugin (peer dep) |
|
|
71
|
+
| Multi-role globalSetup | Repo A | Default single-role; multi-role documented |
|
|
72
|
+
| EXEC_IDX uniqueness pattern | Repo A | Adopted; added to test-helpers.ts |
|
|
73
|
+
| POM page object pattern | Repo A | Recommended; not enforced |
|
|
74
|
+
| ADO inject-ado-ids script | Repo B | Generalized; included in integrations/ |
|
|
75
|
+
| Azure Pipeline QA template | Repo B | Generalized; included in integrations/ |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 4. Project-Specific Elements (Excluded from Framework)
|
|
80
|
+
|
|
81
|
+
| Element | Source | Disposition |
|
|
82
|
+
|---------|--------|-------------|
|
|
83
|
+
| `/Seguridad/Login` route | Repo A | Parameterized via `QA_LOGIN_PATH` env var |
|
|
84
|
+
| `#m_login_signin_submit` selector | Repo A | Parameterized via `QA_LOGIN_SUBMIT_SELECTOR` |
|
|
85
|
+
| RUT-based username field | Repo A | Parameterized via `QA_LOGIN_EMAIL_SELECTOR` |
|
|
86
|
+
| `#email-input` / `#password-input` | Repo B | Parameterized via env vars |
|
|
87
|
+
| ADO Plan IDs (21992, 22304, etc.) | Both | Parameterized via `QA_ADO_PLAN_ID` |
|
|
88
|
+
| ADO WI IDs (22957–23034) | Repo B | Injected per-project via inject-ado-ids.ps1 |
|
|
89
|
+
| Specific module names/selectors | Both | Remain in project-specific spec files |
|
|
90
|
+
| Sprint numbers | Both | Remain in project-specific test plans |
|
|
91
|
+
| Metronic theme selectors | Repo A | Project-specific; documented in Repo A specs |
|
|
92
|
+
| Radzen component patterns | Repo B | Documented in Repo B's BLAZOR guides |
|
|
93
|
+
| `redacted-package` package name | Repo A | Replaced by project-configurable name |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 5. Generalization Decisions Summary
|
|
98
|
+
|
|
99
|
+
Fifteen formal decisions were made and documented in `docs/generalization-decisions.md`:
|
|
100
|
+
|
|
101
|
+
| # | Topic | Decision |
|
|
102
|
+
|---|-------|----------|
|
|
103
|
+
| §1 | Login selectors | Fully parameterized via env vars |
|
|
104
|
+
| §2 | TC naming | Unified `[TC-M-S-NNN]` + inject-ado for ADO |
|
|
105
|
+
| §3 | Spec file structure | 6-file pattern adopted from both repos |
|
|
106
|
+
| §4 | Auth storageState | Single-role default; multi-role documented |
|
|
107
|
+
| §5 | EXEC_IDX | Adopted from Repo A; added to test-helpers.ts |
|
|
108
|
+
| §6 | ADO integration | Optional plugin; fully documented |
|
|
109
|
+
| §7 | `06-defects/` | Optional; ADO-conditional usage documented |
|
|
110
|
+
| §8 | POM pattern | Recommended (Repo A); inline acceptable |
|
|
111
|
+
| §9 | Standards folder | Adopted from Repo B (more complete) |
|
|
112
|
+
| §10 | Session summaries | New addition to both repos' patterns |
|
|
113
|
+
| §11 | Priority levels | P0–P3 universal; `@P0` grep-tag convention |
|
|
114
|
+
| §12 | `08-azure-integration/` | Optional; fully documented scripts |
|
|
115
|
+
| §13 | CI pipeline | Parameterized `azure-pipeline-qa.yml` |
|
|
116
|
+
| §14 | Framework distribution | npm package (`keber/qa-framework`) |
|
|
117
|
+
| §15 | ADO vs local defects | Decision tree documented; both patterns valid |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 6. Final Framework Structure
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
qa-framework/
|
|
125
|
+
├── package.json ← npm package, CLI entry
|
|
126
|
+
├── qa-framework.config.json ← example project config
|
|
127
|
+
├── README.md
|
|
128
|
+
├── CHANGELOG.md
|
|
129
|
+
├── MIGRATION-NOTES.md
|
|
130
|
+
│
|
|
131
|
+
├── docs/
|
|
132
|
+
│ ├── architecture.md ← 4-layer component map
|
|
133
|
+
│ ├── comparison-matrix.md ← Phase 1 artifact
|
|
134
|
+
│ ├── generalization-decisions.md ← Phase 2 artifact (15 decisions)
|
|
135
|
+
│ ├── installation.md ← 3 install options
|
|
136
|
+
│ ├── spec-driven-philosophy.md ← Core methodology
|
|
137
|
+
│ ├── folder-structure-guide.md ← Full folder reference
|
|
138
|
+
│ ├── usage-with-agent.md ← Agent prompt patterns
|
|
139
|
+
│ └── final-report.md ← This file
|
|
140
|
+
│
|
|
141
|
+
├── agent-instructions/ ← Consumed by Copilot agent
|
|
142
|
+
│ ├── 00-module-analysis.md
|
|
143
|
+
│ ├── 01-spec-generation.md
|
|
144
|
+
│ ├── 02-test-plan-generation.md
|
|
145
|
+
│ ├── 03-test-case-generation.md
|
|
146
|
+
│ ├── 04-automation-generation.md
|
|
147
|
+
│ ├── 05-ado-integration.md
|
|
148
|
+
│ └── 06-maintenance.md
|
|
149
|
+
│
|
|
150
|
+
├── templates/
|
|
151
|
+
│ ├── specification/ ← 6-file submodule template set
|
|
152
|
+
│ │ ├── 00-inventory.md
|
|
153
|
+
│ │ ├── 01-business-rules.md
|
|
154
|
+
│ │ ├── 02-workflows.md
|
|
155
|
+
│ │ ├── 03-roles-permissions.md
|
|
156
|
+
│ │ ├── 04-test-data.md
|
|
157
|
+
│ │ └── 05-test-scenarios.md
|
|
158
|
+
│ ├── test-plan.md
|
|
159
|
+
│ ├── test-case.md
|
|
160
|
+
│ ├── execution-report.md
|
|
161
|
+
│ ├── defect-report.md
|
|
162
|
+
│ ├── session-summary.md
|
|
163
|
+
│ └── automation-scaffold/
|
|
164
|
+
│ ├── package.json
|
|
165
|
+
│ ├── playwright.config.ts
|
|
166
|
+
│ ├── global-setup.ts
|
|
167
|
+
│ ├── .env.example
|
|
168
|
+
│ └── fixtures/
|
|
169
|
+
│ ├── auth.ts
|
|
170
|
+
│ └── test-helpers.ts
|
|
171
|
+
│
|
|
172
|
+
├── integrations/
|
|
173
|
+
│ ├── playwright/README.md
|
|
174
|
+
│ ├── playwright-azure-reporter/README.md
|
|
175
|
+
│ └── ado-powershell/
|
|
176
|
+
│ ├── README.md
|
|
177
|
+
│ ├── scripts/
|
|
178
|
+
│ │ ├── inject-ado-ids.ps1
|
|
179
|
+
│ │ ├── create-testplan-from-mapping.ps1
|
|
180
|
+
│ │ └── sync-ado-titles.ps1
|
|
181
|
+
│ └── pipelines/
|
|
182
|
+
│ └── azure-pipeline-qa.yml
|
|
183
|
+
│
|
|
184
|
+
├── examples/
|
|
185
|
+
│ └── module-example/
|
|
186
|
+
│ ├── README.md
|
|
187
|
+
│ └── suppliers/
|
|
188
|
+
│ ├── 00-inventory.md
|
|
189
|
+
│ └── suppliers-create.spec.ts
|
|
190
|
+
│
|
|
191
|
+
└── scripts/ ← CLI implementation
|
|
192
|
+
├── cli.js
|
|
193
|
+
├── init.js
|
|
194
|
+
├── generate.js
|
|
195
|
+
└── validate.js
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**File count**: 48 files across 20 directories
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 7. Risks
|
|
203
|
+
|
|
204
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
205
|
+
|------|-----------|--------|------------|
|
|
206
|
+
| New project uses different login mechanism not covered by parameterization | Medium | Low | Add custom `QA_LOGIN_PATH`, selectors in `.env`; override `global-setup.ts` |
|
|
207
|
+
| ADO API version changes break ps1 scripts | Low | Medium | Scripts use `api-version=7.1`; update when needed |
|
|
208
|
+
| npm registry not available (intranet) | Medium | Medium | Use Option B (clone) or Option C (manual copy) from installation.md |
|
|
209
|
+
| Agent hallucinates selectors not in inventory | Medium | High | Always run agents with live browser access; validate every selector before commit |
|
|
210
|
+
| Framework version conflicts between projects | Low | Low | Each project pins its own version in `package.json` |
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 8. Assumptions
|
|
215
|
+
|
|
216
|
+
1. Projects use Playwright `>=1.40.0` for E2E automation.
|
|
217
|
+
2. CI environment supports Node.js `>=18`.
|
|
218
|
+
3. ADO integration requires a PAT with `Work Items R/W` + `Test Management R/W`.
|
|
219
|
+
4. QA engineers have read access to the application under test.
|
|
220
|
+
5. Spec files are written by agents but reviewed and committed by humans.
|
|
221
|
+
6. Login forms are HTTP/HTTPS web forms accessible from the Playwright browser context.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 9. Open Items
|
|
226
|
+
|
|
227
|
+
| Item | Priority | Owner | Notes |
|
|
228
|
+
|------|----------|-------|-------|
|
|
229
|
+
| Add `examples/module-example/suppliers/01-business-rules.md` through `05-test-scenarios.md` | Low | QA team | Example shows inventory + spec only; add full 6-file set |
|
|
230
|
+
| Publish to npm registry | Medium | DevOps | Requires `npm publish` with org scope `keber` |
|
|
231
|
+
| Add `--watch` mode to `validate.js` | Low | Framework maintainer | Useful in local dev |
|
|
232
|
+
| Radzen/Blazor guide | Medium | QA team | Extract from Repo B's `BLAZOR_WASM_AUTOMATION.md` into `docs/` |
|
|
233
|
+
| Metronic/jQuery guide | Low | QA team | Extract from Repo A patterns into `docs/` |
|
|
234
|
+
| Jest unit tests for CLI scripts | Low | Framework maintainer | Add `scripts/__tests__/` |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 10. Recommended Next Steps
|
|
239
|
+
|
|
240
|
+
### Immediate (Week 1)
|
|
241
|
+
|
|
242
|
+
1. **Install the package** in both source projects using `npm link` for local testing:
|
|
243
|
+
```bash
|
|
244
|
+
cd c:\Users\keber.flores\source\repos\qa-framework
|
|
245
|
+
npm link
|
|
246
|
+
cd c:\Users\keber.flores\source\repos\redacted-repo-web\qa\07-automation
|
|
247
|
+
npm link keber/qa-framework
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
2. **Run `qa-framework validate`** in Repo A:
|
|
251
|
+
```bash
|
|
252
|
+
npx keber/qa-framework validate
|
|
253
|
+
```
|
|
254
|
+
Address any reported gaps (missing `00-standards/`, etc.)
|
|
255
|
+
|
|
256
|
+
3. **Add `copilot-instructions.md`** to both repos pointing to agent instructions:
|
|
257
|
+
```markdown
|
|
258
|
+
When generating QA artifacts, follow:
|
|
259
|
+
node_modules/keber/qa-framework/agent-instructions/00-module-analysis.md
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Short-term (Month 1)
|
|
263
|
+
|
|
264
|
+
4. **Migrate Repo A** to the full framework structure using `MIGRATION-NOTES.md §Pattern A`
|
|
265
|
+
5. **Migrate Repo B** using `MIGRATION-NOTES.md §Pattern B`
|
|
266
|
+
6. **Add the 5 remaining example spec files** to `examples/module-example/suppliers/`
|
|
267
|
+
7. **Publish to internal npm registry** (or GitHub Packages)
|
|
268
|
+
|
|
269
|
+
### Medium-term (Quarter 1)
|
|
270
|
+
|
|
271
|
+
8. **Add Blazor/Radzen guide** to `docs/` (extracted from Repo B)
|
|
272
|
+
9. **Add Metronic/MVC guide** to `docs/` (extracted from Repo A)
|
|
273
|
+
10. **Set up CI** using `integrations/ado-powershell/pipelines/azure-pipeline-qa.yml`
|
|
274
|
+
11. **Version 1.1.0**: Add `--watch` validation mode and `generate spec` interactive prompts
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
*This report was generated by GitHub Copilot as the Phase 6 deliverable of the
|
|
279
|
+
`keber/qa-framework` analysis and implementation project.*
|