@atlashub/smartstack-cli 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/.documentation/agents.html +912 -0
  2. package/.documentation/apex.html +1014 -0
  3. package/.documentation/business-analyse.html +1074 -0
  4. package/.documentation/commands.html +676 -0
  5. package/.documentation/css/styles.css +2030 -0
  6. package/.documentation/efcore.html +2501 -0
  7. package/.documentation/gitflow.html +2053 -0
  8. package/.documentation/hooks.html +409 -0
  9. package/.documentation/index.html +319 -0
  10. package/.documentation/installation.html +458 -0
  11. package/.documentation/js/app.js +794 -0
  12. package/.documentation/test-web.html +509 -0
  13. package/README.md +90 -0
  14. package/config/default-config.json +86 -0
  15. package/config/settings.json +53 -0
  16. package/config/settings.local.example.json +16 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +38198 -0
  19. package/dist/index.js.map +1 -0
  20. package/package.json +86 -0
  21. package/templates/agents/action.md +36 -0
  22. package/templates/agents/efcore/conflicts.md +57 -0
  23. package/templates/agents/efcore/db-deploy.md +51 -0
  24. package/templates/agents/efcore/db-reset.md +59 -0
  25. package/templates/agents/efcore/db-seed.md +56 -0
  26. package/templates/agents/efcore/db-status.md +43 -0
  27. package/templates/agents/efcore/migration.md +85 -0
  28. package/templates/agents/efcore/rebase-snapshot.md +62 -0
  29. package/templates/agents/efcore/scan.md +60 -0
  30. package/templates/agents/efcore/squash.md +67 -0
  31. package/templates/agents/explore-codebase.md +65 -0
  32. package/templates/agents/explore-docs.md +97 -0
  33. package/templates/agents/fix-grammar.md +49 -0
  34. package/templates/agents/gitflow/abort.md +45 -0
  35. package/templates/agents/gitflow/cleanup.md +85 -0
  36. package/templates/agents/gitflow/commit.md +40 -0
  37. package/templates/agents/gitflow/exec.md +48 -0
  38. package/templates/agents/gitflow/finish.md +92 -0
  39. package/templates/agents/gitflow/init.md +139 -0
  40. package/templates/agents/gitflow/merge.md +62 -0
  41. package/templates/agents/gitflow/plan.md +42 -0
  42. package/templates/agents/gitflow/pr.md +78 -0
  43. package/templates/agents/gitflow/review.md +49 -0
  44. package/templates/agents/gitflow/start.md +61 -0
  45. package/templates/agents/gitflow/status.md +32 -0
  46. package/templates/agents/snipper.md +36 -0
  47. package/templates/agents/websearch.md +46 -0
  48. package/templates/commands/_resources/formatting-guide.md +124 -0
  49. package/templates/commands/ai-prompt.md +315 -0
  50. package/templates/commands/apex/1-analyze.md +100 -0
  51. package/templates/commands/apex/2-plan.md +145 -0
  52. package/templates/commands/apex/3-execute.md +171 -0
  53. package/templates/commands/apex/4-examine.md +116 -0
  54. package/templates/commands/apex/5-tasks.md +209 -0
  55. package/templates/commands/apex.md +76 -0
  56. package/templates/commands/application/create.md +362 -0
  57. package/templates/commands/application/templates-backend.md +463 -0
  58. package/templates/commands/application/templates-frontend.md +517 -0
  59. package/templates/commands/application/templates-i18n.md +478 -0
  60. package/templates/commands/application/templates-seed.md +362 -0
  61. package/templates/commands/application.md +303 -0
  62. package/templates/commands/business-analyse/1-init.md +269 -0
  63. package/templates/commands/business-analyse/2-discover.md +520 -0
  64. package/templates/commands/business-analyse/3-analyse.md +408 -0
  65. package/templates/commands/business-analyse/4-specify.md +598 -0
  66. package/templates/commands/business-analyse/5-validate.md +326 -0
  67. package/templates/commands/business-analyse/6-handoff.md +746 -0
  68. package/templates/commands/business-analyse/7-doc-html.md +602 -0
  69. package/templates/commands/business-analyse/bug.md +325 -0
  70. package/templates/commands/business-analyse/change-request.md +368 -0
  71. package/templates/commands/business-analyse/hotfix.md +200 -0
  72. package/templates/commands/business-analyse.md +559 -0
  73. package/templates/commands/controller/create.md +216 -0
  74. package/templates/commands/controller/postman-templates.md +528 -0
  75. package/templates/commands/controller/templates.md +600 -0
  76. package/templates/commands/controller.md +278 -0
  77. package/templates/commands/debug.md +95 -0
  78. package/templates/commands/documentation/module.md +202 -0
  79. package/templates/commands/documentation/templates.md +432 -0
  80. package/templates/commands/documentation.md +190 -0
  81. package/templates/commands/efcore/_env-check.md +153 -0
  82. package/templates/commands/efcore/conflicts.md +269 -0
  83. package/templates/commands/efcore/db-deploy.md +193 -0
  84. package/templates/commands/efcore/db-reset.md +426 -0
  85. package/templates/commands/efcore/db-seed.md +326 -0
  86. package/templates/commands/efcore/db-status.md +214 -0
  87. package/templates/commands/efcore/migration.md +388 -0
  88. package/templates/commands/efcore/rebase-snapshot.md +264 -0
  89. package/templates/commands/efcore/scan.md +202 -0
  90. package/templates/commands/efcore/squash.md +298 -0
  91. package/templates/commands/efcore.md +176 -0
  92. package/templates/commands/epct.md +69 -0
  93. package/templates/commands/explain.md +186 -0
  94. package/templates/commands/explore.md +45 -0
  95. package/templates/commands/feature-full.md +267 -0
  96. package/templates/commands/gitflow/1-init.md +1038 -0
  97. package/templates/commands/gitflow/10-start.md +768 -0
  98. package/templates/commands/gitflow/11-finish.md +323 -0
  99. package/templates/commands/gitflow/12-cleanup.md +276 -0
  100. package/templates/commands/gitflow/13-sync.md +216 -0
  101. package/templates/commands/gitflow/14-rebase.md +251 -0
  102. package/templates/commands/gitflow/2-status.md +167 -0
  103. package/templates/commands/gitflow/3-commit.md +194 -0
  104. package/templates/commands/gitflow/4-plan.md +145 -0
  105. package/templates/commands/gitflow/5-exec.md +147 -0
  106. package/templates/commands/gitflow/6-abort.md +344 -0
  107. package/templates/commands/gitflow/7-pull-request.md +226 -0
  108. package/templates/commands/gitflow/8-review.md +176 -0
  109. package/templates/commands/gitflow/9-merge.md +224 -0
  110. package/templates/commands/gitflow.md +128 -0
  111. package/templates/commands/implement.md +663 -0
  112. package/templates/commands/notification.md +129 -0
  113. package/templates/commands/oneshot.md +57 -0
  114. package/templates/commands/quick-search.md +72 -0
  115. package/templates/commands/review.md +106 -0
  116. package/templates/commands/utils/test-web-config.md +160 -0
  117. package/templates/commands/utils/test-web.md +151 -0
  118. package/templates/commands/workflow.md +193 -0
  119. package/templates/gitflow/config.json +138 -0
  120. package/templates/hooks/ef-migration-check.md +139 -0
  121. package/templates/hooks/hooks.json +15 -0
  122. package/templates/skills/ai-prompt/SKILL.md +778 -0
  123. package/templates/skills/application/SKILL.md +563 -0
  124. package/templates/skills/application/templates-backend.md +450 -0
  125. package/templates/skills/application/templates-frontend.md +531 -0
  126. package/templates/skills/application/templates-i18n.md +520 -0
  127. package/templates/skills/application/templates-seed.md +647 -0
  128. package/templates/skills/business-analyse/SKILL.md +191 -0
  129. package/templates/skills/business-analyse/questionnaire.md +283 -0
  130. package/templates/skills/business-analyse/templates-frd.md +477 -0
  131. package/templates/skills/business-analyse/templates-react.md +580 -0
  132. package/templates/skills/controller/SKILL.md +240 -0
  133. package/templates/skills/controller/postman-templates.md +614 -0
  134. package/templates/skills/controller/templates.md +1468 -0
  135. package/templates/skills/documentation/SKILL.md +133 -0
  136. package/templates/skills/documentation/templates.md +476 -0
  137. package/templates/skills/feature-full/SKILL.md +838 -0
  138. package/templates/skills/notification/SKILL.md +555 -0
  139. package/templates/skills/ui-components/SKILL.md +870 -0
  140. package/templates/skills/workflow/SKILL.md +582 -0
  141. package/templates/test-web/api-health.json +38 -0
  142. package/templates/test-web/minimal.json +19 -0
  143. package/templates/test-web/npm-package.json +46 -0
  144. package/templates/test-web/seo-check.json +54 -0
