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,354 @@
1
+ # Qase.io REST API Reference
2
+
3
+ Base URL: `https://api.qase.io/v1`
4
+
5
+ Authentication: `Token: {QASE_API_TOKEN}` (header)
6
+
7
+ ## Projects
8
+
9
+ ### GET /project
10
+
11
+ List all projects.
12
+
13
+ **Query params:** `limit` (1–100, default 10), `offset` (default 0)
14
+
15
+ **Response 200:**
16
+ ```json
17
+ {
18
+ "status": true,
19
+ "result": {
20
+ "total": 5,
21
+ "filtered": 5,
22
+ "count": 5,
23
+ "entities": [
24
+ {
25
+ "title": "My Project",
26
+ "code": "MP",
27
+ "counts": {
28
+ "cases": 42,
29
+ "suites": 3,
30
+ "milestones": 2,
31
+ "runs": { "total": 10, "active": 1 },
32
+ "defects": { "total": 5, "open": 2 }
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ ```
39
+
40
+ ### POST /project
41
+
42
+ Create a new project.
43
+
44
+ **Request body:**
45
+ ```json
46
+ {
47
+ "title": "My Project",
48
+ "code": "MP",
49
+ "description": "Optional description"
50
+ }
51
+ ```
52
+
53
+ **Response 200:**
54
+ ```json
55
+ {
56
+ "status": true,
57
+ "result": {
58
+ "id": 1,
59
+ "code": "MP"
60
+ }
61
+ }
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Test Suites
67
+
68
+ ### GET /suite/{code}
69
+
70
+ List test suites. `{code}` = project code.
71
+
72
+ **Query params:** `limit`, `offset`, `search`
73
+
74
+ **Response 200:**
75
+ ```json
76
+ {
77
+ "status": true,
78
+ "result": {
79
+ "total": 3,
80
+ "entities": [
81
+ {
82
+ "id": 1,
83
+ "title": "Login",
84
+ "description": "Login flow tests",
85
+ "parent_id": null
86
+ }
87
+ ]
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### POST /suite/{code}
93
+
94
+ Create a test suite.
95
+
96
+ **Request body:**
97
+ ```json
98
+ {
99
+ "title": "Login",
100
+ "description": "Login flow tests",
101
+ "parent_id": null
102
+ }
103
+ ```
104
+
105
+ **Response 200:**
106
+ ```json
107
+ {
108
+ "status": true,
109
+ "result": {
110
+ "id": 1
111
+ }
112
+ }
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Test Cases
118
+
119
+ ### GET /case/{code}
120
+
121
+ List test cases. `{code}` = project code.
122
+
123
+ **Query params:** `limit`, `offset`, `suite_id`, `search`, `milestone_id`, `severity`, `priority`, `type`, `automation`
124
+
125
+ **Response 200:**
126
+ ```json
127
+ {
128
+ "status": true,
129
+ "result": {
130
+ "total": 42,
131
+ "entities": [
132
+ {
133
+ "id": 1,
134
+ "title": "Valid login",
135
+ "description": "User can login with valid credentials",
136
+ "preconditions": "User is on login page",
137
+ "postconditions": null,
138
+ "severity": 2,
139
+ "priority": 2,
140
+ "type": 1,
141
+ "automation": 1,
142
+ "suite_id": 1,
143
+ "steps": [
144
+ {
145
+ "action": "Enter valid email and password",
146
+ "expected_result": "User is logged in"
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ }
152
+ }
153
+ ```
154
+
155
+ ### POST /case/{code}
156
+
157
+ Create a test case.
158
+
159
+ **Request body:**
160
+ ```json
161
+ {
162
+ "title": "Valid login",
163
+ "description": "User can login with valid credentials",
164
+ "preconditions": "User is on login page",
165
+ "postconditions": null,
166
+ "severity": 2,
167
+ "priority": 2,
168
+ "type": 1,
169
+ "automation": 1,
170
+ "suite_id": 1,
171
+ "steps": [
172
+ {
173
+ "action": "Enter valid email and password",
174
+ "expected_result": "User is logged in"
175
+ }
176
+ ],
177
+ "tags": ["login", "smoke"]
178
+ }
179
+ ```
180
+
181
+ **Response 200:**
182
+ ```json
183
+ {
184
+ "status": true,
185
+ "result": {
186
+ "id": 1
187
+ }
188
+ }
189
+ ```
190
+
191
+ ### PATCH /case/{code}/{id}
192
+
193
+ Update a test case. `{id}` = case ID.
194
+
195
+ ---
196
+
197
+ ## Test Runs
198
+
199
+ ### GET /run/{code}
200
+
201
+ List test runs. `{code}` = project code.
202
+
203
+ **Query params:** `limit`, `offset`, `status`, `milestone_id`, `environment_id`
204
+
205
+ **Response 200:**
206
+ ```json
207
+ {
208
+ "status": true,
209
+ "result": {
210
+ "total": 10,
211
+ "entities": [
212
+ {
213
+ "id": 1,
214
+ "title": "Regression Run 2024-01-15",
215
+ "status": "active",
216
+ "is_autotest": true
217
+ }
218
+ ]
219
+ }
220
+ }
221
+ ```
222
+
223
+ ### POST /run/{code}
224
+
225
+ Create a test run.
226
+
227
+ **Request body:**
228
+ ```json
229
+ {
230
+ "title": "Regression Run 2024-01-15",
231
+ "description": "Full regression",
232
+ "include_all_cases": false,
233
+ "cases": [1, 2, 3],
234
+ "is_autotest": true,
235
+ "environment_id": 1,
236
+ "milestone_id": 1,
237
+ "tags": ["regression", "ci"]
238
+ }
239
+ ```
240
+
241
+ **Response 200:**
242
+ ```json
243
+ {
244
+ "status": true,
245
+ "result": {
246
+ "id": 1
247
+ }
248
+ }
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Test Results
254
+
255
+ ### POST /result/{code}/{id}
256
+
257
+ Create a test result. `{code}` = project code, `{id}` = run ID.
258
+
259
+ **Request body:**
260
+ ```json
261
+ {
262
+ "case_id": 1,
263
+ "status": "passed",
264
+ "time_ms": 1500,
265
+ "comment": "Optional comment",
266
+ "stacktrace": "Optional stack trace for failures",
267
+ "defect": false,
268
+ "attachments": []
269
+ }
270
+ ```
271
+
272
+ **Status values:** `passed`, `failed`, `blocked`, `skipped`, `invalid` (+ custom)
273
+
274
+ **Alternative (create case on-the-fly):**
275
+ ```json
276
+ {
277
+ "case": {
278
+ "title": "New test case title",
279
+ "suite_title": "Suite Name",
280
+ "description": "Description",
281
+ "preconditions": "Preconditions",
282
+ "severity": "major",
283
+ "priority": "high"
284
+ },
285
+ "status": "failed",
286
+ "comment": "Assertion failed",
287
+ "stacktrace": "Error: expected..."
288
+ }
289
+ ```
290
+
291
+ **Response 200:**
292
+ ```json
293
+ {
294
+ "status": true,
295
+ "result": {
296
+ "case_id": 1,
297
+ "hash": "abc123"
298
+ }
299
+ }
300
+ ```
301
+
302
+ ### POST /result/{code}/{id}/bulk
303
+
304
+ Bulk create results. Same structure with array of result objects.
305
+
306
+ ---
307
+
308
+ ## Defects
309
+
310
+ ### GET /defect/{code}
311
+
312
+ List defects. `{code}` = project code.
313
+
314
+ **Query params:** `limit`, `offset`, `status`, `milestone_id`
315
+
316
+ ### POST /defect/{code}
317
+
318
+ Create a defect.
319
+
320
+ **Request body:**
321
+ ```json
322
+ {
323
+ "title": "Login fails with special characters",
324
+ "actual_result": "Error 500",
325
+ "severity": 2,
326
+ "priority": 2,
327
+ "description": "When password contains @#$...",
328
+ "steps": ["Step 1", "Step 2"],
329
+ "attachments": []
330
+ }
331
+ ```
332
+
333
+ **Response 200:**
334
+ ```json
335
+ {
336
+ "status": true,
337
+ "result": {
338
+ "id": 1
339
+ }
340
+ }
341
+ ```
342
+
343
+ ---
344
+
345
+ ## Error Codes
346
+
347
+ | Code | Meaning |
348
+ | ---- | ------- |
349
+ | 400 | Bad Request |
350
+ | 401 | Unauthorized (invalid/missing token) |
351
+ | 403 | Forbidden (insufficient permissions) |
352
+ | 404 | Not Found |
353
+ | 422 | Unprocessable Entity (validation errors) |
354
+ | 429 | Too Many Requests (rate limit; check Retry-After) |
@@ -0,0 +1,196 @@
1
+ # CI/CD Integration with Qase.io
2
+
3
+ ## Overview
4
+
5
+ Push test execution results from CI/CD pipelines to Qase.io. Two main approaches:
6
+
7
+ 1. **qase-api reporter** — Native reporter that sends results directly to Qase during test execution
8
+ 2. **JUnit XML → Qase** — Parse JUnit XML artifacts and push via REST API (e.g., in a separate job)
9
+
10
+ ## Option 1: qase-api Reporter
11
+
12
+ ### Supported Frameworks
13
+
14
+ - **Jest** — `@qase/jest`
15
+ - **Playwright** — `@qase/playwright`
16
+ - **Cypress** — `@qase/cypress`
17
+ - **Pytest** — `qase-pytest`
18
+ - **Mocha** — `@qase/mocha`
19
+ - **PHPUnit** — `qase-phpunit`
20
+
21
+ ### Configuration
22
+
23
+ Set environment variables:
24
+
25
+ ```bash
26
+ QASE_API_TOKEN=your_api_token
27
+ QASE_PROJECT_CODE=MP
28
+ QASE_RUN_ID=123 # Optional: append to existing run
29
+ QASE_RUN_NAME="CI Run $(date +%Y-%m-%d)"
30
+ ```
31
+
32
+ ### Jest Example
33
+
34
+ ```javascript
35
+ // jest.config.js
36
+ module.exports = {
37
+ reporters: [
38
+ 'default',
39
+ ['@qase/jest', {
40
+ apiToken: process.env.QASE_API_TOKEN,
41
+ projectCode: process.env.QASE_PROJECT_CODE,
42
+ runId: process.env.QASE_RUN_ID,
43
+ runName: process.env.QASE_RUN_NAME,
44
+ logging: true
45
+ }]
46
+ ]
47
+ };
48
+ ```
49
+
50
+ ### Playwright Example
51
+
52
+ ```typescript
53
+ // playwright.config.ts
54
+ import { defineConfig } from '@playwright/test';
55
+
56
+ export default defineConfig({
57
+ reporter: [
58
+ ['html'],
59
+ ['@qase/playwright', {
60
+ apiToken: process.env.QASE_API_TOKEN,
61
+ projectCode: process.env.QASE_PROJECT_CODE,
62
+ runId: process.env.QASE_RUN_ID,
63
+ runName: process.env.QASE_RUN_NAME
64
+ }]
65
+ ]
66
+ });
67
+ ```
68
+
69
+ ### Pytest Example
70
+
71
+ ```python
72
+ # pytest.ini or pyproject.toml
73
+ [pytest]
74
+ addopts = -v --qase --qase-api-token=${QASE_API_TOKEN} --qase-project=${QASE_PROJECT_CODE} --qase-run-id=${QASE_RUN_ID}
75
+ ```
76
+
77
+ Or in `conftest.py`:
78
+
79
+ ```python
80
+ def pytest_configure(config):
81
+ config.addinivalue_line("addopts", "--qase")
82
+ config.addinivalue_line("addopts", f"--qase-api-token={os.environ.get('QASE_API_TOKEN')}")
83
+ config.addinivalue_line("addopts", f"--qase-project={os.environ.get('QASE_PROJECT_CODE')}")
84
+ ```
85
+
86
+ ### Case ID Mapping
87
+
88
+ Reporters map test names to Qase cases. Options:
89
+
90
+ - **Case ID in test name** — e.g., `C1` or `C123` prefix
91
+ - **Decorator/annotation** — `@qase.id(123)` or `@qase.id("C123")`
92
+ - **Title matching** — Match by test title (less reliable)
93
+
94
+ ---
95
+
96
+ ## Option 2: GitHub Actions + JUnit XML
97
+
98
+ Push JUnit XML results to Qase.io in a separate step.
99
+
100
+ ### Workflow Example
101
+
102
+ ```yaml
103
+ name: Tests + Qase Sync
104
+
105
+ on:
106
+ push:
107
+ branches: [main]
108
+ pull_request:
109
+ branches: [main]
110
+
111
+ jobs:
112
+ test:
113
+ runs-on: ubuntu-latest
114
+ steps:
115
+ - uses: actions/checkout@v4
116
+
117
+ - name: Setup Node
118
+ uses: actions/setup-node@v4
119
+ with:
120
+ node-version: '20'
121
+
122
+ - name: Install dependencies
123
+ run: npm ci
124
+
125
+ - name: Run tests
126
+ run: npm test -- --ci --reporters=default --reporters=jest-junit
127
+ env:
128
+ JEST_JUNIT_OUTPUT_DIR: ./test-results
129
+
130
+ - name: Upload JUnit results
131
+ uses: actions/upload-artifact@v4
132
+ with:
133
+ name: junit-results
134
+ path: test-results/
135
+
136
+ qase-push:
137
+ needs: test
138
+ runs-on: ubuntu-latest
139
+ steps:
140
+ - uses: actions/checkout@v4
141
+
142
+ - name: Download JUnit results
143
+ uses: actions/download-artifact@v4
144
+ with:
145
+ name: junit-results
146
+
147
+ - name: Push to Qase.io
148
+ uses: qase-io/qase-report-action@v1
149
+ with:
150
+ api-token: ${{ secrets.QASE_API_TOKEN }}
151
+ project-code: ${{ vars.QASE_PROJECT_CODE }}
152
+ results-path: ./
153
+ run-name: "CI Run ${{ github.run_number }}"
154
+ run-complete: true
155
+ ```
156
+
157
+ ### Alternative: Custom Script
158
+
159
+ If no ready-made action fits, use a script that:
160
+
161
+ 1. Parses JUnit XML
162
+ 2. Creates a run via `POST /run/{code}`
163
+ 3. Maps each `<testcase>` to a Qase case (by title or external ID)
164
+ 4. Posts results via `POST /result/{code}/{run_id}` or bulk endpoint
165
+
166
+ ```bash
167
+ # Example: using qase-api CLI or custom Node/Python script
168
+ npx qase-api push-results \
169
+ --token $QASE_API_TOKEN \
170
+ --project $QASE_PROJECT_CODE \
171
+ --results ./test-results/junit.xml \
172
+ --run-name "CI Run"
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Environment Variables
178
+
179
+ | Variable | Required | Description |
180
+ | -------- | -------- | ----------- |
181
+ | `QASE_API_TOKEN` | Yes | API token from app.qase.io/user/api/token |
182
+ | `QASE_PROJECT_CODE` | Yes | Project code (2–10 chars) |
183
+ | `QASE_RUN_ID` | No | Append to existing run |
184
+ | `QASE_RUN_NAME` | No | Name for new run |
185
+ | `QASE_ENVIRONMENT_ID` | No | Environment for the run |
186
+
187
+ ---
188
+
189
+ ## Best Practices
190
+
191
+ 1. **Secrets** — Store `QASE_API_TOKEN` in GitHub Secrets (or equivalent); never in code
192
+ 2. **Run naming** — Include build ID, branch, or date for traceability
193
+ 3. **Case mapping** — Use consistent test naming or `@qase.id()` for reliable mapping
194
+ 4. **Bulk results** — Use `POST /result/{code}/{id}/bulk` for large result sets
195
+ 5. **Run completion** — Call run complete endpoint when all results are posted
196
+ 6. **Retries** — Handle 429; implement exponential backoff for rate limits
@@ -0,0 +1,157 @@
1
+ # Field Mapping: Local QA Skills ↔ Qase.io
2
+
3
+ ## Test Case Fields
4
+
5
+ | Local (QA Skills) | Qase.io Field | Notes |
6
+ | ----------------- | ------------- | ----- |
7
+ | ID | — | Local identifier; use for traceability; Qase assigns its own `id` |
8
+ | Title | `title` | Required; max 255 chars |
9
+ | Description | `description` | Free text |
10
+ | Module / Component | `suite_id` or `suite_title` | Map to Qase suite |
11
+ | Preconditions | `preconditions` | Free text |
12
+ | Steps (Action \| Expected) | `steps[].action`, `steps[].expected_result` | See steps format below |
13
+ | Postconditions | `postconditions` | Free text |
14
+ | Test Data | `steps[].data` or in description | Optional |
15
+ | Traceability (Req ID) | `tags` or custom field | e.g., tag `req:REQ-FN-001` |
16
+ | Priority | `priority` | See Priority enum |
17
+ | Severity | `severity` | See Severity enum |
18
+ | Type | `type` | See Type enum |
19
+ | Automation status | `automation` | See Automation enum |
20
+
21
+ ## Steps Format
22
+
23
+ **Local (QA Skills):**
24
+ ```
25
+ | Step# | Action | Expected Result |
26
+ | 1 | Enter valid email | Email accepted |
27
+ | 2 | Enter valid password | Password accepted |
28
+ | 3 | Click Login | User is logged in |
29
+ ```
30
+
31
+ **Qase.io:**
32
+ ```json
33
+ {
34
+ "steps": [
35
+ {
36
+ "action": "Enter valid email",
37
+ "expected_result": "Email accepted"
38
+ },
39
+ {
40
+ "action": "Enter valid password",
41
+ "expected_result": "Password accepted"
42
+ },
43
+ {
44
+ "action": "Click Login",
45
+ "expected_result": "User is logged in"
46
+ }
47
+ ]
48
+ }
49
+ ```
50
+
51
+ ## Priority Enum
52
+
53
+ | Local | Qase.io (integer) | Qase.io (slug) |
54
+ | ----- | ----------------- | -------------- |
55
+ | Critical / P1 | 1 | `critical` |
56
+ | High / P2 | 2 | `high` |
57
+ | Medium / P3 | 3 | `medium` |
58
+ | Low / P4 | 4 | `low` |
59
+ | Not set | 5 | `not_set` |
60
+
61
+ ## Severity Enum
62
+
63
+ | Local | Qase.io (integer) | Qase.io (slug) |
64
+ | ----- | ----------------- | -------------- |
65
+ | Blocker | 1 | `blocker` |
66
+ | Critical | 2 | `critical` |
67
+ | Major | 3 | `major` |
68
+ | Minor | 4 | `minor` |
69
+ | Trivial | 5 | `trivial` |
70
+ | Not set | 6 | `not_set` |
71
+
72
+ ## Type Enum
73
+
74
+ | Local | Qase.io (integer) |
75
+ | ----- | ----------------- |
76
+ | functional | 1 |
77
+ | smoke | 2 |
78
+ | regression | 3 |
79
+ | security | 4 |
80
+ | usability | 5 |
81
+ | performance | 6 |
82
+ | other | 7 |
83
+
84
+ ## Automation Enum
85
+
86
+ | Local | Qase.io (integer) |
87
+ | ----- | ----------------- |
88
+ | Manual / Not automated | 0 |
89
+ | Automated | 1 |
90
+ | To be automated | 2 |
91
+
92
+ ## Test Result Status
93
+
94
+ | JUnit / Source | Qase.io `status` |
95
+ | -------------- | ---------------- |
96
+ | passed / success | `passed` |
97
+ | failed / failure | `failed` |
98
+ | skipped | `skipped` |
99
+ | error / blocked | `blocked` |
100
+ | (invalid) | `invalid` |
101
+
102
+ ## Local Test Case JSON Example
103
+
104
+ ```json
105
+ {
106
+ "id": "TC-LOGIN-001",
107
+ "title": "Valid login",
108
+ "module": "Auth",
109
+ "priority": "High",
110
+ "severity": "Major",
111
+ "type": "functional",
112
+ "automation": "Planned",
113
+ "preconditions": "User is on login page",
114
+ "steps": [
115
+ { "action": "Enter valid email", "expected": "Email accepted" },
116
+ { "action": "Enter valid password", "expected": "Password accepted" },
117
+ { "action": "Click Login", "expected": "User is logged in" }
118
+ ],
119
+ "traceability": ["REQ-FN-001"]
120
+ }
121
+ ```
122
+
123
+ ## Mapped Qase.io Payload
124
+
125
+ ```json
126
+ {
127
+ "title": "Valid login",
128
+ "description": "",
129
+ "preconditions": "User is on login page",
130
+ "suite_id": 1,
131
+ "priority": 2,
132
+ "severity": 3,
133
+ "type": 1,
134
+ "automation": 2,
135
+ "tags": ["req:REQ-FN-001", "Auth"],
136
+ "steps": [
137
+ { "action": "Enter valid email", "expected_result": "Email accepted" },
138
+ { "action": "Enter valid password", "expected_result": "Password accepted" },
139
+ { "action": "Click Login", "expected_result": "User is logged in" }
140
+ ]
141
+ }
142
+ ```
143
+
144
+ ## Custom Fields
145
+
146
+ Qase.io supports custom fields. Map local fields to `custom_field` object:
147
+
148
+ ```json
149
+ {
150
+ "custom_field": {
151
+ "1": "REQ-FN-001",
152
+ "2": "2024-Q1"
153
+ }
154
+ }
155
+ ```
156
+
157
+ Field IDs come from Qase project settings. Configure mapping per project.