tribunal-kit 2.4.6 → 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 (142) hide show
  1. package/.agent/agents/accessibility-reviewer.md +220 -134
  2. package/.agent/agents/ai-code-reviewer.md +233 -129
  3. package/.agent/agents/backend-specialist.md +238 -178
  4. package/.agent/agents/code-archaeologist.md +181 -119
  5. package/.agent/agents/database-architect.md +207 -164
  6. package/.agent/agents/debugger.md +218 -151
  7. package/.agent/agents/dependency-reviewer.md +136 -55
  8. package/.agent/agents/devops-engineer.md +238 -175
  9. package/.agent/agents/documentation-writer.md +221 -137
  10. package/.agent/agents/explorer-agent.md +180 -142
  11. package/.agent/agents/frontend-reviewer.md +194 -80
  12. package/.agent/agents/frontend-specialist.md +237 -188
  13. package/.agent/agents/game-developer.md +52 -184
  14. package/.agent/agents/logic-reviewer.md +149 -78
  15. package/.agent/agents/mobile-developer.md +223 -152
  16. package/.agent/agents/mobile-reviewer.md +195 -79
  17. package/.agent/agents/orchestrator.md +211 -170
  18. package/.agent/agents/penetration-tester.md +174 -131
  19. package/.agent/agents/performance-optimizer.md +203 -139
  20. package/.agent/agents/performance-reviewer.md +211 -108
  21. package/.agent/agents/product-manager.md +162 -108
  22. package/.agent/agents/project-planner.md +162 -142
  23. package/.agent/agents/qa-automation-engineer.md +242 -138
  24. package/.agent/agents/security-auditor.md +194 -170
  25. package/.agent/agents/seo-specialist.md +213 -132
  26. package/.agent/agents/sql-reviewer.md +194 -73
  27. package/.agent/agents/supervisor-agent.md +203 -156
  28. package/.agent/agents/test-coverage-reviewer.md +193 -81
  29. package/.agent/agents/type-safety-reviewer.md +208 -65
  30. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  31. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  32. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  33. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  34. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  35. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  36. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  37. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  38. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  39. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  40. package/.agent/skills/agent-organizer/SKILL.md +126 -132
  41. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
  42. package/.agent/skills/api-patterns/SKILL.md +289 -257
  43. package/.agent/skills/api-security-auditor/SKILL.md +172 -70
  44. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
  45. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
  46. package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
  47. package/.agent/skills/architecture/SKILL.md +331 -200
  48. package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
  49. package/.agent/skills/bash-linux/SKILL.md +154 -215
  50. package/.agent/skills/brainstorming/SKILL.md +104 -210
  51. package/.agent/skills/building-native-ui/SKILL.md +169 -70
  52. package/.agent/skills/clean-code/SKILL.md +360 -206
  53. package/.agent/skills/config-validator/SKILL.md +141 -165
  54. package/.agent/skills/csharp-developer/SKILL.md +528 -107
  55. package/.agent/skills/database-design/SKILL.md +455 -275
  56. package/.agent/skills/deployment-procedures/SKILL.md +145 -188
  57. package/.agent/skills/devops-engineer/SKILL.md +332 -134
  58. package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
  59. package/.agent/skills/edge-computing/SKILL.md +157 -213
  60. package/.agent/skills/extract-design-system/SKILL.md +129 -69
  61. package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
  62. package/.agent/skills/game-design-expert/SKILL.md +105 -0
  63. package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
  64. package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
  65. package/.agent/skills/github-operations/SKILL.md +314 -354
  66. package/.agent/skills/gsap-expert/SKILL.md +901 -0
  67. package/.agent/skills/i18n-localization/SKILL.md +138 -216
  68. package/.agent/skills/intelligent-routing/SKILL.md +127 -139
  69. package/.agent/skills/llm-engineering/SKILL.md +357 -258
  70. package/.agent/skills/local-first/SKILL.md +154 -203
  71. package/.agent/skills/mcp-builder/SKILL.md +118 -224
  72. package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
  73. package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
  74. package/.agent/skills/observability/SKILL.md +330 -285
  75. package/.agent/skills/parallel-agents/SKILL.md +122 -181
  76. package/.agent/skills/performance-profiling/SKILL.md +254 -197
  77. package/.agent/skills/plan-writing/SKILL.md +118 -188
  78. package/.agent/skills/platform-engineer/SKILL.md +123 -135
  79. package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
  80. package/.agent/skills/powershell-windows/SKILL.md +146 -230
  81. package/.agent/skills/python-pro/SKILL.md +879 -114
  82. package/.agent/skills/react-specialist/SKILL.md +931 -108
  83. package/.agent/skills/realtime-patterns/SKILL.md +304 -296
  84. package/.agent/skills/rust-pro/SKILL.md +701 -240
  85. package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
  86. package/.agent/skills/server-management/SKILL.md +190 -212
  87. package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
  88. package/.agent/skills/sql-pro/SKILL.md +633 -104
  89. package/.agent/skills/swiftui-expert/SKILL.md +171 -70
  90. package/.agent/skills/systematic-debugging/SKILL.md +118 -186
  91. package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
  92. package/.agent/skills/tdd-workflow/SKILL.md +137 -209
  93. package/.agent/skills/testing-patterns/SKILL.md +573 -205
  94. package/.agent/skills/vue-expert/SKILL.md +964 -119
  95. package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
  96. package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
  97. package/.agent/skills/webapp-testing/SKILL.md +145 -236
  98. package/.agent/workflows/api-tester.md +151 -279
  99. package/.agent/workflows/audit.md +138 -168
  100. package/.agent/workflows/brainstorm.md +110 -146
  101. package/.agent/workflows/changelog.md +112 -144
  102. package/.agent/workflows/create.md +124 -139
  103. package/.agent/workflows/debug.md +189 -196
  104. package/.agent/workflows/deploy.md +189 -153
  105. package/.agent/workflows/enhance.md +151 -139
  106. package/.agent/workflows/fix.md +135 -143
  107. package/.agent/workflows/generate.md +157 -164
  108. package/.agent/workflows/migrate.md +160 -163
  109. package/.agent/workflows/orchestrate.md +168 -151
  110. package/.agent/workflows/performance-benchmarker.md +123 -305
  111. package/.agent/workflows/plan.md +173 -151
  112. package/.agent/workflows/preview.md +80 -137
  113. package/.agent/workflows/refactor.md +183 -153
  114. package/.agent/workflows/review-ai.md +129 -140
  115. package/.agent/workflows/review.md +116 -155
  116. package/.agent/workflows/session.md +94 -154
  117. package/.agent/workflows/status.md +79 -125
  118. package/.agent/workflows/strengthen-skills.md +139 -99
  119. package/.agent/workflows/swarm.md +179 -194
  120. package/.agent/workflows/test.md +211 -166
  121. package/.agent/workflows/tribunal-backend.md +113 -111
  122. package/.agent/workflows/tribunal-database.md +115 -132
  123. package/.agent/workflows/tribunal-frontend.md +118 -115
  124. package/.agent/workflows/tribunal-full.md +133 -136
  125. package/.agent/workflows/tribunal-mobile.md +119 -123
  126. package/.agent/workflows/tribunal-performance.md +133 -152
  127. package/.agent/workflows/ui-ux-pro-max.md +143 -171
  128. package/README.md +11 -15
  129. package/package.json +1 -1
  130. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  131. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  132. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  133. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  134. package/.agent/skills/game-development/SKILL.md +0 -236
  135. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  136. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  137. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  138. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  139. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  140. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  141. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  142. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
