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.
- package/.agent/agents/accessibility-reviewer.md +220 -134
- package/.agent/agents/ai-code-reviewer.md +233 -129
- package/.agent/agents/backend-specialist.md +238 -178
- package/.agent/agents/code-archaeologist.md +181 -119
- package/.agent/agents/database-architect.md +207 -164
- package/.agent/agents/debugger.md +218 -151
- package/.agent/agents/dependency-reviewer.md +136 -55
- package/.agent/agents/devops-engineer.md +238 -175
- package/.agent/agents/documentation-writer.md +221 -137
- package/.agent/agents/explorer-agent.md +180 -142
- package/.agent/agents/frontend-reviewer.md +194 -80
- package/.agent/agents/frontend-specialist.md +237 -188
- package/.agent/agents/game-developer.md +52 -184
- package/.agent/agents/logic-reviewer.md +149 -78
- package/.agent/agents/mobile-developer.md +223 -152
- package/.agent/agents/mobile-reviewer.md +195 -79
- package/.agent/agents/orchestrator.md +211 -170
- package/.agent/agents/penetration-tester.md +174 -131
- package/.agent/agents/performance-optimizer.md +203 -139
- package/.agent/agents/performance-reviewer.md +211 -108
- package/.agent/agents/product-manager.md +162 -108
- package/.agent/agents/project-planner.md +162 -142
- package/.agent/agents/qa-automation-engineer.md +242 -138
- package/.agent/agents/security-auditor.md +194 -170
- package/.agent/agents/seo-specialist.md +213 -132
- package/.agent/agents/sql-reviewer.md +194 -73
- package/.agent/agents/supervisor-agent.md +203 -156
- package/.agent/agents/test-coverage-reviewer.md +193 -81
- package/.agent/agents/type-safety-reviewer.md +208 -65
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/skills/agent-organizer/SKILL.md +126 -132
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
- package/.agent/skills/api-patterns/SKILL.md +289 -257
- package/.agent/skills/api-security-auditor/SKILL.md +172 -70
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
- package/.agent/skills/architecture/SKILL.md +331 -200
- package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
- package/.agent/skills/bash-linux/SKILL.md +154 -215
- package/.agent/skills/brainstorming/SKILL.md +104 -210
- package/.agent/skills/building-native-ui/SKILL.md +169 -70
- package/.agent/skills/clean-code/SKILL.md +360 -206
- package/.agent/skills/config-validator/SKILL.md +141 -165
- package/.agent/skills/csharp-developer/SKILL.md +528 -107
- package/.agent/skills/database-design/SKILL.md +455 -275
- package/.agent/skills/deployment-procedures/SKILL.md +145 -188
- package/.agent/skills/devops-engineer/SKILL.md +332 -134
- package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
- package/.agent/skills/edge-computing/SKILL.md +157 -213
- package/.agent/skills/extract-design-system/SKILL.md +129 -69
- package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
- package/.agent/skills/game-design-expert/SKILL.md +105 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
- package/.agent/skills/github-operations/SKILL.md +314 -354
- package/.agent/skills/gsap-expert/SKILL.md +901 -0
- package/.agent/skills/i18n-localization/SKILL.md +138 -216
- package/.agent/skills/intelligent-routing/SKILL.md +127 -139
- package/.agent/skills/llm-engineering/SKILL.md +357 -258
- package/.agent/skills/local-first/SKILL.md +154 -203
- package/.agent/skills/mcp-builder/SKILL.md +118 -224
- package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
- package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
- package/.agent/skills/observability/SKILL.md +330 -285
- package/.agent/skills/parallel-agents/SKILL.md +122 -181
- package/.agent/skills/performance-profiling/SKILL.md +254 -197
- package/.agent/skills/plan-writing/SKILL.md +118 -188
- package/.agent/skills/platform-engineer/SKILL.md +123 -135
- package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
- package/.agent/skills/powershell-windows/SKILL.md +146 -230
- package/.agent/skills/python-pro/SKILL.md +879 -114
- package/.agent/skills/react-specialist/SKILL.md +931 -108
- package/.agent/skills/realtime-patterns/SKILL.md +304 -296
- package/.agent/skills/rust-pro/SKILL.md +701 -240
- package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
- package/.agent/skills/server-management/SKILL.md +190 -212
- package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
- package/.agent/skills/sql-pro/SKILL.md +633 -104
- package/.agent/skills/swiftui-expert/SKILL.md +171 -70
- package/.agent/skills/systematic-debugging/SKILL.md +118 -186
- package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
- package/.agent/skills/tdd-workflow/SKILL.md +137 -209
- package/.agent/skills/testing-patterns/SKILL.md +573 -205
- package/.agent/skills/vue-expert/SKILL.md +964 -119
- package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
- package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
- package/.agent/skills/webapp-testing/SKILL.md +145 -236
- package/.agent/workflows/api-tester.md +151 -279
- package/.agent/workflows/audit.md +138 -168
- package/.agent/workflows/brainstorm.md +110 -146
- package/.agent/workflows/changelog.md +112 -144
- package/.agent/workflows/create.md +124 -139
- package/.agent/workflows/debug.md +189 -196
- package/.agent/workflows/deploy.md +189 -153
- package/.agent/workflows/enhance.md +151 -139
- package/.agent/workflows/fix.md +135 -143
- package/.agent/workflows/generate.md +157 -164
- package/.agent/workflows/migrate.md +160 -163
- package/.agent/workflows/orchestrate.md +168 -151
- package/.agent/workflows/performance-benchmarker.md +123 -305
- package/.agent/workflows/plan.md +173 -151
- package/.agent/workflows/preview.md +80 -137
- package/.agent/workflows/refactor.md +183 -153
- package/.agent/workflows/review-ai.md +129 -140
- package/.agent/workflows/review.md +116 -155
- package/.agent/workflows/session.md +94 -154
- package/.agent/workflows/status.md +79 -125
- package/.agent/workflows/strengthen-skills.md +139 -99
- package/.agent/workflows/swarm.md +179 -194
- package/.agent/workflows/test.md +211 -166
- package/.agent/workflows/tribunal-backend.md +113 -111
- package/.agent/workflows/tribunal-database.md +115 -132
- package/.agent/workflows/tribunal-frontend.md +118 -115
- package/.agent/workflows/tribunal-full.md +133 -136
- package/.agent/workflows/tribunal-mobile.md +119 -123
- package/.agent/workflows/tribunal-performance.md +133 -152
- package/.agent/workflows/ui-ux-pro-max.md +143 -171
- package/README.md +11 -15
- package/package.json +1 -1
- package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
- package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
- package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
- package/.agent/skills/game-development/SKILL.md +0 -236
- package/.agent/skills/game-development/game-art/SKILL.md +0 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
- package/.agent/skills/game-development/game-design/SKILL.md +0 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
- 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
|
|
6
|
-
|
|
7
|
-
$ARGUMENTS
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
##
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
+
```
|