qa-skills 3.0.0 → 3.1.0

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.
Files changed (262) hide show
  1. package/README.md +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
@@ -1,121 +0,0 @@
1
- # Cypress Configuration
2
-
3
- ## cypress.config.ts
4
-
5
- ```typescript
6
- import { defineConfig } from 'cypress';
7
-
8
- export default defineConfig({
9
- e2e: {
10
- baseUrl: 'https://app.example.com',
11
- viewportWidth: 1280,
12
- viewportHeight: 720,
13
- video: true,
14
- screenshotOnRunFailure: true,
15
- retries: {
16
- runMode: 2,
17
- openMode: 0,
18
- },
19
- setupNodeEvents(on, config) {
20
- // implement node event listeners here
21
- },
22
- },
23
- component: {
24
- devServer: {
25
- framework: 'react',
26
- bundler: 'vite',
27
- },
28
- specPattern: 'src/**/*.cy.{ts,tsx}',
29
- },
30
- });
31
- ```
32
-
33
- ---
34
-
35
- ## Key Options
36
-
37
- | Option | Description | Example |
38
- |--------|-------------|---------|
39
- | `baseUrl` | Base URL for `cy.visit()` | `'https://staging.example.com'` |
40
- | `viewportWidth` / `viewportHeight` | Default viewport size | `1280`, `720` |
41
- | `video` | Record video of runs | `true` / `false` |
42
- | `screenshotOnRunFailure` | Capture screenshot on failure | `true` |
43
- | `retries` | Retry failed tests (runMode for CI, openMode for UI) | `{ runMode: 2, openMode: 0 }` |
44
- | `defaultCommandTimeout` | Timeout for commands (ms) | `4000` |
45
- | `pageLoadTimeout` | Timeout for page load (ms) | `60000` |
46
- | `requestTimeout` | Timeout for `cy.request()` (ms) | `5000` |
47
-
48
- ---
49
-
50
- ## Environment Variables
51
-
52
- ### In cypress.config.ts
53
-
54
- ```typescript
55
- export default defineConfig({
56
- env: {
57
- apiUrl: 'https://api.example.com',
58
- testUser: 'qa@example.com',
59
- },
60
- });
61
- ```
62
-
63
- ### Usage in Tests
64
-
65
- ```typescript
66
- cy.log(Cypress.env('apiUrl'));
67
- cy.request(Cypress.env('apiUrl') + '/health');
68
- ```
69
-
70
- ### Override via CLI
71
-
72
- ```bash
73
- cypress run --env apiUrl=https://staging-api.example.com
74
- ```
75
-
76
- ---
77
-
78
- ## Plugins (setupNodeEvents)
79
-
80
- ```typescript
81
- setupNodeEvents(on, config) {
82
- on('task', {
83
- log(message) {
84
- console.log(message);
85
- return null;
86
- },
87
- });
88
- return config;
89
- }
90
- ```
91
-
92
- ---
93
-
94
- ## Support Files
95
-
96
- | File | Purpose |
97
- |------|---------|
98
- | `cypress/support/e2e.ts` | Runs before every E2E spec (imports, global config) |
99
- | `cypress/support/commands.ts` | Custom commands |
100
- | `cypress/support/component.ts` | Runs before component specs |
101
-
102
- ### e2e.ts Example
103
-
104
- ```typescript
105
- import './commands';
106
-
107
- beforeEach(() => {
108
- cy.intercept('GET', '/api/config', { fixture: 'config.json' });
109
- });
110
- ```
111
-
112
- ---
113
-
114
- ## Component Testing Dev Server
115
-
116
- | Framework | Config |
117
- |-----------|--------|
118
- | React + Vite | `framework: 'react', bundler: 'vite'` |
119
- | Vue + Vite | `framework: 'vue', bundler: 'vite'` |
120
- | Angular | `framework: 'angular', bundler: '@angular-devkit/build-angular'` |
121
- | Svelte | `framework: 'svelte', bundler: 'vite'` |
@@ -1,170 +0,0 @@
1
- # Cypress Test Patterns
2
-
3
- ## E2E Flows
4
-
5
- ### Basic Page Visit and Interaction
6
-
7
- ```typescript
8
- describe('Login flow', () => {
9
- it('logs in successfully', () => {
10
- cy.visit('/login');
11
- cy.get('[data-cy="email-input"]').type('user@example.com');
12
- cy.get('[data-cy="password-input"]').type('secret');
13
- cy.get('[data-cy="submit-btn"]').click();
14
- cy.url().should('include', '/dashboard');
15
- cy.contains('Welcome').should('be.visible');
16
- });
17
- });
18
- ```
19
-
20
- ### Chained Commands and Retry-ability
21
-
22
- Cypress automatically retries commands until assertions pass or timeout:
23
-
24
- ```typescript
25
- cy.get('[data-cy="loading"]').should('not.exist');
26
- cy.get('[data-cy="results"]').should('be.visible').and('contain', 'Success');
27
- ```
28
-
29
- ### Time-Travel Debugging
30
-
31
- Use `.pause()` or Cypress UI to step through commands and inspect DOM at each step.
32
-
33
- ---
34
-
35
- ## Component Testing
36
-
37
- ### React with cy.mount()
38
-
39
- ```typescript
40
- import { mount } from 'cypress/react18';
41
- import { Button } from './Button';
42
-
43
- describe('Button', () => {
44
- it('calls onClick when clicked', () => {
45
- const onClick = cy.stub();
46
- cy.mount(<Button label="Submit" onClick={onClick} />);
47
- cy.get('[data-cy="button"]').click();
48
- cy.wrap(onClick).should('have.been.calledOnce');
49
- });
50
-
51
- it('renders with custom props', () => {
52
- cy.mount(<Button label="Save" disabled />);
53
- cy.get('[data-cy="button"]').should('be.disabled');
54
- });
55
- });
56
- ```
57
-
58
- ### Vue with cy.mount()
59
-
60
- ```typescript
61
- import { mount } from 'cypress/vue';
62
- import HelloWorld from './HelloWorld.vue';
63
-
64
- describe('HelloWorld', () => {
65
- it('emits event on click', () => {
66
- cy.mount(HelloWorld, { props: { msg: 'Hello' } });
67
- cy.get('button').click();
68
- cy.get('@emitSpy').should('have.been.calledWith', 'greet');
69
- });
70
- });
71
- ```
72
-
73
- ### Slots and Events
74
-
75
- ```typescript
76
- cy.mount(Component, {
77
- props: { title: 'Test' },
78
- slots: { default: '<span>Slot content</span>' },
79
- });
80
- ```
81
-
82
- ---
83
-
84
- ## Custom Commands
85
-
86
- ### Defining Commands (cypress/support/commands.ts)
87
-
88
- ```typescript
89
- Cypress.Commands.add('login', (email: string, password: string) => {
90
- cy.session([email, password], () => {
91
- cy.visit('/login');
92
- cy.get('[data-cy="email-input"]').type(email);
93
- cy.get('[data-cy="password-input"]').type(password);
94
- cy.get('[data-cy="submit-btn"]').click();
95
- cy.url().should('include', '/dashboard');
96
- });
97
- });
98
-
99
- Cypress.Commands.add('fillForm', (selector: string, data: Record<string, string>) => {
100
- Object.entries(data).forEach(([name, value]) => {
101
- cy.get(`${selector} [data-cy="${name}"]`).clear().type(value);
102
- });
103
- });
104
- ```
105
-
106
- ### Using Custom Commands
107
-
108
- ```typescript
109
- beforeEach(() => {
110
- cy.login('user@example.com', 'password');
111
- });
112
-
113
- it('creates a new item', () => {
114
- cy.visit('/items/new');
115
- cy.fillForm('[data-cy="item-form"]', { name: 'Item 1', description: 'Desc' });
116
- cy.get('[data-cy="save-btn"]').click();
117
- });
118
- ```
119
-
120
- ---
121
-
122
- ## Fixtures
123
-
124
- ### Loading Fixtures
125
-
126
- ```typescript
127
- cy.fixture('users.json').then((users) => {
128
- cy.get('[data-cy="user-select"]').select(users[0].name);
129
- });
130
- ```
131
-
132
- ### With cy.intercept
133
-
134
- ```typescript
135
- cy.fixture('users.json').as('users');
136
- cy.intercept('GET', '/api/users', { fixture: 'users.json' }).as('getUsers');
137
- cy.visit('/users');
138
- cy.wait('@getUsers');
139
- ```
140
-
141
- ---
142
-
143
- ## Aliases and cy.wait(@alias)
144
-
145
- ### Request Aliases
146
-
147
- ```typescript
148
- cy.intercept('POST', '/api/orders').as('createOrder');
149
- cy.get('[data-cy="checkout"]').click();
150
- cy.wait('@createOrder').its('response.statusCode').should('eq', 201);
151
- ```
152
-
153
- ### Fixture Aliases
154
-
155
- ```typescript
156
- cy.fixture('order.json').as('orderData');
157
- cy.get('@orderData').then((data) => {
158
- cy.get('[data-cy="order-id"]').type(data.id);
159
- });
160
- ```
161
-
162
- ---
163
-
164
- ## Assertions in E2E
165
-
166
- ```typescript
167
- cy.get('[data-cy="count"]').should('have.text', '5');
168
- cy.get('form').should('have.class', 'valid');
169
- cy.get('[data-cy="list"]').find('li').should('have.length', 3);
170
- ```
@@ -1,126 +0,0 @@
1
- ---
2
- name: qa-data-factory
3
- description: Generate realistic test data using fixtures, factory patterns, and faker-based seeds for consistent and reproducible test environments.
4
- output_dir: data/fixtures
5
- ---
6
-
7
- # QA Data Factory
8
-
9
- ## Purpose
10
-
11
- Generate realistic, consistent, and reproducible test data for automated and manual testing. Supports fixtures (static JSON/YAML), factory patterns (dynamic generation with overrides), faker-based seeds (realistic random data), and builder patterns (fluent API for complex objects). Produces fixtures, factory classes, seed scripts, and data cleanup utilities.
12
-
13
- ## Trigger Phrases
14
-
15
- - "Generate test data for [entity type]"
16
- - "Create fixtures for [Users/Products/Orders]"
17
- - "Factory pattern for test data"
18
- - "Faker-based seed data"
19
- - "Test data builder for [complex object]"
20
- - "Realistic test data with locale [en_US/de_DE]"
21
- - "Seed script for test database"
22
- - "Data cleanup utilities for tests"
23
-
24
- ## Data Generation Approaches
25
-
26
- | Approach | Use Case | Output |
27
- |----------|----------|--------|
28
- | **Fixtures** | Static, version-controlled data; predictable | JSON, YAML, CSV files |
29
- | **Factory pattern** | Dynamic generation with overrides; per-test customization | Factory classes (TypeScript/Python) |
30
- | **Faker-based seeds** | Realistic but random; locale-aware | Seed scripts, inline generation |
31
- | **Builder pattern** | Complex nested objects; fluent API | Builder classes |
32
-
33
- See `references/factory-patterns.md` for implementation details.
34
-
35
- ## TypeScript Tools
36
-
37
- | Tool | Purpose |
38
- |------|---------|
39
- | **@faker-js/faker** | Realistic random data (names, emails, addresses, dates) |
40
- | **fishery** | Factory pattern with sequences and traits |
41
- | **factory.ts** | TypeScript factories with associations |
42
- | **Test data builders** | Fluent API for complex objects |
43
-
44
- ## Python Tools
45
-
46
- | Tool | Purpose |
47
- |------|---------|
48
- | **Faker** | Realistic random data; locale support |
49
- | **factory_boy** | Factory pattern with sequences, subfactories |
50
- | **pytest-factoryboy** | Pytest integration; fixtures from factories |
51
- | **model_bakery** | Django model factories; minimal boilerplate |
52
-
53
- See `references/faker-guide.md` for usage patterns.
54
-
55
- ## Data Types Supported
56
-
57
- | Type | Examples | Locale-aware |
58
- |------|----------|--------------|
59
- | **Users** | name, email, username, password hash | Yes (names, formats) |
60
- | **Products** | SKU, title, price, category | Yes (currency, formats) |
61
- | **Orders** | order ID, items, totals, status | Yes (dates, currency) |
62
- | **Addresses** | street, city, postal code, country | Yes |
63
- | **Payment info** | card numbers (test), expiry, CVV | Test card patterns |
64
- | **Dates** | birthdate, created_at, expiry | Yes (formats) |
65
- | **Emails** | valid format, domain | Yes |
66
- | **Names** | first, last, full | Yes (locale-specific) |
67
-
68
- ## Output Artifacts
69
-
70
- 1. **Test data fixtures** — Static JSON/YAML/CSV for predictable scenarios
71
- 2. **Factory classes** — TypeScript or Python factories with overrides
72
- 3. **Seed scripts** — Scripts to populate test DB with faker data
73
- 4. **Data cleanup utilities** — Teardown scripts, truncate/reset helpers
74
-
75
- ## Workflow
76
-
77
- 1. **Identify data needs** — Entity types, required fields, relationships
78
- 2. **Choose approach** — Fixtures vs factory vs faker based on use case
79
- 3. **Select tools** — Match project stack (TS/Python, framework)
80
- 4. **Generate artifacts** — Fixtures, factories, seed scripts
81
- 5. **Add cleanup** — Teardown for isolation between test runs
82
-
83
- ## Scope
84
-
85
- **Can do (autonomous):**
86
- - Generate fixtures, factories, seed scripts for specified entities
87
- - Use Faker/faker-js for realistic locale-aware data
88
- - Produce TypeScript (fishery, factory.ts) and Python (factory_boy, Faker) code
89
- - Create data cleanup utilities
90
- - Reference factory-patterns and faker-guide
91
-
92
- **Cannot do (requires confirmation):**
93
- - Add new dependencies without approval
94
- - Modify production schemas or migrations
95
- - Generate data for proprietary/restricted formats
96
-
97
- **Will not do (out of scope):**
98
- - Execute seed scripts or modify databases directly
99
- - Generate production data or PII
100
- - Bypass data validation or security constraints
101
-
102
- ## References
103
-
104
- | Topic | File |
105
- |-------|------|
106
- | Factory pattern implementations (TS, Python) | `references/factory-patterns.md` |
107
- | Faker library usage for realistic data | `references/faker-guide.md` |
108
-
109
- ## Quality Checklist
110
-
111
- - [ ] Generated data matches entity schema/contract
112
- - [ ] Locale specified when names/addresses/formats matter
113
- - [ ] No real PII or production-like secrets
114
- - [ ] Fixtures are deterministic; faker seeds use configurable seed for reproducibility
115
- - [ ] Cleanup utilities included for test isolation
116
- - [ ] Factory overrides documented for common scenarios
117
-
118
- ## Troubleshooting
119
-
120
- | Symptom | Likely Cause | Fix |
121
- |---------|--------------|-----|
122
- | Data conflicts between tests | Shared state; no cleanup | Add teardown; use unique IDs/emails per test |
123
- | Unrealistic data | Default faker; wrong locale | Set locale; use appropriate faker providers |
124
- | Factory too verbose | Over-specification | Use sensible defaults; override only when needed |
125
- | Seed non-reproducible | Random seed not set | Use faker.seed(123) or equivalent |
126
- | Schema mismatch | Generated fields don't match API/DB | Align with OpenAPI/DB schema; validate output |
@@ -1,164 +0,0 @@
1
- # Factory Pattern Implementations for Test Data
2
-
3
- ## Overview
4
-
5
- Factory patterns enable dynamic generation of test data with sensible defaults and per-test overrides. This document covers TypeScript and Python implementations.
6
-
7
- ---
8
-
9
- ## TypeScript: fishery
10
-
11
- ```typescript
12
- import { Factory } from 'fishery';
13
- import type { User } from '../types';
14
-
15
- export const UserFactory = Factory.define<User>(({ sequence }) => ({
16
- id: sequence,
17
- email: `user${sequence}@example.com`,
18
- name: `User ${sequence}`,
19
- createdAt: new Date(),
20
- }));
21
-
22
- // Usage
23
- const user = UserFactory.build();
24
- const admin = UserFactory.build({ role: 'admin' });
25
- const users = UserFactory.buildList(5);
26
- ```
27
-
28
- ### Traits
29
-
30
- ```typescript
31
- export const UserFactory = Factory.define<User>(({ sequence, traits }) => ({
32
- id: sequence,
33
- email: `user${sequence}@example.com`,
34
- name: `User ${sequence}`,
35
- role: 'user',
36
- })).trait('admin', { role: 'admin' })
37
- .trait('inactive', { status: 'inactive' });
38
-
39
- // Usage
40
- const admin = UserFactory.build({}, { traits: ['admin'] });
41
- ```
42
-
43
- ---
44
-
45
- ## TypeScript: factory.ts
46
-
47
- ```typescript
48
- import { factory } from 'factory.ts';
49
- import type { Product } from '../types';
50
-
51
- export const ProductFactory = factory.make<Product>(s => ({
52
- id: s.sequence(),
53
- sku: `SKU-${s.sequence()}`,
54
- title: `Product ${s.sequence()}`,
55
- price: 9.99,
56
- inStock: true,
57
- }));
58
-
59
- // Usage
60
- const product = ProductFactory.build();
61
- const expensive = ProductFactory.build({ price: 999 });
62
- ```
63
-
64
- ---
65
-
66
- ## Python: factory_boy
67
-
68
- ```python
69
- import factory
70
- from myapp.models import User
71
-
72
- class UserFactory(factory.Factory):
73
- class Meta:
74
- model = User
75
-
76
- id = factory.Sequence(lambda n: n)
77
- email = factory.Sequence(lambda n: f'user{n}@example.com')
78
- name = factory.Sequence(lambda n: f'User {n}')
79
- role = 'user'
80
-
81
- # Usage
82
- user = UserFactory()
83
- admin = UserFactory(role='admin')
84
- users = UserFactory.create_batch(5)
85
- ```
86
-
87
- ### Subfactories and LazyAttribute
88
-
89
- ```python
90
- class OrderFactory(factory.Factory):
91
- class Meta:
92
- model = Order
93
-
94
- user = factory.SubFactory(UserFactory)
95
- total = factory.LazyAttribute(lambda o: sum(i.price for i in o.items))
96
- ```
97
-
98
- ---
99
-
100
- ## Python: pytest-factoryboy
101
-
102
- ```python
103
- # conftest.py
104
- import pytest
105
- from .factories import UserFactory
106
-
107
- @pytest.fixture
108
- def user(db):
109
- return UserFactory()
110
-
111
- @pytest.fixture
112
- def admin_user(db):
113
- return UserFactory(role='admin')
114
- ```
115
-
116
- ---
117
-
118
- ## Builder Pattern (TypeScript)
119
-
120
- ```typescript
121
- class UserBuilder {
122
- private data: Partial<User> = {};
123
-
124
- withId(id: number) {
125
- this.data.id = id;
126
- return this;
127
- }
128
- withEmail(email: string) {
129
- this.data.email = email;
130
- return this;
131
- }
132
- asAdmin() {
133
- this.data.role = 'admin';
134
- return this;
135
- }
136
- build(): User {
137
- return { id: 1, email: 'default@example.com', role: 'user', ...this.data };
138
- }
139
- }
140
-
141
- // Usage
142
- const user = new UserBuilder().withEmail('test@example.com').asAdmin().build();
143
- ```
144
-
145
- ---
146
-
147
- ## Builder Pattern (Python)
148
-
149
- ```python
150
- class UserBuilder:
151
- def __init__(self):
152
- self._data = {}
153
-
154
- def with_email(self, email: str):
155
- self._data['email'] = email
156
- return self
157
-
158
- def as_admin(self):
159
- self._data['role'] = 'admin'
160
- return self
161
-
162
- def build(self) -> dict:
163
- return {'id': 1, 'email': 'default@example.com', 'role': 'user', **self._data}
164
- ```
@@ -1,131 +0,0 @@
1
- # Faker Library Usage Guide for Realistic Test Data
2
-
3
- ## Overview
4
-
5
- Faker libraries generate realistic-looking random data for names, addresses, emails, dates, and more. Support for multiple locales ensures culturally appropriate data.
6
-
7
- ---
8
-
9
- ## TypeScript: @faker-js/faker
10
-
11
- ### Basic Usage
12
-
13
- ```typescript
14
- import { faker } from '@faker-js/faker';
15
-
16
- // Names
17
- faker.person.fullName(); // "John Doe"
18
- faker.person.firstName(); // "Jane"
19
- faker.internet.email(); // "john.doe@example.com"
20
-
21
- // Addresses
22
- faker.location.streetAddress();
23
- faker.location.city();
24
- faker.location.country();
25
-
26
- // Dates
27
- faker.date.past();
28
- faker.date.between({ from: '2020-01-01', to: '2024-12-31' });
29
- ```
30
-
31
- ### Locale
32
-
33
- ```typescript
34
- import { faker } from '@faker-js/faker/locale/de';
35
-
36
- faker.person.fullName(); // German names
37
- faker.location.city(); // German cities
38
- ```
39
-
40
- ### Reproducibility (Seed)
41
-
42
- ```typescript
43
- faker.seed(12345);
44
- const name1 = faker.person.fullName();
45
- faker.seed(12345);
46
- const name2 = faker.person.fullName();
47
- // name1 === name2
48
- ```
49
-
50
- ### Common Providers
51
-
52
- | Provider | Example |
53
- |----------|---------|
54
- | `faker.person.*` | fullName, firstName, lastName |
55
- | `faker.internet.*` | email, userName, url |
56
- | `faker.finance.*` | creditCardNumber, iban (test patterns) |
57
- | `faker.commerce.*` | productName, price, department |
58
- | `faker.string.uuid()` | UUID |
59
- | `faker.number.int({ min, max })` | Bounded integers |
60
-
61
- ---
62
-
63
- ## Python: Faker
64
-
65
- ### Basic Usage
66
-
67
- ```python
68
- from faker import Faker
69
-
70
- fake = Faker()
71
-
72
- # Names
73
- fake.name()
74
- fake.first_name()
75
- fake.last_name()
76
-
77
- # Emails and internet
78
- fake.email()
79
- fake.user_name()
80
- fake.url()
81
-
82
- # Addresses
83
- fake.street_address()
84
- fake.city()
85
- fake.country()
86
- ```
87
-
88
- ### Locale
89
-
90
- ```python
91
- fake_de = Faker('de_DE')
92
- fake_de.name() # German names
93
- fake_de.city() # German cities
94
- ```
95
-
96
- ### Reproducibility (Seed)
97
-
98
- ```python
99
- Faker.seed(12345)
100
- name1 = fake.name()
101
- Faker.seed(12345)
102
- name2 = fake.name()
103
- # name1 == name2
104
- ```
105
-
106
- ### Common Providers
107
-
108
- | Provider | Example |
109
- |----------|---------|
110
- | `fake.name()`, `fake.first_name()` | Names |
111
- | `fake.email()`, `fake.user_name()` | Internet |
112
- | `fake.street_address()`, `fake.city()` | Addresses |
113
- | `fake.credit_card_number()` | Test card numbers |
114
- | `fake.uuid4()` | UUID |
115
- | `fake.date_between()`, `fake.date_time_between()` | Dates |
116
- | `fake.random_int(min=1, max=100)` | Integers |
117
-
118
- ---
119
-
120
- ## Test Card Numbers
121
-
122
- Use provider-specific test patterns (e.g., 4111... for Visa test cards). Never use real card numbers.
123
-
124
- ---
125
-
126
- ## Best Practices
127
-
128
- 1. **Set seed** for reproducible test runs when debugging.
129
- 2. **Use locale** when testing i18n or region-specific formats.
130
- 3. **Avoid PII** — generated data should not resemble real people.
131
- 4. **Unique identifiers** — use sequences or UUIDs when uniqueness matters.