@@ -1,279 +1,151 @@
1
- ---
2
- description: Automated multi-stage API endpoint testing. Generates and runs auth-aware request sequences.
3
- ---
4
-
5
- # /api-tester — Automated API Test Flows
6
-
7
- $ARGUMENTS
8
-
9
- ---
10
-
11
- This command generates and runs multi-stage API test sequences. It goes beyond single-endpoint testing by simulating realistic user sessions with chained requests, variable capture, and assertion verification.
12
-
13
- ---
14
-
15
- ## When to Use This vs Other Commands
16
-
17
- | Use `/api-tester` when... | Use something else when... |
18
- |---|---|
19
- | Testing multi-step flows (auth + resource lifecycle) | Unit tests → `/test` |
20
- | Verifying endpoint contracts before deploy | Logic review → `/review` |
21
- | Debugging a specific flow returning wrong data | Root cause → `/debug` |
22
- | Security testing for injection/rate limits | Full security audit → `/audit` |
23
-
24
- ---
25
-
26
- ## When to Use
27
-
28
- - After creating or modifying API routes.
29
- - Before deployment to validate endpoint contracts.
30
- - When debugging a multi-step flow (e.g., Register → Login → Create Resource → Verify).
31
- - When the user says "test api", "endpoint test", or "api flow".
32
-
33
- ---
34
-
35
- ## Pipeline Flow
36
-
37
- ```
38
- Your request (endpoint or flow description)
39
-
40
-
41
- Context read route files, middleware, schema, auth config, package.json
42
-
43
-
44
- Route discovery scan for all registered endpoints and methods
45
-
46
-
47
- Test Plan generated (sequence of requests with dependencies & captures)
48
-
49
-
50
- Environment check server running? Base URL resolved? Auth available?
51
-
52
-
53
- Execution — each step runs, captures response, feeds next step
54
-
55
-
56
- Report — pass/fail per step, response times, payload diffs, coverage map
57
- ```
58
-
59
- ---
60
-
61
- ## Step 1: Route Discovery
62
-
63
- Before generating tests, scan the codebase for route definitions:
64
-
65
- | Framework | Scan Pattern | What to Extract |
66
- |---|---|---|
67
- | Express | `app.get/post/put/delete/patch` or `router.*` | Method, path, middleware |
68
- | Fastify | `fastify.route` or `fastify.get/post/...` | Method, path, schema |
69
- | Next.js API | `app/api/**/route.ts` | Exported functions (GET, POST) |
70
- | Django/DRF | `urlpatterns`, `@api_view` | Method, path, viewset |
71
- | FastAPI | `@app.get/post/put/delete` | Method, path, response model |
72
- | Go (Chi/Gin) | `r.Get/Post/Put/Delete` | Method, path, handler |
73
-
74
- **Output a route map before generating tests:**
75
- ```
76
- ━━━ Route Map ━━━━━━━━━━━━━━━━━━━━━━━━━━
77
- GET /api/users → UserController.list [auth: required]
78
- POST /api/users → UserController.create [auth: admin]
79
- GET /api/users/:id → UserController.get [auth: required]
80
- PUT /api/users/:id → UserController.update [auth: owner]
81
- DELETE /api/users/:id → UserController.delete [auth: admin]
82
- POST /api/auth/login → AuthController.login [auth: none]
83
- POST /api/auth/register → AuthController.register [auth: none]
84
- ```
85
-
86
- ---
87
-
88
- ## Step 2: Test Pattern Selection
89
-
90
- ### Pattern 1: CRUD Lifecycle
91
- Full create-read-update-read-delete-verify cycle:
92
- ```
93
- Step 1: POST /api/resource → Create (capture: response.id $RESOURCE_ID)
94
- Step 2: GET /api/resource/$RESOURCE_ID → Read (assert: 200, body matches creation)
95
- Step 3: PUT /api/resource/$RESOURCE_ID → Update (send modified fields)
96
- Step 4: GET /api/resource/$RESOURCE_ID → Read (assert: updated fields match)
97
- Step 5: DELETE /api/resource/$RESOURCE_ID Delete (assert: 204 or 200)
98
- Step 6: GET /api/resource/$RESOURCE_ID → Read (assert: 404)
99
- ```
100
-
101
- ### Pattern 2: Auth Flow
102
- Full authentication lifecycle:
103
- ```
104
- Step 1: POST /api/auth/register → Register (capture: $TOKEN)
105
- Step 2: POST /api/auth/login → Login (capture: $JWT, $REFRESH_TOKEN)
106
- Step 3: GET /api/protected → With JWT header (assert: 200)
107
- Step 4: GET /api/protected → Without JWT (assert: 401)
108
- Step 5: POST /api/auth/refresh → With $REFRESH_TOKEN (capture: $NEW_JWT)
109
- Step 6: GET /api/protected → With $NEW_JWT (assert: 200)
110
- Step 7: POST /api/auth/logout → Invalidate session
111
- Step 8: GET /api/protected → With invalidated JWT (assert: 401)
112
- ```
113
-
114
- ### Pattern 3: Edge Cases & Error Handling
115
- ```
116
- Step 1: POST /api/resource → Missing required fields (assert: 400 + error message)
117
- Step 2: POST /api/resource → Invalid field types (assert: 400 + validation detail)
118
- Step 3: POST /api/resource → Duplicate unique field (assert: 409)
119
- Step 4: GET /api/resource/99999 → Non-existent ID (assert: 404)
120
- Step 5: PUT /api/resource/:id → Unauthorized user (assert: 403)
121
- Step 6: DELETE /api/resource/:id → Without auth (assert: 401)
122
- Step 7: GET /api/resource?page=-1 Invalid pagination (assert: 400)
123
- Step 8: POST /api/resource → Payload too large (assert: 413 or 400)
124
- ```
125
-
126
- ### Pattern 4: Pagination & Filtering
127
- ```
128
- Step 1: POST /api/resource → Create 5 records (loop)
129
- Step 2: GET /api/resource?page=1&limit=2 → (assert: 2 items, hasMore: true)
130
- Step 3: GET /api/resource?page=2&limit=2 → (assert: 2 items, hasMore: true)
131
- Step 4: GET /api/resource?page=3&limit=2 → (assert: 1 item, hasMore: false)
132
- Step 5: GET /api/resource?sort=createdAt&order=desc (assert: items in descending order)
133
- Step 6: GET /api/resource?filter=name:test → (assert: only matching items returned)
134
- ```
135
-
136
- ### Pattern 5: Rate Limiting & Security
137
- ```
138
- Step 1: POST /api/auth/login × 10 → Rapid-fire login attempts
139
- Step 2: POST /api/auth/login → (assert: 429 Too Many Requests or similar)
140
- Step 3: Wait [cooldown period]
141
- Step 4: POST /api/auth/login → (assert: allowed again)
142
- Step 5: POST /api/resource → With SQL injection in body (assert: 400, no SQL error exposed)
143
- Step 6: GET /api/resource?id=1 OR 1=1 → (assert: 400 or filtered, no data leak)
144
- ```
145
-
146
- ---
147
-
148
- ## Step 3: Variable Capture & Chaining
149
-
150
- Tests are chained via captured variables:
151
-
152
- ```
153
- $VAR_NAME = response.body.fieldPath
154
-
155
- Examples:
156
- $USER_ID = response.body.data.id
157
- $JWT = response.body.token
158
- $CSRF_TOKEN = response.headers['x-csrf-token']
159
- $TOTAL_COUNT = response.body.meta.total
160
- ```
161
-
162
- Variables are passed forward:
163
- - **Headers**: `Authorization: Bearer $JWT`
164
- - **URL params**: `/api/users/$USER_ID`
165
- - **Body fields**: `{ "userId": "$USER_ID" }`
166
-
167
- ---
168
-
169
- ## Step 4: Assertion Engine
170
-
171
- Each step can assert on:
172
-
173
- | Assertion Type | Example | Description |
174
- |---|---|---|
175
- | Status code | `assert: 200` | HTTP status |
176
- | Body field exists | `assert: body.id exists` | Field presence |
177
- | Body field value | `assert: body.name === "test"` | Exact match |
178
- | Body field type | `assert: body.items is Array` | Type check |
179
- | Header present | `assert: headers.content-type contains "json"` | Header check |
180
- | Response time | `assert: time < 500ms` | Performance gate |
181
- | Array length | `assert: body.items.length === 3` | Count check |
182
- | Negative match | `assert: body.password === undefined` | Field NOT present |
183
-
184
- ---
185
-
186
- ## Output Format
187
-
188
- ```
189
- ━━━ API Test Report ━━━━━━━━━━━━━━━━━━━━━━
190
-
191
- Flow: [Name of the flow tested]
192
- Base: [base URL]
193
- Steps: 6 total | 5 passed | 1 failed
194
- Time: 1.2s total
195
-
196
- ━━━ Execution ━━━━━━━━━━━━━━━━━━━━━━━━━━━
197
-
198
- Step 1: POST /api/auth/login ✅ 200 (142ms)
199
- ↳ Captured: $JWT
200
- Step 2: GET /api/users/me ✅ 200 (89ms)
201
- ↳ Asserted: body.email === "test@example.com"
202
- Step 3: PUT /api/users/me ✅ 200 (112ms)
203
- ↳ Sent: { name: "Updated Name" }
204
- Step 4: GET /api/users/me ✅ 200 (78ms)
205
- ↳ Asserted: body.name === "Updated Name"
206
- Step 5: DELETE /api/users/me ✅ 204 (95ms)
207
- Step 6: GET /api/users/me ❌ FAIL (67ms)
208
- ↳ Expected: 404
209
- ↳ Received: 200 { name: "Updated Name", deletedAt: "2026-03-05T..." }
210
-
211
- ━━━ Failure Analysis ━━━━━━━━━━━━━━━━━━━━
212
-
213
- Step 6: Soft-delete returning 200 instead of 404.
214
- Root cause: GET route doesn't filter `deletedAt IS NOT NULL`.
215
- File to check: controllers/user.controller.ts → findOne method
216
- Suggested fix: Add `WHERE deletedAt IS NULL` condition to query.
217
-
218
- ━━━ Coverage ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
219
-
220
- Endpoints tested: 4 of 7 (57%)
221
- Methods tested: GET ✅ POST ✅ PUT ✅ DELETE ✅ PATCH ❌
222
- Auth scenarios: authenticated ✅ unauthenticated ❌ admin ❌
223
- ```
224
-
225
- ---
226
-
227
- ## Security Constraints
228
-
229
- - **Never hardcode** API keys, tokens, or passwords in generated test scripts.
230
- - **Use env vars**: `process.env.TEST_API_KEY`, `process.env.API_BASE_URL`.
231
- - **Sanitize test payloads** — no actual SQL injection payloads that could damage data.
232
- - **Never run destructive tests** against production URLs without explicit user confirmation.
233
- - **Clean up created resources** at the end of every test flow (DELETE what was POSTed).
234
-
235
- ---
236
-
237
- ## Abort Conditions
238
-
239
- | Condition | Action |
240
- |---|---|
241
- | Server is not running | Prompt to run `/preview start` before continuing |
242
- | Destructive test (DELETE) on a production URL | Stop and confirm explicitly before executing |
243
- | Test step fails with 5xx | Halt the flow — server error is not a test assertion failure |
244
- | Auth step fails | Halt and report — remaining steps are invalid without a token |
245
-
246
- ---
247
-
248
- ## Cross-Workflow Navigation
249
-
250
- | After /api-tester reveals... | Go to |
251
- |---|---|
252
- | Soft-delete returning 200, should be 404 | `/fix` or `/debug` the query filter |
253
- | Endpoint returns 500 on valid input | `/debug` for root cause |
254
- | Security test: SQL injection returns 500 with DB error | ❌ CRITICAL → `/audit` immediately |
255
- | Rate limiting is missing | `/enhance` to add rate-limiting middleware |
256
- | All tests pass, ready for deploy | `/deploy` following pre-flight checklist |
257
-
258
- ---
259
-
260
- ## Hallucination Guard
261
-
262
- - **Scan route files first** — only test endpoints that exist in the codebase.
263
- - **Verify HTTP methods** — only use methods the route actually supports.
264
- - **Never invent response fields** — verify against schema, types, or actual response.
265
- - **Flag assumptions**: `// ASSUMPTION: this endpoint requires JWT auth based on middleware scan`.
266
- - **Never fabricate response times** — only report measured values.
267
-
268
- ---
269
-
270
- ## Usage
271
-
272
- ```
273
- /api-tester CRUD flow for /api/posts
274
- /api-tester auth flow with JWT refresh
275
- /api-tester edge cases for /api/users
276
- /api-tester full lifecycle for /api/orders including payment
277
- /api-tester pagination for /api/products
278
- /api-tester rate limiting on /api/auth/login
279
- ```
1
+ ---
2
+ description: Automated multi-stage API endpoint testing. Generates and runs auth-aware request sequences (login → use token → test CRUD → verify errors). Reports response codes, schema mismatches, and unexpected data.
3
+ ---
4
+
5
+ # /api-tester — Automated API Testing
6
+
7
+ $ARGUMENTS
8
+
9
+ ---
10
+
11
+ ## When to Use /api-tester
12
+
13
+ | Use `/api-tester` when... | Use something else when... |
14
+ |:---|:---|
15
+ | Testing REST API endpoints manually | Unit tests needed → `/test` |
16
+ | Verifying auth token flows end-to-end | Full security audit → `/audit` |
17
+ | After generating new endpoints | Load testing `/performance-benchmarker` |
18
+ | Checking response schemas | |
19
+
20
+ ---
21
+
22
+ ## Phase 1 Endpoint Discovery
23
+
24
+ ```bash
25
+ # Find all defined routes
26
+ grep -r "app.get\|app.post\|app.put\|app.delete\|app.patch" src/ --include="*.ts"
27
+ grep -r "router.get\|router.post\|router.put" src/ --include="*.ts"
28
+
29
+ # Next.js Route Handlers
30
+ find src/app/api -name "route.ts" | sort
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Phase 2 — Auth Flow (Token Acquisition)
36
+
37
+ Before testing protected endpoints, acquire auth token:
38
+
39
+ ```bash
40
+ # Acquire JWT
41
+ curl -X POST http://localhost:3000/api/auth/login \
42
+ -H "Content-Type: application/json" \
43
+ -d '{"email":"test@example.com","password":"testpassword"}' \
44
+ -s | jq '.token'
45
+
46
+ # Assign to variable
47
+ TOKEN=$(curl -X POST http://localhost:3000/api/auth/login \
48
+ -H "Content-Type: application/json" \
49
+ -d '{"email":"test@example.com","password":"testpassword"}' \
50
+ -s | jq -r '.token')
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Phase 3 — CRUD Sequence Testing
56
+
57
+ Test endpoints in the correct order (create before read, read before delete):
58
+
59
+ ```bash
60
+ # 1. CREATE (POST)
61
+ CREATE_RESPONSE=$(curl -X POST http://localhost:3000/api/users \
62
+ -H "Authorization: Bearer $TOKEN" \
63
+ -H "Content-Type: application/json" \
64
+ -d '{"name":"Test User","email":"new@test.com"}')
65
+ CREATED_ID=$(echo $CREATE_RESPONSE | jq -r '.id')
66
+ echo "Created: $CREATED_ID"
67
+
68
+ # 2. READ (GET)
69
+ curl -X GET "http://localhost:3000/api/users/$CREATED_ID" \
70
+ -H "Authorization: Bearer $TOKEN" \
71
+ | jq .
72
+
73
+ # 3. UPDATE (PATCH)
74
+ curl -X PATCH "http://localhost:3000/api/users/$CREATED_ID" \
75
+ -H "Authorization: Bearer $TOKEN" \
76
+ -H "Content-Type: application/json" \
77
+ -d '{"name":"Updated Name"}'
78
+
79
+ # 4. DELETE
80
+ curl -X DELETE "http://localhost:3000/api/users/$CREATED_ID" \
81
+ -H "Authorization: Bearer $TOKEN"
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Phase 4 — Error Case Testing
87
+
88
+ Test that errors are handled correctly:
89
+
90
+ ```bash
91
+ # 4xx errors (client errors — must NOT return 200!)
92
+ echo "--- Unauthenticated request (expect 401) ---"
93
+ curl -X GET http://localhost:3000/api/users -s -o /dev/null -w "%{http_code}\n"
94
+
95
+ echo "--- Invalid ID (expect 404 or 400) ---"
96
+ curl -X GET "http://localhost:3000/api/users/not-a-real-id" \
97
+ -H "Authorization: Bearer $TOKEN" \
98
+ -s -o /dev/null -w "%{http_code}\n"
99
+
100
+ echo "--- Invalid body (expect 400) ---"
101
+ curl -X POST http://localhost:3000/api/users \
102
+ -H "Authorization: Bearer $TOKEN" \
103
+ -H "Content-Type: application/json" \
104
+ -d '{"invalid":"field"}' \
105
+ -s -o /dev/null -w "%{http_code}\n"
106
+
107
+ echo "--- Rate limiting (expect 429 after N requests) ---"
108
+ for i in {1..15}; do
109
+ STATUS=$(curl -X POST http://localhost:3000/api/auth/login \
110
+ -H "Content-Type: application/json" \
111
+ -d '{"email":"x","password":"wrong"}' \
112
+ -s -o /dev/null -w "%{http_code}")
113
+ echo "Attempt $i: $STATUS"
114
+ done
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Phase 5 Test Report
120
+
121
+ ```
122
+ ━━━ API Test Report ━━━━━━━━━━━━━━━━━━━━━━
123
+
124
+ Auth Flow: ✅ Login → token acquired
125
+ POST /users: ✅ 201 Created — id returned
126
+ GET /users: 200 data matches expected schema
127
+ PATCH /users: ✅ 200 — update reflected
128
+ DELETE /users: 204 No Content
129
+
130
+ Error Cases:
131
+ Unauthenticated: 401 (expected)
132
+ Invalid ID: 404 (expected)
133
+ Invalid body: 400 (expected) Zod error returned
134
+ Rate limiting: ✅ 429 on attempt 11 (expected)
135
+
136
+ ━━━ Issues Found ━━━━━━━━━━━━━━━━━━━━━━━━
137
+
138
+ GET /api/users returns 200 with no auth (should be 401)
139
+ ⚠️ PATCH /api/users doesn't validate Content-Type (accepts any body)
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Usage Examples
145
+
146
+ ```
147
+ /api-tester POST /api/auth/login then test /api/users CRUD
148
+ /api-tester test the /api/checkout flow with Stripe test card
149
+ /api-tester verify all auth routes return 401 for unauthenticated requests
150
+ /api-tester test rate limiting on /api/auth/login
151
+ ```