@wipal/agent-team 1.0.3 → 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.
- package/.claude/commands/skills/discover.md +127 -0
- package/.claude/commands/skills/install.md +225 -0
- package/.claude/commands/skills/review.md +234 -0
- package/.claude/commands/utils/learn.md +142 -0
- package/.claude/commands/utils/retrospect.md +62 -0
- package/.claude/commands/utils/switch.md +113 -0
- package/.claude/commands/utils/sync.md +183 -0
- package/.claude/rules/common/general-rules.md +6 -0
- package/.claude/rules/role-rules/dev-be-rules.md +241 -0
- package/.claude/rules/role-rules/dev-fe-rules.md +76 -0
- package/.claude/skills/SKILL-INDEX.md +24 -5
- package/.claude/skills/core/knowledge-graph/SKILL.md +214 -0
- package/.claude/skills/core/sequential-thinking/SKILL.md +112 -0
- package/.claude/skills/core/sequential-thinking/references/advanced.md +122 -0
- package/.claude/skills/core/sequential-thinking/references/examples.md +274 -0
- package/.claude/skills/domain/architecture/c4-architecture/SKILL.md +314 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/advanced-patterns.md +552 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/c4-syntax.md +492 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/common-mistakes.md +437 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/SKILL.md +238 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/advanced-features.md +556 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/flowcharts.md +450 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/.claude/skills/domain/backend/testing-be/SKILL.md +121 -17
- package/.claude/skills/domain/design/design-system/SKILL.md +169 -0
- package/.claude/skills/domain/design/html-css-output/SKILL.md +253 -0
- package/.claude/skills/domain/design/mockup-creation/SKILL.md +230 -0
- package/.claude/skills/domain/design/responsive-design/SKILL.md +207 -0
- package/.claude/skills/domain/design/ui-design/SKILL.md +124 -0
- package/.claude/skills/domain/frontend/testing-fe/SKILL.md +143 -38
- package/.claude/skills/domain/frontend/ui-ux-pro-max/README.md +45 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/SKILL.md +404 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/charts.csv +26 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/colors.csv +97 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/icons.csv +101 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/landing.csv +31 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/products.csv +97 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/styles.csv +68 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/typography.csv +58 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/core.py +253 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py +114 -0
- package/.claude/skills/domain/product/requirements-clarity/SKILL.md +340 -0
- package/.claude/skills/skills-registry.yaml +103 -8
- package/README.md +107 -33
- package/README.npm.md +252 -0
- package/TUTORIAL.md +256 -0
- package/bin/agent-team.js +26 -7
- package/config/roles.yaml +107 -0
- package/docs/01-architecture.md +699 -0
- package/docs/02-setup-guide.md +634 -0
- package/docs/03-skills-guide.md +628 -0
- package/docs/04-workflows.md +792 -0
- package/docs/05-model-strategy.md +550 -0
- package/docs/06-extend-guide.md +1226 -0
- package/docs/07-quick-reference.md +578 -0
- package/docs/08-skills-discovery.md +342 -0
- package/docs/README.md +134 -0
- package/docs/rqm.md +560 -0
- package/package.json +10 -4
- package/scripts/postinstall.js +46 -0
- package/src/commands/add.js +131 -67
- package/src/commands/init.js +419 -9
- package/src/commands/list.js +20 -16
- package/src/commands/projects.js +127 -0
- package/src/commands/setup-hooks.js +261 -0
- package/src/index.js +0 -1
- package/src/utils/file-utils.js +147 -50
- package/src/utils/global-registry.js +224 -0
- package/templates/CLAUDE.md.tmpl +128 -20
- package/templates/MEMORY.md.tmpl +119 -0
- package/templates/agent.md.tmpl +205 -0
- package/templates/code/nestjs-controller.ts.tmpl +49 -0
- package/templates/code/nestjs-dto.ts.tmpl +63 -0
- package/templates/code/nestjs-service.ts.tmpl +45 -0
- package/templates/code/react-component.tsx.tmpl +24 -0
- package/templates/code/react-hook.ts.tmpl +54 -0
- package/templates/code/test.spec.ts.tmpl +50 -0
- package/templates/code/vue-component.vue.tmpl +49 -0
- package/templates/code/vue-composable.ts.tmpl +54 -0
- package/templates/knowledge.md.tmpl +152 -17
- package/templates/meeting-notes.md.tmpl +110 -0
- package/templates/memory/hooks.memory.json +50 -0
- package/templates/memory/settings.memory.json +16 -0
- package/templates/reports/bug-report.md.tmpl +164 -0
- package/templates/reports/code-review.md.tmpl +201 -0
- package/templates/reports/sprint-report.md.tmpl +218 -0
- package/templates/roles/ba.md +53 -0
- package/templates/roles/designer.md +82 -0
- package/templates/roles/dev-be.md +49 -0
- package/templates/roles/dev-fe.md +49 -0
- package/templates/roles/devops.md +53 -0
- package/templates/roles/pm.md +49 -0
- package/templates/roles/qa.md +53 -0
- package/templates/roles/sa.md +49 -0
- package/templates/roles/tech-lead.md +132 -0
- package/templates/skills/memory/memory-status.md +78 -0
- package/templates/skills/memory/recall.md +160 -0
- package/templates/skills/memory/reflect.md +168 -0
- package/templates/skills/memory/remember.md +105 -0
- package/templates/tasks/lessons.md.tmpl +77 -0
- package/templates/tasks/todo.md.tmpl +53 -0
- package/src/commands/switch.js +0 -53
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# Sequence Diagrams
|
|
2
|
+
|
|
3
|
+
Sequence diagrams show interactions between participants over time. They're ideal for API flows, authentication sequences, and system component interactions.
|
|
4
|
+
|
|
5
|
+
## Basic Syntax
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
sequenceDiagram
|
|
9
|
+
participant A
|
|
10
|
+
participant B
|
|
11
|
+
A->>B: Message
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Participants and Actors
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
sequenceDiagram
|
|
18
|
+
actor User
|
|
19
|
+
participant Frontend
|
|
20
|
+
participant API
|
|
21
|
+
participant Database
|
|
22
|
+
|
|
23
|
+
User->>Frontend: Click button
|
|
24
|
+
Frontend->>API: POST /data
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Difference:**
|
|
28
|
+
- `participant` - System components (services, classes, databases)
|
|
29
|
+
- `actor` - External entities (users, external systems)
|
|
30
|
+
|
|
31
|
+
## Message Types
|
|
32
|
+
|
|
33
|
+
### Solid Arrow (Synchronous)
|
|
34
|
+
```mermaid
|
|
35
|
+
sequenceDiagram
|
|
36
|
+
Client->>Server: Request
|
|
37
|
+
Server-->>Client: Response
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- `->>` Solid arrow (request)
|
|
41
|
+
- `-->>` Dotted arrow (response/return)
|
|
42
|
+
|
|
43
|
+
### Open Arrow (Asynchronous)
|
|
44
|
+
```mermaid
|
|
45
|
+
sequenceDiagram
|
|
46
|
+
Client-)Server: Async message
|
|
47
|
+
Server--)Client: Async response
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- `-)` Solid open arrow
|
|
51
|
+
- `--)` Dotted open arrow
|
|
52
|
+
|
|
53
|
+
### Cross/X (Delete)
|
|
54
|
+
```mermaid
|
|
55
|
+
sequenceDiagram
|
|
56
|
+
Client-xServer: Delete
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Activations
|
|
60
|
+
|
|
61
|
+
Show when a participant is actively processing:
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
sequenceDiagram
|
|
65
|
+
Client->>+Server: Request
|
|
66
|
+
Server->>+Database: Query
|
|
67
|
+
Database-->>-Server: Data
|
|
68
|
+
Server-->>-Client: Response
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- `+` after arrow activates
|
|
72
|
+
- `-` before arrow deactivates
|
|
73
|
+
|
|
74
|
+
## Alt/Else (Conditional Logic)
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
sequenceDiagram
|
|
78
|
+
User->>API: POST /login
|
|
79
|
+
API->>Database: Query user
|
|
80
|
+
Database-->>API: User data
|
|
81
|
+
|
|
82
|
+
alt Valid credentials
|
|
83
|
+
API-->>User: 200 OK + Token
|
|
84
|
+
else Invalid credentials
|
|
85
|
+
API-->>User: 401 Unauthorized
|
|
86
|
+
else Account locked
|
|
87
|
+
API-->>User: 403 Forbidden
|
|
88
|
+
end
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Opt (Optional)
|
|
92
|
+
|
|
93
|
+
```mermaid
|
|
94
|
+
sequenceDiagram
|
|
95
|
+
User->>API: POST /order
|
|
96
|
+
API->>PaymentService: Process payment
|
|
97
|
+
|
|
98
|
+
opt Payment successful
|
|
99
|
+
API->>EmailService: Send confirmation
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
API-->>User: Order result
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Par (Parallel)
|
|
106
|
+
|
|
107
|
+
Show concurrent operations:
|
|
108
|
+
|
|
109
|
+
```mermaid
|
|
110
|
+
sequenceDiagram
|
|
111
|
+
API->>Service: Process order
|
|
112
|
+
|
|
113
|
+
par Send email
|
|
114
|
+
Service->>EmailService: Send confirmation
|
|
115
|
+
and Update inventory
|
|
116
|
+
Service->>InventoryService: Reduce stock
|
|
117
|
+
and Log event
|
|
118
|
+
Service->>LogService: Log order
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
Service-->>API: Complete
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Loop
|
|
125
|
+
|
|
126
|
+
```mermaid
|
|
127
|
+
sequenceDiagram
|
|
128
|
+
Client->>Server: Request batch
|
|
129
|
+
|
|
130
|
+
loop For each item
|
|
131
|
+
Server->>Database: Process item
|
|
132
|
+
Database-->>Server: Result
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
Server-->>Client: All results
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Loop with condition:**
|
|
139
|
+
```mermaid
|
|
140
|
+
sequenceDiagram
|
|
141
|
+
loop Every 5 seconds
|
|
142
|
+
Monitor->>API: Health check
|
|
143
|
+
API-->>Monitor: Status
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Break (Early Exit)
|
|
148
|
+
|
|
149
|
+
```mermaid
|
|
150
|
+
sequenceDiagram
|
|
151
|
+
User->>API: Submit form
|
|
152
|
+
API->>Validator: Validate input
|
|
153
|
+
|
|
154
|
+
break Input invalid
|
|
155
|
+
API-->>User: 400 Bad Request
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
API->>Database: Save data
|
|
159
|
+
Database-->>API: Success
|
|
160
|
+
API-->>User: 200 OK
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Notes
|
|
164
|
+
|
|
165
|
+
### Note over single participant
|
|
166
|
+
```mermaid
|
|
167
|
+
sequenceDiagram
|
|
168
|
+
User->>API: Request
|
|
169
|
+
Note over API: Validates JWT token
|
|
170
|
+
API-->>User: Response
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Note spanning participants
|
|
174
|
+
```mermaid
|
|
175
|
+
sequenceDiagram
|
|
176
|
+
Frontend->>API: Request
|
|
177
|
+
Note over Frontend,API: HTTPS encrypted
|
|
178
|
+
API-->>Frontend: Response
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Right/Left notes
|
|
182
|
+
```mermaid
|
|
183
|
+
sequenceDiagram
|
|
184
|
+
User->>System: Action
|
|
185
|
+
Note right of System: Logs to database
|
|
186
|
+
System-->>User: Response
|
|
187
|
+
Note left of User: Updates UI
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Sequence Numbers
|
|
191
|
+
|
|
192
|
+
Automatically number messages:
|
|
193
|
+
|
|
194
|
+
```mermaid
|
|
195
|
+
sequenceDiagram
|
|
196
|
+
autonumber
|
|
197
|
+
|
|
198
|
+
User->>Frontend: Login
|
|
199
|
+
Frontend->>API: Authenticate
|
|
200
|
+
API->>Database: Verify credentials
|
|
201
|
+
Database-->>API: User data
|
|
202
|
+
API-->>Frontend: JWT token
|
|
203
|
+
Frontend-->>User: Success
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Links and Tooltips
|
|
207
|
+
|
|
208
|
+
Add clickable links:
|
|
209
|
+
|
|
210
|
+
```mermaid
|
|
211
|
+
sequenceDiagram
|
|
212
|
+
participant A as Service A
|
|
213
|
+
link A: Dashboard @ https://dashboard.example.com
|
|
214
|
+
link A: API Docs @ https://docs.example.com
|
|
215
|
+
|
|
216
|
+
A->>B: Message
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Comprehensive Example: User Authentication Flow
|
|
220
|
+
|
|
221
|
+
```mermaid
|
|
222
|
+
sequenceDiagram
|
|
223
|
+
autonumber
|
|
224
|
+
actor User
|
|
225
|
+
participant Frontend
|
|
226
|
+
participant AuthAPI
|
|
227
|
+
participant Database
|
|
228
|
+
participant Redis
|
|
229
|
+
participant EmailService
|
|
230
|
+
|
|
231
|
+
User->>+Frontend: Enter credentials
|
|
232
|
+
Frontend->>+AuthAPI: POST /auth/login
|
|
233
|
+
|
|
234
|
+
AuthAPI->>+Database: Query user by email
|
|
235
|
+
Database-->>-AuthAPI: User record
|
|
236
|
+
|
|
237
|
+
alt User not found
|
|
238
|
+
AuthAPI-->>Frontend: 404 User not found
|
|
239
|
+
Frontend-->>User: Show error
|
|
240
|
+
else User found
|
|
241
|
+
AuthAPI->>AuthAPI: Verify password hash
|
|
242
|
+
|
|
243
|
+
alt Invalid password
|
|
244
|
+
AuthAPI->>Database: Increment failed attempts
|
|
245
|
+
|
|
246
|
+
opt Failed attempts > 5
|
|
247
|
+
AuthAPI->>Database: Lock account
|
|
248
|
+
AuthAPI->>EmailService: Send security alert
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
AuthAPI-->>Frontend: 401 Invalid credentials
|
|
252
|
+
Frontend-->>User: Show error
|
|
253
|
+
else Valid password
|
|
254
|
+
AuthAPI->>AuthAPI: Generate JWT token
|
|
255
|
+
AuthAPI->>+Redis: Store session
|
|
256
|
+
Redis-->>-AuthAPI: Confirm
|
|
257
|
+
|
|
258
|
+
par Update login metadata
|
|
259
|
+
AuthAPI->>Database: Update last_login
|
|
260
|
+
and Track analytics
|
|
261
|
+
AuthAPI->>Database: Log login event
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
AuthAPI-->>-Frontend: 200 OK + JWT token
|
|
265
|
+
Frontend->>Frontend: Store token in localStorage
|
|
266
|
+
Frontend-->>-User: Redirect to dashboard
|
|
267
|
+
|
|
268
|
+
opt First login
|
|
269
|
+
EmailService->>User: Welcome email
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## API Request/Response Example
|
|
276
|
+
|
|
277
|
+
```mermaid
|
|
278
|
+
sequenceDiagram
|
|
279
|
+
autonumber
|
|
280
|
+
participant Client
|
|
281
|
+
participant Gateway
|
|
282
|
+
participant AuthService
|
|
283
|
+
participant UserService
|
|
284
|
+
participant Database
|
|
285
|
+
|
|
286
|
+
Client->>+Gateway: GET /api/users/123
|
|
287
|
+
Note over Gateway: Rate limiting check
|
|
288
|
+
|
|
289
|
+
Gateway->>+AuthService: Validate JWT
|
|
290
|
+
AuthService->>AuthService: Verify signature
|
|
291
|
+
|
|
292
|
+
alt Token invalid or expired
|
|
293
|
+
AuthService-->>Gateway: 401 Unauthorized
|
|
294
|
+
Gateway-->>Client: 401 Unauthorized
|
|
295
|
+
else Token valid
|
|
296
|
+
AuthService-->>-Gateway: User context
|
|
297
|
+
|
|
298
|
+
Gateway->>+UserService: GET /users/123
|
|
299
|
+
UserService->>+Database: SELECT * FROM users WHERE id=123
|
|
300
|
+
Database-->>-UserService: User record
|
|
301
|
+
|
|
302
|
+
alt User not found
|
|
303
|
+
UserService-->>Gateway: 404 Not Found
|
|
304
|
+
Gateway-->>Client: 404 Not Found
|
|
305
|
+
else User found
|
|
306
|
+
UserService-->>-Gateway: 200 OK + User data
|
|
307
|
+
Gateway-->>-Client: 200 OK + User data
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Microservices Communication
|
|
313
|
+
|
|
314
|
+
```mermaid
|
|
315
|
+
sequenceDiagram
|
|
316
|
+
actor User
|
|
317
|
+
participant Gateway
|
|
318
|
+
participant OrderService
|
|
319
|
+
participant PaymentService
|
|
320
|
+
participant InventoryService
|
|
321
|
+
participant NotificationService
|
|
322
|
+
participant MessageQueue
|
|
323
|
+
|
|
324
|
+
User->>+Gateway: POST /orders
|
|
325
|
+
Gateway->>+OrderService: Create order
|
|
326
|
+
|
|
327
|
+
OrderService->>+InventoryService: Check stock
|
|
328
|
+
InventoryService-->>-OrderService: Stock available
|
|
329
|
+
|
|
330
|
+
break Insufficient stock
|
|
331
|
+
OrderService-->>Gateway: 400 Out of stock
|
|
332
|
+
Gateway-->>User: Error message
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
OrderService->>OrderService: Reserve order
|
|
336
|
+
OrderService->>+PaymentService: Charge customer
|
|
337
|
+
|
|
338
|
+
alt Payment successful
|
|
339
|
+
PaymentService-->>-OrderService: Payment confirmed
|
|
340
|
+
OrderService->>MessageQueue: Publish OrderConfirmed event
|
|
341
|
+
|
|
342
|
+
par Async processing
|
|
343
|
+
MessageQueue->>InventoryService: Reduce stock
|
|
344
|
+
and
|
|
345
|
+
MessageQueue->>NotificationService: Send confirmation
|
|
346
|
+
NotificationService->>User: Email confirmation
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
OrderService-->>-Gateway: 201 Created
|
|
350
|
+
Gateway-->>User: Order confirmed
|
|
351
|
+
else Payment failed
|
|
352
|
+
PaymentService-->>OrderService: Payment declined
|
|
353
|
+
OrderService->>OrderService: Release reservation
|
|
354
|
+
OrderService-->>Gateway: 402 Payment Required
|
|
355
|
+
Gateway-->>User: Payment failed
|
|
356
|
+
end
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## Best Practices
|
|
360
|
+
|
|
361
|
+
1. **Order participants logically** - Typically: User → Frontend → Backend → Database
|
|
362
|
+
2. **Use activations** - Shows when components are actively processing
|
|
363
|
+
3. **Group related logic** - Use alt/opt/par to organize conditional flows
|
|
364
|
+
4. **Add descriptive notes** - Explain complex logic or important details
|
|
365
|
+
5. **Keep diagrams focused** - One scenario per diagram
|
|
366
|
+
6. **Number messages** - Use autonumber for complex flows
|
|
367
|
+
7. **Show error paths** - Document failure scenarios with alt/else
|
|
368
|
+
8. **Indicate async operations** - Use open arrows for fire-and-forget messages
|
|
369
|
+
|
|
370
|
+
## Common Use Cases
|
|
371
|
+
|
|
372
|
+
### Authentication
|
|
373
|
+
- Login flows
|
|
374
|
+
- OAuth/SSO flows
|
|
375
|
+
- Token refresh
|
|
376
|
+
- Password reset
|
|
377
|
+
|
|
378
|
+
### API Operations
|
|
379
|
+
- CRUD operations
|
|
380
|
+
- Search and filtering
|
|
381
|
+
- Batch processing
|
|
382
|
+
- Webhook handling
|
|
383
|
+
|
|
384
|
+
### System Integration
|
|
385
|
+
- Microservice communication
|
|
386
|
+
- Third-party API calls
|
|
387
|
+
- Message queue processing
|
|
388
|
+
- Event-driven architecture
|
|
389
|
+
|
|
390
|
+
### Business Processes
|
|
391
|
+
- Order fulfillment
|
|
392
|
+
- Payment processing
|
|
393
|
+
- Approval workflows
|
|
394
|
+
- Notification chains
|
|
@@ -1,41 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testing-be
|
|
3
3
|
description: |
|
|
4
|
-
Backend testing
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
version: 1.0.0
|
|
4
|
+
Backend testing from developer perspective: Unit Tests, Integration Tests,
|
|
5
|
+
Functional Tests, API Tests. Use when writing tests for your own code.
|
|
6
|
+
NOT for E2E/QA testing (that's QA domain). Test behavior, not implementation.
|
|
7
|
+
version: 1.1.0
|
|
9
8
|
category: backend
|
|
10
9
|
tags:
|
|
11
10
|
- testing
|
|
12
11
|
- unit-test
|
|
13
12
|
- integration-test
|
|
13
|
+
- functional-test
|
|
14
14
|
- api-test
|
|
15
15
|
depends_on:
|
|
16
16
|
- code-review
|
|
17
17
|
- api-design
|
|
18
18
|
recommends: []
|
|
19
|
-
used_by:
|
|
19
|
+
used_by:
|
|
20
|
+
- dev-be
|
|
20
21
|
---
|
|
21
22
|
|
|
22
|
-
# Skill: Testing BE
|
|
23
|
+
# Skill: Testing BE (Developer Perspective)
|
|
23
24
|
|
|
24
25
|
## Core Principle
|
|
25
|
-
**Test behavior, not implementation.**
|
|
26
|
+
**Test behavior, not implementation.** As a developer, you test YOUR code to ensure it works correctly. E2E testing is QA's responsibility.
|
|
26
27
|
|
|
27
|
-
## Testing Pyramid
|
|
28
|
+
## Testing Pyramid (Developer Focus)
|
|
28
29
|
|
|
29
30
|
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
▲
|
|
32
|
+
/API\ Some, medium speed (Integration)
|
|
33
|
+
/─────\
|
|
34
|
+
/Functional\ Many, fast
|
|
35
|
+
/────────────\
|
|
36
|
+
/ Unit \ Many, very fast
|
|
37
|
+
/────────────────\
|
|
37
38
|
```
|
|
38
39
|
|
|
40
|
+
**Note:** E2E testing is NOT included - that's QA/Tester domain, not developer responsibility.
|
|
41
|
+
|
|
39
42
|
## Hard Rules
|
|
40
43
|
|
|
41
44
|
1. **NEVER test implementation** - Test behavior/output
|
|
@@ -43,9 +46,12 @@ used_by: []
|
|
|
43
46
|
3. **ALWAYS clean up resources** - Close connections, delete data
|
|
44
47
|
4. **ALWAYS use descriptive names** - `should_..._when_...`
|
|
45
48
|
5. **ALWAYS mock external services** - No real API calls
|
|
49
|
+
6. **NO E2E tests** - That's QA domain, not dev responsibility
|
|
46
50
|
|
|
47
51
|
## Unit Tests
|
|
48
52
|
|
|
53
|
+
Test individual functions and classes in isolation.
|
|
54
|
+
|
|
49
55
|
```typescript
|
|
50
56
|
// userService.test.ts
|
|
51
57
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
@@ -87,6 +93,8 @@ describe('UserService', () => {
|
|
|
87
93
|
|
|
88
94
|
## Integration Tests
|
|
89
95
|
|
|
96
|
+
Test how multiple components work together.
|
|
97
|
+
|
|
90
98
|
```typescript
|
|
91
99
|
// api.test.ts
|
|
92
100
|
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
@@ -94,7 +102,7 @@ import { FastifyInstance } from 'fastify';
|
|
|
94
102
|
import { buildApp } from './app';
|
|
95
103
|
import { prisma } from './db';
|
|
96
104
|
|
|
97
|
-
describe('User API', () => {
|
|
105
|
+
describe('User API Integration', () => {
|
|
98
106
|
let app: FastifyInstance;
|
|
99
107
|
|
|
100
108
|
beforeAll(async () => {
|
|
@@ -128,6 +136,100 @@ describe('User API', () => {
|
|
|
128
136
|
});
|
|
129
137
|
```
|
|
130
138
|
|
|
139
|
+
## Functional Tests
|
|
140
|
+
|
|
141
|
+
Test complete features and business logic.
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
// orderService.functional.test.ts
|
|
145
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
146
|
+
import { OrderService } from './orderService';
|
|
147
|
+
import { InventoryService } from './inventoryService';
|
|
148
|
+
import { PaymentService } from './paymentService';
|
|
149
|
+
|
|
150
|
+
describe('OrderService Functional Tests', () => {
|
|
151
|
+
let orderService: OrderService;
|
|
152
|
+
let inventoryService: InventoryService;
|
|
153
|
+
let paymentService: PaymentService;
|
|
154
|
+
|
|
155
|
+
beforeEach(() => {
|
|
156
|
+
inventoryService = new InventoryService();
|
|
157
|
+
paymentService = new PaymentService();
|
|
158
|
+
orderService = new OrderService(inventoryService, paymentService);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it('should create order when inventory available', async () => {
|
|
162
|
+
const orderData = {
|
|
163
|
+
productId: 'prod-1',
|
|
164
|
+
quantity: 2,
|
|
165
|
+
userId: 'user-1',
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const result = await orderService.createOrder(orderData);
|
|
169
|
+
|
|
170
|
+
expect(result.status).toBe('confirmed');
|
|
171
|
+
expect(result.quantity).toBe(2);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('should fail when insufficient inventory', async () => {
|
|
175
|
+
const orderData = {
|
|
176
|
+
productId: 'prod-out-of-stock',
|
|
177
|
+
quantity: 100,
|
|
178
|
+
userId: 'user-1',
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
await expect(orderService.createOrder(orderData)).rejects.toThrow('Insufficient inventory');
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('should handle payment failure gracefully', async () => {
|
|
185
|
+
const orderData = {
|
|
186
|
+
productId: 'prod-1',
|
|
187
|
+
quantity: 1,
|
|
188
|
+
userId: 'user-payment-fail',
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
await expect(orderService.createOrder(orderData)).rejects.toThrow('Payment failed');
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## API Tests
|
|
197
|
+
|
|
198
|
+
Test HTTP endpoints directly.
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// auth.api.test.ts
|
|
202
|
+
import { describe, it, expect } from 'vitest';
|
|
203
|
+
import request from 'supertest';
|
|
204
|
+
import { app } from './app';
|
|
205
|
+
|
|
206
|
+
describe('Auth API', () => {
|
|
207
|
+
it('POST /auth/login should return token', async () => {
|
|
208
|
+
const response = await request(app)
|
|
209
|
+
.post('/auth/login')
|
|
210
|
+
.send({ email: 'test@example.com', password: 'password123' });
|
|
211
|
+
|
|
212
|
+
expect(response.status).toBe(200);
|
|
213
|
+
expect(response.body).toHaveProperty('token');
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('POST /auth/login should reject invalid credentials', async () => {
|
|
217
|
+
const response = await request(app)
|
|
218
|
+
.post('/auth/login')
|
|
219
|
+
.send({ email: 'test@example.com', password: 'wrong' });
|
|
220
|
+
|
|
221
|
+
expect(response.status).toBe(401);
|
|
222
|
+
expect(response.body).toHaveProperty('error');
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('GET /protected should require auth', async () => {
|
|
226
|
+
const response = await request(app).get('/protected');
|
|
227
|
+
|
|
228
|
+
expect(response.status).toBe(401);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
131
233
|
## Test Database
|
|
132
234
|
|
|
133
235
|
```typescript
|
|
@@ -167,6 +269,7 @@ afterAll(async () => {
|
|
|
167
269
|
| Real external APIs | Mock them |
|
|
168
270
|
| Slow tests | Use in-memory DB |
|
|
169
271
|
| Flaky tests | Fix or delete |
|
|
272
|
+
| Writing E2E tests | That's QA domain |
|
|
170
273
|
|
|
171
274
|
## Mocking Patterns
|
|
172
275
|
|
|
@@ -201,3 +304,4 @@ it('should_create_order_when_valid_request')
|
|
|
201
304
|
- [ ] Descriptive test names
|
|
202
305
|
- [ ] Fast test execution
|
|
203
306
|
- [ ] CI integration
|
|
307
|
+
- [ ] NO E2E tests (that's QA domain)
|