qa-skills 3.0.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 +168 -0
  2. package/bin/cli.js +42 -0
  3. package/dist/agents/registry.d.ts +5 -0
  4. package/dist/agents/registry.d.ts.map +1 -0
  5. package/dist/agents/registry.js +101 -0
  6. package/dist/agents/registry.js.map +1 -0
  7. package/dist/agents/types.d.ts +9 -0
  8. package/dist/agents/types.d.ts.map +1 -0
  9. package/dist/agents/types.js +2 -0
  10. package/dist/agents/types.js.map +1 -0
  11. package/dist/dependencies.d.ts +21 -0
  12. package/dist/dependencies.d.ts.map +1 -0
  13. package/dist/dependencies.js +125 -0
  14. package/dist/dependencies.js.map +1 -0
  15. package/dist/installer.d.ts +25 -0
  16. package/dist/installer.d.ts.map +1 -0
  17. package/dist/installer.js +437 -0
  18. package/dist/installer.js.map +1 -0
  19. package/dist/scaffold.d.ts +27 -0
  20. package/dist/scaffold.d.ts.map +1 -0
  21. package/dist/scaffold.js +182 -0
  22. package/dist/scaffold.js.map +1 -0
  23. package/package.json +40 -0
  24. package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
  28. package/skills/qa-api-contract-curator/SKILL.md +104 -0
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
  31. package/skills/qa-browser-data-collector/SKILL.md +132 -0
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
  34. package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
  38. package/skills/qa-changelog-analyzer/SKILL.md +134 -0
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
  41. package/skills/qa-clickup-integration/SKILL.md +166 -0
  42. package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
  43. package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
  44. package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
  46. package/skills/qa-codeceptjs-writer/references/config.md +255 -0
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
  48. package/skills/qa-coverage-analyzer/SKILL.md +166 -0
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
  51. package/skills/qa-coverage-analyzer/references/tools.md +204 -0
  52. package/skills/qa-cypress-writer/SKILL.md +134 -0
  53. package/skills/qa-cypress-writer/references/assertions.md +121 -0
  54. package/skills/qa-cypress-writer/references/best-practices.md +82 -0
  55. package/skills/qa-cypress-writer/references/config.md +121 -0
  56. package/skills/qa-cypress-writer/references/patterns.md +170 -0
  57. package/skills/qa-data-factory/SKILL.md +126 -0
  58. package/skills/qa-data-factory/references/factory-patterns.md +164 -0
  59. package/skills/qa-data-factory/references/faker-guide.md +131 -0
  60. package/skills/qa-diagram-generator/SKILL.md +125 -0
  61. package/skills/qa-diagram-generator/references/c4-model.md +53 -0
  62. package/skills/qa-diagram-generator/references/charts.md +58 -0
  63. package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
  64. package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
  65. package/skills/qa-diagram-generator/references/flowchart.md +92 -0
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
  67. package/skills/qa-diagram-generator/references/gantt.md +49 -0
  68. package/skills/qa-diagram-generator/references/journey.md +50 -0
  69. package/skills/qa-diagram-generator/references/mindmap.md +75 -0
  70. package/skills/qa-diagram-generator/references/sequence.md +69 -0
  71. package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
  72. package/skills/qa-discovery-interview/SKILL.md +182 -0
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
  75. package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
  77. package/skills/qa-environment-checker/SKILL.md +142 -0
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
  79. package/skills/qa-environment-checker/references/health-checks.md +209 -0
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
  81. package/skills/qa-flaky-detector/SKILL.md +153 -0
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
  84. package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
  88. package/skills/qa-httpx-writer/SKILL.md +138 -0
  89. package/skills/qa-httpx-writer/references/assertions.md +195 -0
  90. package/skills/qa-httpx-writer/references/best-practices.md +140 -0
  91. package/skills/qa-httpx-writer/references/config.md +212 -0
  92. package/skills/qa-httpx-writer/references/patterns.md +262 -0
  93. package/skills/qa-jest-writer/SKILL.md +131 -0
  94. package/skills/qa-jest-writer/references/assertions.md +125 -0
  95. package/skills/qa-jest-writer/references/best-practices.md +136 -0
  96. package/skills/qa-jest-writer/references/config.md +134 -0
  97. package/skills/qa-jest-writer/references/patterns.md +172 -0
  98. package/skills/qa-jira-integration/SKILL.md +135 -0
  99. package/skills/qa-jira-integration/references/api-patterns.md +143 -0
  100. package/skills/qa-jira-integration/references/field-mapping.md +79 -0
  101. package/skills/qa-jira-integration/references/xray-integration.md +85 -0
  102. package/skills/qa-jmeter-writer/SKILL.md +171 -0
  103. package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
  104. package/skills/qa-jmeter-writer/references/config.md +204 -0
  105. package/skills/qa-jmeter-writer/references/patterns.md +242 -0
  106. package/skills/qa-junit5-writer/SKILL.md +157 -0
  107. package/skills/qa-junit5-writer/references/assertions.md +118 -0
  108. package/skills/qa-junit5-writer/references/config.md +97 -0
  109. package/skills/qa-junit5-writer/references/patterns.md +162 -0
  110. package/skills/qa-k6-writer/SKILL.md +155 -0
  111. package/skills/qa-k6-writer/references/best-practices.md +236 -0
  112. package/skills/qa-k6-writer/references/config.md +219 -0
  113. package/skills/qa-k6-writer/references/patterns.md +304 -0
  114. package/skills/qa-linear-integration/SKILL.md +137 -0
  115. package/skills/qa-linear-integration/references/api-patterns.md +249 -0
  116. package/skills/qa-linear-integration/references/field-mapping.md +121 -0
  117. package/skills/qa-locust-writer/SKILL.md +151 -0
  118. package/skills/qa-locust-writer/references/best-practices.md +126 -0
  119. package/skills/qa-locust-writer/references/config.md +170 -0
  120. package/skills/qa-locust-writer/references/patterns.md +235 -0
  121. package/skills/qa-manual-test-designer/SKILL.md +145 -0
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
  123. package/skills/qa-manual-test-designer/references/personas.md +146 -0
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
  126. package/skills/qa-mobile-test-writer/SKILL.md +144 -0
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
  128. package/skills/qa-mobile-test-writer/references/config.md +309 -0
  129. package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
  130. package/skills/qa-nfr-analyst/SKILL.md +177 -0
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
  136. package/skills/qa-orchestrator/SKILL.md +132 -0
  137. package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
  140. package/skills/qa-pact-writer/SKILL.md +133 -0
  141. package/skills/qa-pact-writer/references/best-practices.md +100 -0
  142. package/skills/qa-pact-writer/references/config.md +135 -0
  143. package/skills/qa-pact-writer/references/patterns.md +161 -0
  144. package/skills/qa-plan-creator/SKILL.md +139 -0
  145. package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
  146. package/skills/qa-plan-creator/references/migration-plan.md +44 -0
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
  148. package/skills/qa-plan-creator/references/performance-plan.md +44 -0
  149. package/skills/qa-plan-creator/references/regression-plan.md +45 -0
  150. package/skills/qa-plan-creator/references/release-plan.md +45 -0
  151. package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
  152. package/skills/qa-plan-creator/references/test-plan.md +59 -0
  153. package/skills/qa-plan-creator/references/uat-plan.md +43 -0
  154. package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
  158. package/skills/qa-playwright-py-writer/SKILL.md +156 -0
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
  160. package/skills/qa-playwright-py-writer/references/config.md +195 -0
  161. package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
  162. package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
  165. package/skills/qa-playwright-ts-writer/references/config.md +144 -0
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
  167. package/skills/qa-pytest-writer/SKILL.md +145 -0
  168. package/skills/qa-pytest-writer/references/assertions.md +149 -0
  169. package/skills/qa-pytest-writer/references/best-practices.md +97 -0
  170. package/skills/qa-pytest-writer/references/config.md +176 -0
  171. package/skills/qa-pytest-writer/references/patterns.md +251 -0
  172. package/skills/qa-qase-integration/SKILL.md +149 -0
  173. package/skills/qa-qase-integration/references/api-reference.md +354 -0
  174. package/skills/qa-qase-integration/references/ci-integration.md +196 -0
  175. package/skills/qa-qase-integration/references/field-mapping.md +157 -0
  176. package/skills/qa-requirements-generator/SKILL.md +152 -0
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
  179. package/skills/qa-rest-assured-writer/SKILL.md +137 -0
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
  181. package/skills/qa-rest-assured-writer/references/config.md +124 -0
  182. package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
  183. package/skills/qa-risk-analyzer/SKILL.md +158 -0
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
  186. package/skills/qa-robot-framework-writer/SKILL.md +147 -0
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
  188. package/skills/qa-robot-framework-writer/references/config.md +204 -0
  189. package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
  190. package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
  191. package/skills/qa-security-test-writer/SKILL.md +123 -0
  192. package/skills/qa-security-test-writer/references/best-practices.md +155 -0
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
  194. package/skills/qa-security-test-writer/references/zap-config.md +258 -0
  195. package/skills/qa-selenium-java-writer/SKILL.md +143 -0
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
  197. package/skills/qa-selenium-java-writer/references/config.md +143 -0
  198. package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
  199. package/skills/qa-selenium-py-writer/SKILL.md +150 -0
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
  201. package/skills/qa-selenium-py-writer/references/config.md +224 -0
  202. package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
  203. package/skills/qa-shortcut-integration/SKILL.md +143 -0
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
  206. package/skills/qa-spec-auditor/SKILL.md +162 -0
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
  209. package/skills/qa-spec-writer/SKILL.md +143 -0
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
  211. package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
  212. package/skills/qa-spring-test-writer/SKILL.md +170 -0
  213. package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
  214. package/skills/qa-spring-test-writer/references/config.md +179 -0
  215. package/skills/qa-spring-test-writer/references/patterns.md +235 -0
  216. package/skills/qa-supertest-writer/SKILL.md +150 -0
  217. package/skills/qa-supertest-writer/references/assertions.md +192 -0
  218. package/skills/qa-supertest-writer/references/best-practices.md +102 -0
  219. package/skills/qa-supertest-writer/references/config.md +166 -0
  220. package/skills/qa-supertest-writer/references/patterns.md +242 -0
  221. package/skills/qa-task-creator/SKILL.md +142 -0
  222. package/skills/qa-task-creator/references/linking-patterns.md +127 -0
  223. package/skills/qa-task-creator/references/task-types.md +169 -0
  224. package/skills/qa-task-creator/templates/task-template.md +24 -0
  225. package/skills/qa-test-doc-compiler/SKILL.md +114 -0
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
  228. package/skills/qa-test-healer/SKILL.md +101 -0
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
  230. package/skills/qa-test-healer/references/fix-strategies.md +177 -0
  231. package/skills/qa-test-reporter/SKILL.md +130 -0
  232. package/skills/qa-test-reporter/references/best-practices.md +162 -0
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
  234. package/skills/qa-test-reporter/references/report-formats.md +287 -0
  235. package/skills/qa-test-reviewer/SKILL.md +142 -0
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
  237. package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
  238. package/skills/qa-test-strategy/SKILL.md +133 -0
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
  240. package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
  241. package/skills/qa-test-strategy/references/testing-types.md +143 -0
  242. package/skills/qa-testcase-from-docs/SKILL.md +161 -0
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
  246. package/skills/qa-testcase-from-ui/SKILL.md +109 -0
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
  250. package/skills/qa-visual-regression-writer/SKILL.md +175 -0
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
  252. package/skills/qa-visual-regression-writer/references/config.md +220 -0
  253. package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
  254. package/skills/qa-vitest-writer/SKILL.md +141 -0
  255. package/skills/qa-vitest-writer/references/assertions.md +105 -0
  256. package/skills/qa-vitest-writer/references/best-practices.md +62 -0
  257. package/skills/qa-vitest-writer/references/config.md +127 -0
  258. package/skills/qa-vitest-writer/references/patterns.md +141 -0
  259. package/skills/qa-webdriverio-writer/SKILL.md +145 -0
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
  261. package/skills/qa-webdriverio-writer/references/config.md +240 -0
  262. package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
@@ -0,0 +1,121 @@
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'` |
@@ -0,0 +1,170 @@
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
+ ```
@@ -0,0 +1,126 @@
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 |
@@ -0,0 +1,164 @@
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
+ ```
@@ -0,0 +1,131 @@
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.