@@ -0,0 +1,528 @@
1
+ # Templates Postman SmartStack
2
+
3
+ > **Note:** Ces templates sont utilisés pour générer automatiquement les tests Postman
4
+ > après la création d'un controller.
5
+
6
+ ---
7
+
8
+ ## Structure Collection Postman
9
+
10
+ ```json
11
+ {
12
+ "name": "{Module} API",
13
+ "item": [
14
+ // Tests GET list
15
+ // Tests GET single
16
+ // Tests POST create
17
+ // Tests PUT update
18
+ // Tests PATCH activate/deactivate
19
+ // Tests DELETE
20
+ ]
21
+ }
22
+ ```
23
+
24
+ ---
25
+
26
+ ## Users de Test Disponibles
27
+
28
+ | User | Email | Password | Permissions |
29
+ |------|-------|----------|-------------|
30
+ | SuperAdmin | `superadmin@smartstack.test` | `SuperAdmin123!` | `*` (toutes) |
31
+ | PlatformAdmin | `platformadmin@smartstack.test` | `PlatformAdmin123!` | `platform.administration.*` |
32
+ | User | `user@smartstack.test` | `User123!` | Standard |
33
+ | ReadOnly | `readonly@smartstack.test` | `ReadOnly123!` | `*.read` uniquement |
34
+ | NoPerm | `noperm@smartstack.test` | `NoPerm123!` | Aucune |
35
+ | Inactive | `inactive@smartstack.test` | `Inactive123!` | Compte désactivé |
36
+
37
+ ---
38
+
39
+ ## Template Test GET List (200)
40
+
41
+ ```json
42
+ {
43
+ "name": "GET {module} - With SuperAdmin Token (200)",
44
+ "event": [
45
+ {
46
+ "listen": "prerequest",
47
+ "script": {
48
+ "exec": [
49
+ "const baseUrl = pm.collectionVariables.get('baseUrl');",
50
+ "",
51
+ "pm.sendRequest({",
52
+ " url: baseUrl + '/api/auth/login',",
53
+ " method: 'POST',",
54
+ " header: { 'Content-Type': 'application/json' },",
55
+ " body: {",
56
+ " mode: 'raw',",
57
+ " raw: JSON.stringify({",
58
+ " email: 'superadmin@smartstack.test',",
59
+ " password: 'SuperAdmin123!'",
60
+ " })",
61
+ " }",
62
+ "}, function (err, res) {",
63
+ " if (err) {",
64
+ " console.error('Login failed:', err);",
65
+ " return;",
66
+ " }",
67
+ " const response = res.json();",
68
+ " pm.collectionVariables.set('accessToken', response.token);",
69
+ " pm.collectionVariables.set('currentUser', 'superadmin');",
70
+ "});"
71
+ ],
72
+ "type": "text/javascript"
73
+ }
74
+ },
75
+ {
76
+ "listen": "test",
77
+ "script": {
78
+ "exec": [
79
+ "pm.test('Status code is 200', function () {",
80
+ " pm.response.to.have.status(200);",
81
+ "});",
82
+ "",
83
+ "pm.test('Response has items array', function () {",
84
+ " const response = pm.response.json();",
85
+ " pm.expect(response).to.have.property('items');",
86
+ " pm.expect(response.items).to.be.an('array');",
87
+ "});",
88
+ "",
89
+ "pm.test('Response has pagination info', function () {",
90
+ " const response = pm.response.json();",
91
+ " pm.expect(response).to.have.property('totalCount');",
92
+ " pm.expect(response).to.have.property('page');",
93
+ " pm.expect(response).to.have.property('pageSize');",
94
+ "});"
95
+ ],
96
+ "type": "text/javascript"
97
+ }
98
+ }
99
+ ],
100
+ "request": {
101
+ "method": "GET",
102
+ "header": [
103
+ {
104
+ "key": "Authorization",
105
+ "value": "Bearer {{accessToken}}",
106
+ "type": "text"
107
+ }
108
+ ],
109
+ "url": {
110
+ "raw": "{{baseUrl}}/api/{area}/{module}",
111
+ "host": ["{{baseUrl}}"],
112
+ "path": ["api", "{area}", "{module}"]
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Template Test GET (403 - Permission Denied)
121
+
122
+ ```json
123
+ {
124
+ "name": "GET {module} - With NoPerm Token (403)",
125
+ "event": [
126
+ {
127
+ "listen": "prerequest",
128
+ "script": {
129
+ "exec": [
130
+ "const baseUrl = pm.collectionVariables.get('baseUrl');",
131
+ "",
132
+ "pm.sendRequest({",
133
+ " url: baseUrl + '/api/auth/login',",
134
+ " method: 'POST',",
135
+ " header: { 'Content-Type': 'application/json' },",
136
+ " body: {",
137
+ " mode: 'raw',",
138
+ " raw: JSON.stringify({",
139
+ " email: 'noperm@smartstack.test',",
140
+ " password: 'NoPerm123!'",
141
+ " })",
142
+ " }",
143
+ "}, function (err, res) {",
144
+ " if (err) {",
145
+ " console.error('Login failed:', err);",
146
+ " return;",
147
+ " }",
148
+ " const response = res.json();",
149
+ " pm.collectionVariables.set('accessToken', response.token);",
150
+ " pm.collectionVariables.set('currentUser', 'noperm');",
151
+ "});"
152
+ ],
153
+ "type": "text/javascript"
154
+ }
155
+ },
156
+ {
157
+ "listen": "test",
158
+ "script": {
159
+ "exec": [
160
+ "pm.test('Status code is 403 Forbidden', function () {",
161
+ " pm.response.to.have.status(403);",
162
+ "});",
163
+ "",
164
+ "pm.test('Response indicates permission denied', function () {",
165
+ " // 403 responses may have empty body or error message",
166
+ " pm.expect(pm.response.code).to.equal(403);",
167
+ "});"
168
+ ],
169
+ "type": "text/javascript"
170
+ }
171
+ }
172
+ ],
173
+ "request": {
174
+ "method": "GET",
175
+ "header": [
176
+ {
177
+ "key": "Authorization",
178
+ "value": "Bearer {{accessToken}}",
179
+ "type": "text"
180
+ }
181
+ ],
182
+ "url": {
183
+ "raw": "{{baseUrl}}/api/{area}/{module}",
184
+ "host": ["{{baseUrl}}"],
185
+ "path": ["api", "{area}", "{module}"]
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Template Test GET (401 - No Auth)
194
+
195
+ ```json
196
+ {
197
+ "name": "GET {module} - Without Token (401)",
198
+ "event": [
199
+ {
200
+ "listen": "test",
201
+ "script": {
202
+ "exec": [
203
+ "pm.test('Status code is 401 Unauthorized', function () {",
204
+ " pm.response.to.have.status(401);",
205
+ "});"
206
+ ],
207
+ "type": "text/javascript"
208
+ }
209
+ }
210
+ ],
211
+ "request": {
212
+ "method": "GET",
213
+ "header": [],
214
+ "url": {
215
+ "raw": "{{baseUrl}}/api/{area}/{module}",
216
+ "host": ["{{baseUrl}}"],
217
+ "path": ["api", "{area}", "{module}"]
218
+ }
219
+ }
220
+ }
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Template Test POST Create (201)
226
+
227
+ ```json
228
+ {
229
+ "name": "POST {module} - With Admin Token (201)",
230
+ "event": [
231
+ {
232
+ "listen": "prerequest",
233
+ "script": {
234
+ "exec": [
235
+ "const baseUrl = pm.collectionVariables.get('baseUrl');",
236
+ "",
237
+ "pm.sendRequest({",
238
+ " url: baseUrl + '/api/auth/login',",
239
+ " method: 'POST',",
240
+ " header: { 'Content-Type': 'application/json' },",
241
+ " body: {",
242
+ " mode: 'raw',",
243
+ " raw: JSON.stringify({",
244
+ " email: 'superadmin@smartstack.test',",
245
+ " password: 'SuperAdmin123!'",
246
+ " })",
247
+ " }",
248
+ "}, function (err, res) {",
249
+ " if (err) return console.error('Login failed:', err);",
250
+ " const response = res.json();",
251
+ " pm.collectionVariables.set('accessToken', response.token);",
252
+ "});"
253
+ ],
254
+ "type": "text/javascript"
255
+ }
256
+ },
257
+ {
258
+ "listen": "test",
259
+ "script": {
260
+ "exec": [
261
+ "pm.test('Status code is 201 Created', function () {",
262
+ " pm.response.to.have.status(201);",
263
+ "});",
264
+ "",
265
+ "pm.test('Response has created entity with ID', function () {",
266
+ " const response = pm.response.json();",
267
+ " pm.expect(response).to.have.property('id');",
268
+ " // Store for subsequent tests",
269
+ " pm.collectionVariables.set('test{Entity}Id', response.id);",
270
+ "});",
271
+ "",
272
+ "pm.test('Response has Location header', function () {",
273
+ " pm.expect(pm.response.headers.has('Location')).to.be.true;",
274
+ "});"
275
+ ],
276
+ "type": "text/javascript"
277
+ }
278
+ }
279
+ ],
280
+ "request": {
281
+ "method": "POST",
282
+ "header": [
283
+ {
284
+ "key": "Authorization",
285
+ "value": "Bearer {{accessToken}}",
286
+ "type": "text"
287
+ },
288
+ {
289
+ "key": "Content-Type",
290
+ "value": "application/json",
291
+ "type": "text"
292
+ }
293
+ ],
294
+ "body": {
295
+ "mode": "raw",
296
+ "raw": "{\n \"name\": \"Test {Entity} {{$timestamp}}\",\n \"description\": \"Created via Postman test\"\n}"
297
+ },
298
+ "url": {
299
+ "raw": "{{baseUrl}}/api/{area}/{module}",
300
+ "host": ["{{baseUrl}}"],
301
+ "path": ["api", "{area}", "{module}"]
302
+ }
303
+ }
304
+ }
305
+ ```
306
+
307
+ ---
308
+
309
+ ## Template Test POST (403 - ReadOnly)
310
+
311
+ ```json
312
+ {
313
+ "name": "POST {module} - With ReadOnly Token (403)",
314
+ "event": [
315
+ {
316
+ "listen": "prerequest",
317
+ "script": {
318
+ "exec": [
319
+ "const baseUrl = pm.collectionVariables.get('baseUrl');",
320
+ "",
321
+ "pm.sendRequest({",
322
+ " url: baseUrl + '/api/auth/login',",
323
+ " method: 'POST',",
324
+ " header: { 'Content-Type': 'application/json' },",
325
+ " body: {",
326
+ " mode: 'raw',",
327
+ " raw: JSON.stringify({",
328
+ " email: 'readonly@smartstack.test',",
329
+ " password: 'ReadOnly123!'",
330
+ " })",
331
+ " }",
332
+ "}, function (err, res) {",
333
+ " if (err) return console.error('Login failed:', err);",
334
+ " const response = res.json();",
335
+ " pm.collectionVariables.set('accessToken', response.token);",
336
+ "});"
337
+ ],
338
+ "type": "text/javascript"
339
+ }
340
+ },
341
+ {
342
+ "listen": "test",
343
+ "script": {
344
+ "exec": [
345
+ "pm.test('Status code is 403 Forbidden', function () {",
346
+ " pm.response.to.have.status(403);",
347
+ "});"
348
+ ],
349
+ "type": "text/javascript"
350
+ }
351
+ }
352
+ ],
353
+ "request": {
354
+ "method": "POST",
355
+ "header": [
356
+ {
357
+ "key": "Authorization",
358
+ "value": "Bearer {{accessToken}}",
359
+ "type": "text"
360
+ },
361
+ {
362
+ "key": "Content-Type",
363
+ "value": "application/json",
364
+ "type": "text"
365
+ }
366
+ ],
367
+ "body": {
368
+ "mode": "raw",
369
+ "raw": "{\n \"name\": \"Should Fail\",\n \"description\": \"ReadOnly cannot create\"\n}"
370
+ },
371
+ "url": {
372
+ "raw": "{{baseUrl}}/api/{area}/{module}",
373
+ "host": ["{{baseUrl}}"],
374
+ "path": ["api", "{area}", "{module}"]
375
+ }
376
+ }
377
+ }
378
+ ```
379
+
380
+ ---
381
+
382
+ ## Template Test DELETE (403)
383
+
384
+ ```json
385
+ {
386
+ "name": "DELETE {module} - With ReadOnly Token (403)",
387
+ "event": [
388
+ {
389
+ "listen": "prerequest",
390
+ "script": {
391
+ "exec": [
392
+ "const baseUrl = pm.collectionVariables.get('baseUrl');",
393
+ "",
394
+ "pm.sendRequest({",
395
+ " url: baseUrl + '/api/auth/login',",
396
+ " method: 'POST',",
397
+ " header: { 'Content-Type': 'application/json' },",
398
+ " body: {",
399
+ " mode: 'raw',",
400
+ " raw: JSON.stringify({",
401
+ " email: 'readonly@smartstack.test',",
402
+ " password: 'ReadOnly123!'",
403
+ " })",
404
+ " }",
405
+ "}, function (err, res) {",
406
+ " if (err) return console.error('Login failed:', err);",
407
+ " const response = res.json();",
408
+ " pm.collectionVariables.set('accessToken', response.token);",
409
+ "});"
410
+ ],
411
+ "type": "text/javascript"
412
+ }
413
+ },
414
+ {
415
+ "listen": "test",
416
+ "script": {
417
+ "exec": [
418
+ "pm.test('Status code is 403 Forbidden', function () {",
419
+ " pm.response.to.have.status(403);",
420
+ "});"
421
+ ],
422
+ "type": "text/javascript"
423
+ }
424
+ }
425
+ ],
426
+ "request": {
427
+ "method": "DELETE",
428
+ "header": [
429
+ {
430
+ "key": "Authorization",
431
+ "value": "Bearer {{accessToken}}",
432
+ "type": "text"
433
+ }
434
+ ],
435
+ "url": {
436
+ "raw": "{{baseUrl}}/api/{area}/{module}/{{test{Entity}Id}}",
437
+ "host": ["{{baseUrl}}"],
438
+ "path": ["api", "{area}", "{module}", "{{test{Entity}Id}}"]
439
+ }
440
+ }
441
+ }
442
+ ```
443
+
444
+ ---
445
+
446
+ ## Template Test Auth - Login Success
447
+
448
+ ```json
449
+ {
450
+ "name": "Login - Valid Credentials (200)",
451
+ "event": [
452
+ {
453
+ "listen": "test",
454
+ "script": {
455
+ "exec": [
456
+ "pm.test('Status code is 200', function () {",
457
+ " pm.response.to.have.status(200);",
458
+ "});",
459
+ "",
460
+ "pm.test('Response has access token', function () {",
461
+ " const response = pm.response.json();",
462
+ " pm.expect(response).to.have.property('token');",
463
+ " pm.expect(response.token).to.be.a('string');",
464
+ "});",
465
+ "",
466
+ "pm.test('Response has user info', function () {",
467
+ " const response = pm.response.json();",
468
+ " pm.expect(response).to.have.property('user');",
469
+ " pm.expect(response.user).to.have.property('email');",
470
+ " pm.expect(response.user).to.have.property('roles');",
471
+ " pm.expect(response.user).to.have.property('permissions');",
472
+ "});"
473
+ ],
474
+ "type": "text/javascript"
475
+ }
476
+ }
477
+ ],
478
+ "request": {
479
+ "method": "POST",
480
+ "header": [
481
+ {
482
+ "key": "Content-Type",
483
+ "value": "application/json",
484
+ "type": "text"
485
+ }
486
+ ],
487
+ "body": {
488
+ "mode": "raw",
489
+ "raw": "{\n \"email\": \"superadmin@smartstack.test\",\n \"password\": \"SuperAdmin123!\"\n}"
490
+ },
491
+ "url": {
492
+ "raw": "{{baseUrl}}/api/auth/login",
493
+ "host": ["{{baseUrl}}"],
494
+ "path": ["api", "auth", "login"]
495
+ }
496
+ }
497
+ }
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Génération Automatique
503
+
504
+ Pour générer les tests d'un nouveau controller, remplacer :
505
+
506
+ | Variable | Exemple |
507
+ |----------|---------|
508
+ | `{area}` | `support`, `admin`, `business` |
509
+ | `{module}` | `tickets`, `sla`, `users` |
510
+ | `{Entity}` | `Ticket`, `SlaDefinition`, `User` |
511
+
512
+ ### Tests Minimum par Controller
513
+
514
+ 1. GET list - SuperAdmin (200)
515
+ 2. GET list - NoPerm (403)
516
+ 3. GET list - No Token (401)
517
+ 4. POST create - Admin (201)
518
+ 5. POST create - ReadOnly (403)
519
+ 6. DELETE - ReadOnly (403)
520
+
521
+ ### Tests Optionnels
522
+
523
+ - GET by ID - (200)
524
+ - GET by ID - Not Found (404)
525
+ - PUT update - (200)
526
+ - PATCH activate/deactivate - (204)
527
+ - POST avec données invalides - (400)
528
+ - POST doublon - (409)