api-tests-coverage 1.0.21 → 1.0.23

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 (169) hide show
  1. package/dist/dashboard/dist/assets/_basePickBy-BKGHUeDJ.js +1 -0
  2. package/dist/dashboard/dist/assets/_basePickBy-BamgEusj.js +1 -0
  3. package/dist/dashboard/dist/assets/_baseUniq-BBhq12Ja.js +1 -0
  4. package/dist/dashboard/dist/assets/_baseUniq-CtA-DQF7.js +1 -0
  5. package/dist/dashboard/dist/assets/arc-CbXP3Mc9.js +1 -0
  6. package/dist/dashboard/dist/assets/arc-Dh-qL1ea.js +1 -0
  7. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-BxQ_anmt.js +36 -0
  8. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-n7QxasMM.js +36 -0
  9. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-Krm3lc7z.js +122 -0
  10. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-MXnGwKRn.js +122 -0
  11. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-B3yZ5P9k.js +10 -0
  12. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Cfd4OeWg.js +10 -0
  13. package/dist/dashboard/dist/assets/channel-C7QwX7U8.js +1 -0
  14. package/dist/dashboard/dist/assets/channel-a4t2URTe.js +1 -0
  15. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-Dw3El5KF.js +1 -0
  16. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-ljBQ5lHA.js +1 -0
  17. package/dist/dashboard/dist/assets/chunk-55IACEB6-Cikrdc3Q.js +1 -0
  18. package/dist/dashboard/dist/assets/chunk-55IACEB6-T8Jf00IL.js +1 -0
  19. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-DAJalKYJ.js +165 -0
  20. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-dtHgbkmj.js +165 -0
  21. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-Cv3hm2Ke.js +220 -0
  22. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-p7o_KuDF.js +220 -0
  23. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-B0wUAfQR.js +15 -0
  24. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-Ds1_OqKH.js +15 -0
  25. package/dist/dashboard/dist/assets/chunk-QN33PNHL-B6zkzIAo.js +1 -0
  26. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BTFwTEw8.js +1 -0
  27. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-C7xuA6tl.js +1 -0
  28. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-CNXHnjkC.js +1 -0
  29. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BIVywBYp.js +1 -0
  30. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-D_ea_wdP.js +1 -0
  31. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-B6SxXE6T.js +1 -0
  32. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Dkb-G0UK.js +1 -0
  33. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-B6SxXE6T.js +1 -0
  34. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Dkb-G0UK.js +1 -0
  35. package/dist/dashboard/dist/assets/clone-BSdXhKmH.js +1 -0
  36. package/dist/dashboard/dist/assets/clone-kcKg1tUH.js +1 -0
  37. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DasyAK5c.js +1 -0
  38. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DuALhY5a.js +1 -0
  39. package/dist/dashboard/dist/assets/cytoscape.esm-CyJtwmzi.js +331 -0
  40. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-m-5bs635.js +4 -0
  41. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-w6endfy9.js +4 -0
  42. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BDnUwPQC.js +24 -0
  43. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-CYFwwEdy.js +24 -0
  44. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-Cbb7ctAo.js +43 -0
  45. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-m4Fda1GA.js +43 -0
  46. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-76ascveh.js +24 -0
  47. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-BDVk4AKU.js +24 -0
  48. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-3-jAbxQ6.js +60 -0
  49. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-BQQnVF0J.js +60 -0
  50. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Cfv1hkQB.js +162 -0
  51. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-dKukiSxD.js +162 -0
  52. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-B7GZPGck.js +267 -0
  53. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-BqnazZuZ.js +267 -0
  54. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-BUFcnXCj.js +65 -0
  55. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-K8X-_4av.js +65 -0
  56. package/dist/dashboard/dist/assets/graph-CGQIvL3r.js +1 -0
  57. package/dist/dashboard/dist/assets/graph-CfuGK9GG.js +1 -0
  58. package/dist/dashboard/dist/assets/index-CadOHtae.css +1 -0
  59. package/dist/dashboard/dist/assets/index-DS-KIxwV.js +777 -0
  60. package/dist/dashboard/dist/assets/index-DwqfA4mc.js +777 -0
  61. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BdylFPLI.js +2 -0
  62. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-CaIaIUhT.js +2 -0
  63. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-BzJTBkhp.js +139 -0
  64. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-D6dwPswq.js +139 -0
  65. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-CERyhhrH.js +89 -0
  66. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-StKomgio.js +89 -0
  67. package/dist/dashboard/dist/assets/katex-O9d3_IXG.js +261 -0
  68. package/dist/dashboard/dist/assets/layout-BnsX73QS.js +1 -0
  69. package/dist/dashboard/dist/assets/layout-v7cCi3Fl.js +1 -0
  70. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BvNtTz8N.js +68 -0
  71. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-HqFRhVFX.js +68 -0
  72. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-2I2tFH0C.js +30 -0
  73. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-Cjg80C_b.js +30 -0
  74. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-PlELkdBW.js +7 -0
  75. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-YtFFUYGD.js +7 -0
  76. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-DLV2LTE5.js +64 -0
  77. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-_9eLQNcZ.js +64 -0
  78. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-C6_Urrii.js +10 -0
  79. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-DHl1Ss7O.js +10 -0
  80. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-B9p0m3Uf.js +145 -0
  81. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-D33UwAtz.js +145 -0
  82. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC--rpDODjT.js +1 -0
  83. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DSp83t9D.js +1 -0
  84. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Ca9uGk46.js +1 -0
  85. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-OTWrEpQO.js +1 -0
  86. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-BCHaGBHB.js +61 -0
  87. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-D5Bb3Jj7.js +61 -0
  88. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CKbkkwye.js +162 -0
  89. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CgiqDY8M.js +162 -0
  90. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BMvBBbeV.js +7 -0
  91. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-C_Tlzchx.js +7 -0
  92. package/dist/dashboard/dist/index.html +14 -0
  93. package/dist/dashboard/dist/reports/business-coverage.json +201 -0
  94. package/dist/dashboard/dist/reports/coverage-intelligence.json +728 -0
  95. package/dist/dashboard/dist/reports/coverage-summary.json +995 -0
  96. package/dist/dashboard/dist/reports/endpoint-coverage.json +336 -0
  97. package/dist/dashboard/dist/reports/error-coverage.json +367 -0
  98. package/dist/dashboard/dist/reports/missing-tests-recommendations.json +285 -0
  99. package/dist/dashboard/dist/reports/risk-prioritization.json +312 -0
  100. package/dist/dashboard/dist/reports/security-coverage.json +299 -0
  101. package/dist/dashboard/dist/vite.svg +1 -0
  102. package/dist/src/generation/context-builder.d.ts +6 -0
  103. package/dist/src/generation/context-builder.d.ts.map +1 -0
  104. package/dist/src/generation/context-builder.js +202 -0
  105. package/dist/src/generation/engine.d.ts +40 -0
  106. package/dist/src/generation/engine.d.ts.map +1 -0
  107. package/dist/src/generation/engine.js +378 -0
  108. package/dist/src/generation/file-router.d.ts +7 -0
  109. package/dist/src/generation/file-router.d.ts.map +1 -0
  110. package/dist/src/generation/file-router.js +79 -0
  111. package/dist/src/generation/gap-extractor.d.ts +12 -0
  112. package/dist/src/generation/gap-extractor.d.ts.map +1 -0
  113. package/dist/src/generation/gap-extractor.js +281 -0
  114. package/dist/src/generation/template-renderer.d.ts +10 -0
  115. package/dist/src/generation/template-renderer.d.ts.map +1 -0
  116. package/dist/src/generation/template-renderer.js +526 -0
  117. package/dist/src/generation/types.d.ts +73 -0
  118. package/dist/src/generation/types.d.ts.map +1 -0
  119. package/dist/src/generation/types.js +2 -0
  120. package/dist/src/index.js +154 -0
  121. package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts +21 -0
  122. package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts.map +1 -0
  123. package/dist/src/pipeline/detectors/expressMiddlewareDetector.js +201 -0
  124. package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts +23 -0
  125. package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts.map +1 -0
  126. package/dist/src/pipeline/detectors/flaskBlueprintDetector.js +263 -0
  127. package/dist/src/pipeline/detectors/springDddDetector.d.ts +23 -0
  128. package/dist/src/pipeline/detectors/springDddDetector.d.ts.map +1 -0
  129. package/dist/src/pipeline/detectors/springDddDetector.js +237 -0
  130. package/dist/src/pipeline/detectors/types.d.ts +97 -0
  131. package/dist/src/pipeline/detectors/types.d.ts.map +1 -0
  132. package/dist/src/pipeline/detectors/types.js +15 -0
  133. package/dist/src/reporting.d.ts.map +1 -1
  134. package/dist/src/reporting.js +2 -1
  135. package/dist/src/streaming/detectors/eventBridgeDetector.d.ts +5 -0
  136. package/dist/src/streaming/detectors/eventBridgeDetector.d.ts.map +1 -0
  137. package/dist/src/streaming/detectors/eventBridgeDetector.js +82 -0
  138. package/dist/src/streaming/detectors/kafkaDetector.d.ts +5 -0
  139. package/dist/src/streaming/detectors/kafkaDetector.d.ts.map +1 -0
  140. package/dist/src/streaming/detectors/kafkaDetector.js +97 -0
  141. package/dist/src/streaming/detectors/natsDetector.d.ts +5 -0
  142. package/dist/src/streaming/detectors/natsDetector.d.ts.map +1 -0
  143. package/dist/src/streaming/detectors/natsDetector.js +96 -0
  144. package/dist/src/streaming/detectors/pubsubDetector.d.ts +5 -0
  145. package/dist/src/streaming/detectors/pubsubDetector.d.ts.map +1 -0
  146. package/dist/src/streaming/detectors/pubsubDetector.js +82 -0
  147. package/dist/src/streaming/detectors/rabbitmqDetector.d.ts +5 -0
  148. package/dist/src/streaming/detectors/rabbitmqDetector.d.ts.map +1 -0
  149. package/dist/src/streaming/detectors/rabbitmqDetector.js +103 -0
  150. package/dist/src/streaming/detectors/redisPubsubDetector.d.ts +5 -0
  151. package/dist/src/streaming/detectors/redisPubsubDetector.d.ts.map +1 -0
  152. package/dist/src/streaming/detectors/redisPubsubDetector.js +81 -0
  153. package/dist/src/streaming/detectors/snsDetector.d.ts +5 -0
  154. package/dist/src/streaming/detectors/snsDetector.d.ts.map +1 -0
  155. package/dist/src/streaming/detectors/snsDetector.js +81 -0
  156. package/dist/src/streaming/detectors/sqsDetector.d.ts +5 -0
  157. package/dist/src/streaming/detectors/sqsDetector.d.ts.map +1 -0
  158. package/dist/src/streaming/detectors/sqsDetector.js +81 -0
  159. package/dist/src/streaming/eventCoverage.d.ts +46 -0
  160. package/dist/src/streaming/eventCoverage.d.ts.map +1 -0
  161. package/dist/src/streaming/eventCoverage.js +270 -0
  162. package/dist/src/streaming/types.d.ts +34 -0
  163. package/dist/src/streaming/types.d.ts.map +1 -0
  164. package/dist/src/streaming/types.js +2 -0
  165. package/dist/src/summary/markdownRenderer.d.ts.map +1 -1
  166. package/dist/src/summary/markdownRenderer.js +1 -0
  167. package/dist/src/summary/summaryTypes.d.ts.map +1 -1
  168. package/dist/src/summary/summaryTypes.js +1 -0
  169. package/package.json +1 -1
@@ -0,0 +1,995 @@
1
+ {
2
+ "generatedAt": "2026-03-13T00:00:00.000Z",
3
+ "discoveryInfo": {
4
+ "projectRoot": "/wallets-payments-api",
5
+ "languages": [
6
+ "typescript"
7
+ ],
8
+ "frameworks": [
9
+ "express",
10
+ "jest"
11
+ ],
12
+ "serviceFilesCount": 24,
13
+ "testFilesCount": 9,
14
+ "specFilesCount": 1,
15
+ "analysisMode": "full"
16
+ },
17
+ "summary": [
18
+ {
19
+ "type": "endpoint",
20
+ "totalItems": 15,
21
+ "coveredItems": 14,
22
+ "coveragePercent": 93.33
23
+ },
24
+ {
25
+ "type": "parameter",
26
+ "totalItems": 13,
27
+ "coveredItems": 10,
28
+ "coveragePercent": 76.92
29
+ },
30
+ {
31
+ "type": "business",
32
+ "totalItems": 9,
33
+ "coveredItems": 8,
34
+ "coveragePercent": 88.89
35
+ },
36
+ {
37
+ "type": "integration",
38
+ "totalItems": 5,
39
+ "coveredItems": 3,
40
+ "coveragePercent": 60.0
41
+ },
42
+ {
43
+ "type": "security",
44
+ "totalItems": 27,
45
+ "coveredItems": 7,
46
+ "coveragePercent": 25.93
47
+ },
48
+ {
49
+ "type": "error",
50
+ "totalItems": 30,
51
+ "coveredItems": 0,
52
+ "coveragePercent": 0.0
53
+ },
54
+ {
55
+ "type": "performance",
56
+ "totalItems": 6,
57
+ "coveredItems": 3,
58
+ "coveragePercent": 50.0
59
+ },
60
+ {
61
+ "type": "resilience",
62
+ "totalItems": 4,
63
+ "coveredItems": 3,
64
+ "coveragePercent": 75.0
65
+ }
66
+ ],
67
+ "details": {
68
+ "endpoint": {
69
+ "items": [
70
+ {
71
+ "id": "GET /wallets",
72
+ "covered": true,
73
+ "tests": [
74
+ "tests/blackbox/wallets.blackbox.test.ts"
75
+ ],
76
+ "evidence": {
77
+ "confidence": "high",
78
+ "detectionMode": "direct",
79
+ "matchedFrameworks": [
80
+ "typescript"
81
+ ]
82
+ }
83
+ },
84
+ {
85
+ "id": "POST /wallets",
86
+ "covered": true,
87
+ "tests": [
88
+ "tests/blackbox/wallets.blackbox.test.ts",
89
+ "tests/integration/wallets.integration.test.ts"
90
+ ],
91
+ "evidence": {
92
+ "confidence": "high",
93
+ "detectionMode": "direct",
94
+ "matchedFrameworks": [
95
+ "typescript"
96
+ ]
97
+ }
98
+ },
99
+ {
100
+ "id": "GET /wallets/{id}",
101
+ "covered": true,
102
+ "tests": [
103
+ "tests/integration/wallets.integration.test.ts"
104
+ ],
105
+ "evidence": {
106
+ "confidence": "high",
107
+ "detectionMode": "direct",
108
+ "matchedFrameworks": [
109
+ "typescript"
110
+ ]
111
+ }
112
+ },
113
+ {
114
+ "id": "DELETE /wallets/{id}",
115
+ "covered": true,
116
+ "tests": [
117
+ "tests/blackbox/wallets.blackbox.test.ts",
118
+ "tests/integration/wallets.integration.test.ts"
119
+ ],
120
+ "evidence": {
121
+ "confidence": "medium",
122
+ "detectionMode": "string-template",
123
+ "matchedFrameworks": [
124
+ "typescript"
125
+ ]
126
+ }
127
+ },
128
+ {
129
+ "id": "PATCH /wallets/{id}/freeze",
130
+ "covered": true,
131
+ "tests": [
132
+ "tests/blackbox/wallets.blackbox.test.ts",
133
+ "tests/integration/wallets.integration.test.ts"
134
+ ],
135
+ "evidence": {
136
+ "confidence": "medium",
137
+ "detectionMode": "string-template",
138
+ "matchedFrameworks": [
139
+ "typescript"
140
+ ]
141
+ }
142
+ },
143
+ {
144
+ "id": "PATCH /wallets/{id}/unfreeze",
145
+ "covered": true,
146
+ "tests": [
147
+ "tests/blackbox/wallets.blackbox.test.ts",
148
+ "tests/integration/wallets.integration.test.ts"
149
+ ],
150
+ "evidence": {
151
+ "confidence": "medium",
152
+ "detectionMode": "string-template",
153
+ "matchedFrameworks": [
154
+ "typescript"
155
+ ]
156
+ }
157
+ },
158
+ {
159
+ "id": "POST /wallets/{id}/fund",
160
+ "covered": true,
161
+ "tests": [
162
+ "tests/blackbox/wallets.blackbox.test.ts",
163
+ "tests/integration/wallets.integration.test.ts"
164
+ ],
165
+ "evidence": {
166
+ "confidence": "medium",
167
+ "detectionMode": "string-template",
168
+ "matchedFrameworks": [
169
+ "typescript"
170
+ ]
171
+ }
172
+ },
173
+ {
174
+ "id": "POST /wallets/{id}/debit",
175
+ "covered": true,
176
+ "tests": [
177
+ "tests/blackbox/wallets.blackbox.test.ts",
178
+ "tests/integration/wallets.integration.test.ts"
179
+ ],
180
+ "evidence": {
181
+ "confidence": "medium",
182
+ "detectionMode": "string-template",
183
+ "matchedFrameworks": [
184
+ "typescript"
185
+ ]
186
+ }
187
+ },
188
+ {
189
+ "id": "POST /wallets/{id}/transfer",
190
+ "covered": true,
191
+ "tests": [
192
+ "tests/blackbox/wallets.blackbox.test.ts",
193
+ "tests/integration/wallets.integration.test.ts"
194
+ ],
195
+ "evidence": {
196
+ "confidence": "medium",
197
+ "detectionMode": "string-template",
198
+ "matchedFrameworks": [
199
+ "typescript"
200
+ ]
201
+ }
202
+ },
203
+ {
204
+ "id": "POST /payments",
205
+ "covered": true,
206
+ "tests": [
207
+ "tests/blackbox/payments.blackbox.test.ts",
208
+ "tests/integration/payments.integration.test.ts"
209
+ ],
210
+ "evidence": {
211
+ "confidence": "high",
212
+ "detectionMode": "direct",
213
+ "matchedFrameworks": [
214
+ "typescript"
215
+ ]
216
+ }
217
+ },
218
+ {
219
+ "id": "GET /payments/{id}",
220
+ "covered": true,
221
+ "tests": [
222
+ "tests/integration/payments.integration.test.ts"
223
+ ],
224
+ "evidence": {
225
+ "confidence": "high",
226
+ "detectionMode": "direct",
227
+ "matchedFrameworks": [
228
+ "typescript"
229
+ ]
230
+ }
231
+ },
232
+ {
233
+ "id": "POST /payments/{id}/refund",
234
+ "covered": true,
235
+ "tests": [
236
+ "tests/blackbox/payments.blackbox.test.ts",
237
+ "tests/integration/payments.integration.test.ts"
238
+ ],
239
+ "evidence": {
240
+ "confidence": "medium",
241
+ "detectionMode": "string-template",
242
+ "matchedFrameworks": [
243
+ "typescript"
244
+ ]
245
+ }
246
+ },
247
+ {
248
+ "id": "GET /transactions",
249
+ "covered": false,
250
+ "tests": []
251
+ },
252
+ {
253
+ "id": "GET /api/users",
254
+ "covered": true,
255
+ "tests": [
256
+ "tests/integration/users.integration.test.ts"
257
+ ],
258
+ "evidence": {
259
+ "confidence": "high",
260
+ "detectionMode": "direct",
261
+ "matchedFrameworks": [
262
+ "typescript"
263
+ ]
264
+ }
265
+ },
266
+ {
267
+ "id": "GET /api/products",
268
+ "covered": true,
269
+ "tests": [
270
+ "tests/integration/products.integration.test.ts"
271
+ ],
272
+ "evidence": {
273
+ "confidence": "high",
274
+ "detectionMode": "direct",
275
+ "matchedFrameworks": [
276
+ "typescript"
277
+ ]
278
+ }
279
+ }
280
+ ]
281
+ },
282
+ "parameter": {
283
+ "items": [
284
+ {
285
+ "id": "GET /wallets:query.status",
286
+ "covered": true,
287
+ "tests": [
288
+ "tests/blackbox/wallets.blackbox.test.ts"
289
+ ]
290
+ },
291
+ {
292
+ "id": "GET /wallets:query.limit",
293
+ "covered": true,
294
+ "tests": [
295
+ "tests/blackbox/wallets.blackbox.test.ts"
296
+ ]
297
+ },
298
+ {
299
+ "id": "GET /wallets:query.page",
300
+ "covered": true,
301
+ "tests": [
302
+ "tests/blackbox/wallets.blackbox.test.ts"
303
+ ]
304
+ },
305
+ {
306
+ "id": "GET /wallets/{id}:path.id",
307
+ "covered": true,
308
+ "tests": [
309
+ "tests/integration/wallets.integration.test.ts"
310
+ ]
311
+ },
312
+ {
313
+ "id": "DELETE /wallets/{id}:path.id",
314
+ "covered": true,
315
+ "tests": [
316
+ "tests/integration/wallets.integration.test.ts"
317
+ ]
318
+ },
319
+ {
320
+ "id": "POST /wallets/{id}/fund:body.amount",
321
+ "covered": true,
322
+ "tests": [
323
+ "tests/blackbox/wallets.blackbox.test.ts"
324
+ ]
325
+ },
326
+ {
327
+ "id": "POST /wallets/{id}/fund:body.currency",
328
+ "covered": true,
329
+ "tests": [
330
+ "tests/blackbox/wallets.blackbox.test.ts"
331
+ ]
332
+ },
333
+ {
334
+ "id": "POST /wallets/{id}/debit:body.amount",
335
+ "covered": true,
336
+ "tests": [
337
+ "tests/integration/wallets.integration.test.ts"
338
+ ]
339
+ },
340
+ {
341
+ "id": "POST /wallets/{id}/transfer:body.targetWalletId",
342
+ "covered": false,
343
+ "tests": []
344
+ },
345
+ {
346
+ "id": "POST /payments:body.amount",
347
+ "covered": true,
348
+ "tests": [
349
+ "tests/blackbox/payments.blackbox.test.ts"
350
+ ]
351
+ },
352
+ {
353
+ "id": "POST /payments:body.currency",
354
+ "covered": false,
355
+ "tests": []
356
+ },
357
+ {
358
+ "id": "GET /payments/{id}:path.id",
359
+ "covered": true,
360
+ "tests": [
361
+ "tests/blackbox/payments.blackbox.test.ts"
362
+ ]
363
+ },
364
+ {
365
+ "id": "POST /payments/{id}/refund:path.id",
366
+ "covered": false,
367
+ "tests": []
368
+ }
369
+ ]
370
+ },
371
+ "business": {
372
+ "items": [
373
+ {
374
+ "id": "min-fund-amount",
375
+ "covered": true,
376
+ "tests": [
377
+ "tests/blackbox/payments.blackbox.test.ts",
378
+ "tests/blackbox/wallets.blackbox.test.ts",
379
+ "tests/integration/wallets.integration.test.ts"
380
+ ],
381
+ "description": "Minimum funding amount is $1"
382
+ },
383
+ {
384
+ "id": "insufficient-funds",
385
+ "covered": true,
386
+ "tests": [
387
+ "tests/blackbox/payments.blackbox.test.ts",
388
+ "tests/blackbox/wallets.blackbox.test.ts",
389
+ "tests/integration/wallets.integration.test.ts",
390
+ "tests/unit/riskService.test.ts",
391
+ "tests/unit/walletService.test.ts"
392
+ ],
393
+ "description": "Debit cannot exceed balance"
394
+ },
395
+ {
396
+ "id": "frozen-wallet-reject",
397
+ "covered": true,
398
+ "tests": [
399
+ "tests/blackbox/wallets.blackbox.test.ts",
400
+ "tests/integration/wallets.integration.test.ts",
401
+ "tests/unit/riskService.test.ts",
402
+ "tests/unit/walletService.test.ts"
403
+ ],
404
+ "description": "Frozen wallets reject all transactions"
405
+ },
406
+ {
407
+ "id": "daily-limit",
408
+ "covered": false,
409
+ "tests": [],
410
+ "description": "Daily transaction limit is $10,000"
411
+ },
412
+ {
413
+ "id": "transfer-same-currency",
414
+ "covered": true,
415
+ "tests": [
416
+ "tests/blackbox/payments.blackbox.test.ts",
417
+ "tests/blackbox/wallets.blackbox.test.ts",
418
+ "tests/integration/wallets.integration.test.ts"
419
+ ],
420
+ "description": "Transfer requires matching currencies"
421
+ },
422
+ {
423
+ "id": "refund-window",
424
+ "covered": true,
425
+ "tests": [
426
+ "tests/blackbox/payments.blackbox.test.ts",
427
+ "tests/blackbox/wallets.blackbox.test.ts",
428
+ "tests/integration/payments.integration.test.ts",
429
+ "tests/integration/wallets.integration.test.ts"
430
+ ],
431
+ "description": "Refund allowed only within 30 days"
432
+ },
433
+ {
434
+ "id": "fraud-check",
435
+ "covered": true,
436
+ "tests": [
437
+ "tests/unit/paymentService.test.ts",
438
+ "tests/wiremock/fraudEngine.wiremock.test.ts"
439
+ ],
440
+ "description": "Payments require fraud check approval"
441
+ },
442
+ {
443
+ "id": "idempotency",
444
+ "covered": true,
445
+ "tests": [
446
+ "tests/blackbox/payments.blackbox.test.ts",
447
+ "tests/integration/payments.integration.test.ts"
448
+ ],
449
+ "description": "Duplicate requests with same key return same result"
450
+ },
451
+ {
452
+ "id": "unique email",
453
+ "covered": true,
454
+ "tests": [
455
+ "tests/integration/users.integration.test.ts"
456
+ ],
457
+ "description": "Unique email required for all user accounts"
458
+ }
459
+ ]
460
+ },
461
+ "integration": {
462
+ "items": [
463
+ {
464
+ "id": "User Registration to First Payment Flow",
465
+ "covered": true,
466
+ "tests": [
467
+ "tests/integration/wallets.integration.test.ts",
468
+ "tests/blackbox/payments.blackbox.test.ts"
469
+ ],
470
+ "flowName": "User Registration to First Payment Flow",
471
+ "steps": 4,
472
+ "coveredSteps": 4
473
+ },
474
+ {
475
+ "id": "Wallet Fund and Transfer Flow",
476
+ "covered": true,
477
+ "tests": [
478
+ "tests/integration/wallets.integration.test.ts"
479
+ ],
480
+ "flowName": "Wallet Fund and Transfer Flow",
481
+ "steps": 3,
482
+ "coveredSteps": 3
483
+ },
484
+ {
485
+ "id": "Payment Refund Lifecycle",
486
+ "covered": false,
487
+ "tests": [],
488
+ "flowName": "Payment Refund Lifecycle",
489
+ "steps": 3,
490
+ "coveredSteps": 0
491
+ },
492
+ {
493
+ "id": "Fraud Detection Flow",
494
+ "covered": true,
495
+ "tests": [
496
+ "tests/unit/riskService.test.ts"
497
+ ],
498
+ "flowName": "Fraud Detection Flow",
499
+ "steps": 5,
500
+ "coveredSteps": 4
501
+ },
502
+ {
503
+ "id": "Wallet Freeze and Unfreeze Flow",
504
+ "covered": false,
505
+ "tests": [],
506
+ "flowName": "Wallet Freeze and Unfreeze Flow",
507
+ "steps": 2,
508
+ "coveredSteps": 0
509
+ }
510
+ ]
511
+ },
512
+ "security": {
513
+ "items": [
514
+ {
515
+ "id": "authentication:bearerAuth",
516
+ "covered": true,
517
+ "tests": [
518
+ "returns 401 when no token",
519
+ "returns 401 when no token provided",
520
+ "returns 401 for invalid token",
521
+ "returns 401 without auth"
522
+ ],
523
+ "category": "authentication",
524
+ "description": "Authentication via security scheme \"bearerAuth\" (http/bearer)"
525
+ },
526
+ {
527
+ "id": "cryptography:https",
528
+ "covered": false,
529
+ "tests": [],
530
+ "category": "cryptography",
531
+ "description": "API servers include non-HTTPS URLs \u2013 cryptographic transport security may be missing"
532
+ },
533
+ {
534
+ "id": "authorization:get:/wallets",
535
+ "covered": false,
536
+ "tests": [],
537
+ "category": "authorization",
538
+ "description": "Authorization check for GET /wallets"
539
+ },
540
+ {
541
+ "id": "authorization:post:/wallets",
542
+ "covered": false,
543
+ "tests": [],
544
+ "category": "authorization",
545
+ "description": "Authorization check for POST /wallets"
546
+ },
547
+ {
548
+ "id": "input-validation:post:/wallets",
549
+ "covered": true,
550
+ "tests": [
551
+ "returns 400 when currency is missing",
552
+ "returns 400 for unsupported currency",
553
+ "returns 422 for insufficient funds",
554
+ "returns 401 for invalid token",
555
+ "returns 400 for invalid currency",
556
+ "returns 422 with insufficient funds"
557
+ ],
558
+ "category": "input-validation",
559
+ "description": "Input validation for POST /wallets"
560
+ },
561
+ {
562
+ "id": "authorization:get:/wallets/{id}",
563
+ "covered": false,
564
+ "tests": [],
565
+ "category": "authorization",
566
+ "description": "Authorization check for GET /wallets/{id}"
567
+ },
568
+ {
569
+ "id": "input-validation:get:/wallets/{id}",
570
+ "covered": true,
571
+ "tests": [
572
+ "returns 422 for insufficient funds",
573
+ "returns 400 for invalid currency",
574
+ "returns 422 with insufficient funds"
575
+ ],
576
+ "category": "input-validation",
577
+ "description": "Input validation for GET /wallets/{id}"
578
+ },
579
+ {
580
+ "id": "authorization:delete:/wallets/{id}",
581
+ "covered": false,
582
+ "tests": [],
583
+ "category": "authorization",
584
+ "description": "Authorization check for DELETE /wallets/{id}"
585
+ },
586
+ {
587
+ "id": "input-validation:delete:/wallets/{id}",
588
+ "covered": true,
589
+ "tests": [
590
+ "returns 422 for insufficient funds",
591
+ "returns 400 for invalid currency",
592
+ "returns 422 with insufficient funds"
593
+ ],
594
+ "category": "input-validation",
595
+ "description": "Input validation for DELETE /wallets/{id}"
596
+ },
597
+ {
598
+ "id": "authorization:patch:/wallets/{id}/freeze",
599
+ "covered": false,
600
+ "tests": [],
601
+ "category": "authorization",
602
+ "description": "Authorization check for PATCH /wallets/{id}/freeze"
603
+ },
604
+ {
605
+ "id": "input-validation:patch:/wallets/{id}/freeze",
606
+ "covered": false,
607
+ "tests": [],
608
+ "category": "input-validation",
609
+ "description": "Input validation for PATCH /wallets/{id}/freeze"
610
+ },
611
+ {
612
+ "id": "authorization:patch:/wallets/{id}/unfreeze",
613
+ "covered": false,
614
+ "tests": [],
615
+ "category": "authorization",
616
+ "description": "Authorization check for PATCH /wallets/{id}/unfreeze"
617
+ },
618
+ {
619
+ "id": "input-validation:patch:/wallets/{id}/unfreeze",
620
+ "covered": false,
621
+ "tests": [],
622
+ "category": "input-validation",
623
+ "description": "Input validation for PATCH /wallets/{id}/unfreeze"
624
+ },
625
+ {
626
+ "id": "authorization:post:/wallets/{id}/fund",
627
+ "covered": false,
628
+ "tests": [],
629
+ "category": "authorization",
630
+ "description": "Authorization check for POST /wallets/{id}/fund"
631
+ },
632
+ {
633
+ "id": "input-validation:post:/wallets/{id}/fund",
634
+ "covered": false,
635
+ "tests": [],
636
+ "category": "input-validation",
637
+ "description": "Input validation for POST /wallets/{id}/fund"
638
+ },
639
+ {
640
+ "id": "authorization:post:/wallets/{id}/debit",
641
+ "covered": false,
642
+ "tests": [],
643
+ "category": "authorization",
644
+ "description": "Authorization check for POST /wallets/{id}/debit"
645
+ },
646
+ {
647
+ "id": "input-validation:post:/wallets/{id}/debit",
648
+ "covered": false,
649
+ "tests": [],
650
+ "category": "input-validation",
651
+ "description": "Input validation for POST /wallets/{id}/debit"
652
+ },
653
+ {
654
+ "id": "authorization:post:/wallets/{id}/transfer",
655
+ "covered": false,
656
+ "tests": [],
657
+ "category": "authorization",
658
+ "description": "Authorization check for POST /wallets/{id}/transfer"
659
+ },
660
+ {
661
+ "id": "input-validation:post:/wallets/{id}/transfer",
662
+ "covered": false,
663
+ "tests": [],
664
+ "category": "input-validation",
665
+ "description": "Input validation for POST /wallets/{id}/transfer"
666
+ },
667
+ {
668
+ "id": "authorization:post:/payments",
669
+ "covered": false,
670
+ "tests": [],
671
+ "category": "authorization",
672
+ "description": "Authorization check for POST /payments"
673
+ },
674
+ {
675
+ "id": "input-validation:post:/payments",
676
+ "covered": true,
677
+ "tests": [
678
+ "returns 400 for missing required fields",
679
+ "returns 422 for invalid (non-existent) wallet",
680
+ "returns 422 when refunding a non-completed payment"
681
+ ],
682
+ "category": "input-validation",
683
+ "description": "Input validation for POST /payments"
684
+ },
685
+ {
686
+ "id": "authorization:get:/payments/{id}",
687
+ "covered": false,
688
+ "tests": [],
689
+ "category": "authorization",
690
+ "description": "Authorization check for GET /payments/{id}"
691
+ },
692
+ {
693
+ "id": "input-validation:get:/payments/{id}",
694
+ "covered": true,
695
+ "tests": [
696
+ "returns 422 when refunding a non-completed payment"
697
+ ],
698
+ "category": "input-validation",
699
+ "description": "Input validation for GET /payments/{id}"
700
+ },
701
+ {
702
+ "id": "authorization:post:/payments/{id}/refund",
703
+ "covered": false,
704
+ "tests": [],
705
+ "category": "authorization",
706
+ "description": "Authorization check for POST /payments/{id}/refund"
707
+ },
708
+ {
709
+ "id": "input-validation:post:/payments/{id}/refund",
710
+ "covered": false,
711
+ "tests": [],
712
+ "category": "input-validation",
713
+ "description": "Input validation for POST /payments/{id}/refund"
714
+ },
715
+ {
716
+ "id": "authorization:get:/transactions",
717
+ "covered": false,
718
+ "tests": [],
719
+ "category": "authorization",
720
+ "description": "Authorization check for GET /transactions"
721
+ },
722
+ {
723
+ "id": "authentication:JWT",
724
+ "covered": true,
725
+ "tests": [
726
+ "returns 401 for expired JWT",
727
+ "returns 401 for invalid JWT signature"
728
+ ],
729
+ "category": "authentication",
730
+ "description": "JWT token signature and expiry validation"
731
+ }
732
+ ]
733
+ },
734
+ "error": {
735
+ "items": [
736
+ {
737
+ "id": "GET /wallets:401",
738
+ "covered": false,
739
+ "tests": [],
740
+ "description": "Unauthorized"
741
+ },
742
+ {
743
+ "id": "POST /wallets:400",
744
+ "covered": false,
745
+ "tests": [],
746
+ "description": "Invalid input"
747
+ },
748
+ {
749
+ "id": "POST /wallets:401",
750
+ "covered": false,
751
+ "tests": [],
752
+ "description": "Unauthorized"
753
+ },
754
+ {
755
+ "id": "GET /wallets/{id}:401",
756
+ "covered": false,
757
+ "tests": [],
758
+ "description": "Unauthorized"
759
+ },
760
+ {
761
+ "id": "GET /wallets/{id}:404",
762
+ "covered": false,
763
+ "tests": [],
764
+ "description": "Not found"
765
+ },
766
+ {
767
+ "id": "DELETE /wallets/{id}:401",
768
+ "covered": false,
769
+ "tests": [],
770
+ "description": "Unauthorized"
771
+ },
772
+ {
773
+ "id": "DELETE /wallets/{id}:404",
774
+ "covered": false,
775
+ "tests": [],
776
+ "description": "Not found"
777
+ },
778
+ {
779
+ "id": "PATCH /wallets/{id}/freeze:401",
780
+ "covered": false,
781
+ "tests": [],
782
+ "description": "Unauthorized"
783
+ },
784
+ {
785
+ "id": "PATCH /wallets/{id}/freeze:404",
786
+ "covered": false,
787
+ "tests": [],
788
+ "description": "Not found"
789
+ },
790
+ {
791
+ "id": "PATCH /wallets/{id}/freeze:422",
792
+ "covered": false,
793
+ "tests": [],
794
+ "description": "Unprocessable"
795
+ },
796
+ {
797
+ "id": "PATCH /wallets/{id}/unfreeze:401",
798
+ "covered": false,
799
+ "tests": [],
800
+ "description": "Unauthorized"
801
+ },
802
+ {
803
+ "id": "PATCH /wallets/{id}/unfreeze:404",
804
+ "covered": false,
805
+ "tests": [],
806
+ "description": "Not found"
807
+ },
808
+ {
809
+ "id": "PATCH /wallets/{id}/unfreeze:422",
810
+ "covered": false,
811
+ "tests": [],
812
+ "description": "Unprocessable"
813
+ },
814
+ {
815
+ "id": "POST /wallets/{id}/fund:401",
816
+ "covered": false,
817
+ "tests": [],
818
+ "description": "Unauthorized"
819
+ },
820
+ {
821
+ "id": "POST /wallets/{id}/fund:404",
822
+ "covered": false,
823
+ "tests": [],
824
+ "description": "Not found"
825
+ },
826
+ {
827
+ "id": "POST /wallets/{id}/fund:422",
828
+ "covered": false,
829
+ "tests": [],
830
+ "description": "Business rule violation"
831
+ },
832
+ {
833
+ "id": "POST /wallets/{id}/debit:401",
834
+ "covered": false,
835
+ "tests": [],
836
+ "description": "Unauthorized"
837
+ },
838
+ {
839
+ "id": "POST /wallets/{id}/debit:404",
840
+ "covered": false,
841
+ "tests": [],
842
+ "description": "Not found"
843
+ },
844
+ {
845
+ "id": "POST /wallets/{id}/debit:422",
846
+ "covered": false,
847
+ "tests": [],
848
+ "description": "Business rule violation"
849
+ },
850
+ {
851
+ "id": "POST /wallets/{id}/transfer:401",
852
+ "covered": false,
853
+ "tests": [],
854
+ "description": "Unauthorized"
855
+ },
856
+ {
857
+ "id": "POST /wallets/{id}/transfer:404",
858
+ "covered": false,
859
+ "tests": [],
860
+ "description": "Not found"
861
+ },
862
+ {
863
+ "id": "POST /wallets/{id}/transfer:422",
864
+ "covered": false,
865
+ "tests": [],
866
+ "description": "Business rule violation"
867
+ },
868
+ {
869
+ "id": "POST /payments:401",
870
+ "covered": false,
871
+ "tests": [],
872
+ "description": "Unauthorized"
873
+ },
874
+ {
875
+ "id": "POST /payments:422",
876
+ "covered": false,
877
+ "tests": [],
878
+ "description": "Business rule violation"
879
+ },
880
+ {
881
+ "id": "GET /payments/{id}:401",
882
+ "covered": false,
883
+ "tests": [],
884
+ "description": "Unauthorized"
885
+ },
886
+ {
887
+ "id": "GET /payments/{id}:404",
888
+ "covered": false,
889
+ "tests": [],
890
+ "description": "Not found"
891
+ },
892
+ {
893
+ "id": "POST /payments/{id}/refund:401",
894
+ "covered": false,
895
+ "tests": [],
896
+ "description": "Unauthorized"
897
+ },
898
+ {
899
+ "id": "POST /payments/{id}/refund:404",
900
+ "covered": false,
901
+ "tests": [],
902
+ "description": "Not found"
903
+ },
904
+ {
905
+ "id": "POST /payments/{id}/refund:422",
906
+ "covered": false,
907
+ "tests": [],
908
+ "description": "Cannot refund"
909
+ },
910
+ {
911
+ "id": "GET /transactions:401",
912
+ "covered": false,
913
+ "tests": [],
914
+ "description": "Unauthorized"
915
+ }
916
+ ]
917
+ },
918
+ "performance": {
919
+ "items": [
920
+ {
921
+ "id": "GET /wallets response time 200ms",
922
+ "covered": true,
923
+ "tests": [
924
+ "tests/blackbox/wallets.blackbox.test.ts"
925
+ ],
926
+ "threshold": "200ms"
927
+ },
928
+ {
929
+ "id": "POST /wallets creation time",
930
+ "covered": true,
931
+ "tests": [
932
+ "tests/blackbox/wallets.blackbox.test.ts"
933
+ ],
934
+ "threshold": "500ms"
935
+ },
936
+ {
937
+ "id": "POST /payments processing time",
938
+ "covered": false,
939
+ "tests": [],
940
+ "threshold": "1000ms"
941
+ },
942
+ {
943
+ "id": "GET /transactions query time",
944
+ "covered": false,
945
+ "tests": [],
946
+ "threshold": "300ms"
947
+ },
948
+ {
949
+ "id": "POST /wallets/{id}/fund throughput",
950
+ "covered": true,
951
+ "tests": [
952
+ "tests/integration/wallets.integration.test.ts"
953
+ ],
954
+ "threshold": "100rps"
955
+ },
956
+ {
957
+ "id": "POST /wallets/{id}/debit concurrency",
958
+ "covered": false,
959
+ "tests": [],
960
+ "threshold": "50rps"
961
+ }
962
+ ]
963
+ },
964
+ "resilience": {
965
+ "items": [
966
+ {
967
+ "id": "Wallet service circuit breaker",
968
+ "covered": true,
969
+ "tests": [
970
+ "tests/unit/walletService.test.ts"
971
+ ]
972
+ },
973
+ {
974
+ "id": "Payment service retry logic",
975
+ "covered": true,
976
+ "tests": [
977
+ "tests/unit/riskService.test.ts"
978
+ ]
979
+ },
980
+ {
981
+ "id": "Database connection timeout handling",
982
+ "covered": false,
983
+ "tests": []
984
+ },
985
+ {
986
+ "id": "External API failure fallback",
987
+ "covered": true,
988
+ "tests": [
989
+ "tests/unit/riskService.test.ts"
990
+ ]
991
+ }
992
+ ]
993
+ }
994
+ }
995
+ }