superkit-mcp-server 1.2.1 → 1.2.3

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 (170) hide show
  1. package/ARCHITECTURE.md +102 -102
  2. package/README.md +71 -71
  3. package/SUPERKIT.md +168 -168
  4. package/agents/code-archaeologist.md +106 -106
  5. package/agents/coder.md +90 -90
  6. package/agents/data-engineer.md +28 -28
  7. package/agents/devops-engineer.md +242 -242
  8. package/agents/git-manager.md +203 -203
  9. package/agents/orchestrator.md +420 -420
  10. package/agents/penetration-tester.md +188 -188
  11. package/agents/performance-optimizer.md +187 -187
  12. package/agents/planner.md +270 -270
  13. package/agents/qa-automation-engineer.md +103 -103
  14. package/agents/quant-developer.md +32 -32
  15. package/agents/reviewer.md +100 -100
  16. package/agents/scout.md +222 -222
  17. package/agents/security-auditor.md +3 -2
  18. package/agents/tester.md +274 -274
  19. package/agents/ui-designer.md +208 -208
  20. package/build/index.js +21 -2
  21. package/build/tools/__tests__/loggerTools.test.js +5 -5
  22. package/build/tools/archTools.js +2 -19
  23. package/build/tools/autoPreview.js +2 -2
  24. package/build/tools/compoundTools.js +4 -4
  25. package/build/tools/docsTools.js +5 -10
  26. package/build/tools/loggerTools.js +1 -1
  27. package/build/tools/todoTools.js +39 -39
  28. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  29. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  30. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  31. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  32. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  33. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  34. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  35. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  36. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  37. package/build/tools/validators/convertRules.js +2 -2
  38. package/commands/README.md +122 -122
  39. package/commands/ask.toml +72 -72
  40. package/commands/brainstorm.toml +119 -119
  41. package/commands/chat.toml +77 -77
  42. package/commands/code-preview.toml +37 -37
  43. package/commands/code.toml +28 -28
  44. package/commands/content.toml +200 -200
  45. package/commands/cook.toml +77 -77
  46. package/commands/copywrite.toml +131 -131
  47. package/commands/db.toml +192 -192
  48. package/commands/debug.toml +166 -166
  49. package/commands/design.toml +158 -158
  50. package/commands/dev-rules.toml +14 -14
  51. package/commands/do.toml +117 -117
  52. package/commands/doc-rules.toml +14 -14
  53. package/commands/docs.toml +148 -148
  54. package/commands/fix.toml +440 -440
  55. package/commands/fullstack.toml +175 -175
  56. package/commands/git.toml +235 -235
  57. package/commands/help.toml +84 -84
  58. package/commands/integrate.toml +127 -127
  59. package/commands/journal.toml +136 -136
  60. package/commands/kit-setup.toml +40 -40
  61. package/commands/mcp.toml +183 -183
  62. package/commands/orchestration.toml +15 -15
  63. package/commands/plan.toml +171 -171
  64. package/commands/pm.toml +148 -148
  65. package/commands/pr.toml +50 -50
  66. package/commands/project.toml +32 -32
  67. package/commands/research.toml +117 -117
  68. package/commands/review-pr.toml +63 -63
  69. package/commands/review.toml +190 -190
  70. package/commands/scout-ext.toml +97 -97
  71. package/commands/scout.toml +79 -79
  72. package/commands/screenshot.toml +65 -65
  73. package/commands/session.toml +102 -102
  74. package/commands/skill.toml +384 -384
  75. package/commands/status.toml +22 -22
  76. package/commands/team.toml +56 -56
  77. package/commands/test.toml +164 -164
  78. package/commands/ticket.toml +70 -70
  79. package/commands/use.toml +106 -106
  80. package/commands/video.toml +83 -83
  81. package/commands/watzup.toml +71 -71
  82. package/commands/workflow.toml +14 -14
  83. package/package.json +35 -35
  84. package/skills/meta/README.md +30 -30
  85. package/skills/meta/api-design/SKILL.md +134 -134
  86. package/skills/meta/code-review/SKILL.md +44 -44
  87. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  88. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  89. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  90. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  91. package/skills/meta/compound-docs/SKILL.md +133 -133
  92. package/skills/meta/debug/SKILL.md +40 -40
  93. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  94. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  95. package/skills/meta/docker/SKILL.md +126 -126
  96. package/skills/meta/examples/supabase/SKILL.md +46 -46
  97. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  98. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  99. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  100. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  101. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  102. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  103. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  104. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  105. package/skills/meta/file-todos/SKILL.md +88 -88
  106. package/skills/meta/mobile/SKILL.md +140 -140
  107. package/skills/meta/nextjs/SKILL.md +101 -101
  108. package/skills/meta/performance/SKILL.md +130 -130
  109. package/skills/meta/react-patterns/SKILL.md +83 -83
  110. package/skills/meta/security/SKILL.md +114 -114
  111. package/skills/meta/session-resume/SKILL.md +96 -96
  112. package/skills/meta/tailwind/SKILL.md +139 -139
  113. package/skills/meta/testing/SKILL.md +43 -43
  114. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  115. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  116. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  117. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  118. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  119. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  120. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  121. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  122. package/skills/tech/alpha-vantage/references/options.md +93 -93
  123. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  124. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  125. package/skills/tech/doc.md +6 -6
  126. package/skills/tech/financial-modeling/SKILL.md +18 -18
  127. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  128. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  129. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  130. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  131. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  132. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  133. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  134. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  135. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  136. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  137. package/skills/workflows/README.md +203 -203
  138. package/skills/workflows/adr.md +174 -174
  139. package/skills/workflows/changelog.md +74 -74
  140. package/skills/workflows/compound.md +323 -323
  141. package/skills/workflows/compound_health.md +74 -74
  142. package/skills/workflows/create-agent-skill.md +138 -139
  143. package/skills/workflows/cycle.md +144 -144
  144. package/skills/workflows/deploy-docs.md +84 -84
  145. package/skills/workflows/development-rules.md +42 -42
  146. package/skills/workflows/doc.md +95 -95
  147. package/skills/workflows/documentation-management.md +34 -34
  148. package/skills/workflows/explore.md +146 -146
  149. package/skills/workflows/generate_command.md +106 -106
  150. package/skills/workflows/heal-skill.md +97 -97
  151. package/skills/workflows/housekeeping.md +229 -229
  152. package/skills/workflows/kit-setup.md +102 -102
  153. package/skills/workflows/map-codebase.md +78 -78
  154. package/skills/workflows/orchestration-protocol.md +43 -43
  155. package/skills/workflows/plan-compound.md +439 -439
  156. package/skills/workflows/plan_review.md +269 -269
  157. package/skills/workflows/primary-workflow.md +37 -37
  158. package/skills/workflows/promote_pattern.md +86 -86
  159. package/skills/workflows/release-docs.md +82 -82
  160. package/skills/workflows/report-bug.md +135 -135
  161. package/skills/workflows/reproduce-bug.md +118 -118
  162. package/skills/workflows/resolve_pr.md +133 -133
  163. package/skills/workflows/resolve_todo.md +128 -128
  164. package/skills/workflows/review-compound.md +376 -376
  165. package/skills/workflows/skill-review.md +127 -127
  166. package/skills/workflows/specs.md +257 -257
  167. package/skills/workflows/triage-sprint.md +102 -102
  168. package/skills/workflows/triage.md +152 -152
  169. package/skills/workflows/work.md +399 -399
  170. package/skills/workflows/xcode-test.md +93 -93
package/agents/tester.md CHANGED
@@ -1,274 +1,274 @@
1
- # Tester Agent
2
-
3
- ## Role
4
- Write tests and ensure code quality.
5
-
6
- ## When to Use
7
- - Write unit tests
8
- - Integration tests
9
- - E2E tests
10
- - Test edge cases
11
- - Verify bug fixes
12
-
13
- ## Capabilities
14
-
15
- ### 1. Unit Testing
16
- - Test individual functions
17
- - Mock dependencies
18
- - Cover edge cases
19
- - Assert expected outcomes
20
-
21
- ### 2. Integration Testing
22
- - Test component interactions
23
- - API endpoint tests
24
- - Database integration
25
-
26
- ### 3. E2E Testing
27
- - User flow testing
28
- - Browser automation
29
- - Cross-browser testing
30
-
31
- ### 4. Test Strategy
32
- - Identify test cases
33
- - Prioritize by risk
34
- - Coverage analysis
35
-
36
- ## Test Patterns
37
-
38
- ### Unit Test Structure
39
- ```typescript
40
- describe('UserService', () => {
41
- describe('createUser', () => {
42
- it('should create user with valid data', async () => {
43
- // Arrange
44
- const userData = { name: 'John', email: 'john@test.com' };
45
-
46
- // Act
47
- const result = await userService.createUser(userData);
48
-
49
- // Assert
50
- expect(result.id).toBeDefined();
51
- expect(result.name).toBe('John');
52
- });
53
-
54
- it('should throw error for invalid email', async () => {
55
- // Arrange
56
- const userData = { name: 'John', email: 'invalid' };
57
-
58
- // Act & Assert
59
- await expect(userService.createUser(userData))
60
- .rejects.toThrow('Invalid email');
61
- });
62
- });
63
- });
64
- ```
65
-
66
- ### Mock Pattern
67
- ```typescript
68
- // Mock external service
69
- jest.mock('./emailService');
70
- const mockSendEmail = emailService.send as jest.Mock;
71
- mockSendEmail.mockResolvedValue({ success: true });
72
-
73
- // Verify mock called
74
- expect(mockSendEmail).toHaveBeenCalledWith({
75
- to: 'user@test.com',
76
- subject: 'Welcome'
77
- });
78
- ```
79
-
80
- ## Vitest Patterns
81
-
82
- > This project uses **Vitest** - API similar to Jest but faster.
83
-
84
- ### Basic Vitest Test
85
- ```typescript
86
- import { describe, it, expect, vi, beforeEach } from 'vitest';
87
- import { createUser } from '../user';
88
-
89
- describe('createUser', () => {
90
- it('should create user successfully', async () => {
91
- const user = await createUser({ name: 'John' });
92
- expect(user.id).toBeDefined();
93
- });
94
- });
95
- ```
96
-
97
- ### Vitest Mocking
98
- ```typescript
99
- import { vi } from 'vitest';
100
-
101
- // Mock module
102
- vi.mock('./emailService', () => ({
103
- sendEmail: vi.fn().mockResolvedValue({ success: true })
104
- }));
105
-
106
- // Spy on function
107
- const spy = vi.spyOn(console, 'log');
108
- spy.mockImplementation(() => {});
109
-
110
- // Clear mocks
111
- beforeEach(() => {
112
- vi.clearAllMocks();
113
- });
114
- ```
115
-
116
- ### Vitest vs Jest Cheatsheet
117
- | Jest | Vitest |
118
- |------|--------|
119
- | `jest.fn()` | `vi.fn()` |
120
- | `jest.mock()` | `vi.mock()` |
121
- | `jest.spyOn()` | `vi.spyOn()` |
122
- | `jest.useFakeTimers()` | `vi.useFakeTimers()` |
123
-
124
- ## Snapshot Testing
125
-
126
- ### When to Use Snapshots
127
- ✅ UI component output
128
- ✅ API response structure
129
- ✅ Config file generation
130
- ❌ Frequently changing data
131
- ❌ Random/date values
132
-
133
- ### Snapshot Example
134
- ```typescript
135
- import { describe, it, expect } from 'vitest';
136
-
137
- describe('UserCard', () => {
138
- it('should render correctly', () => {
139
- const html = renderUserCard({ name: 'John', role: 'Admin' });
140
- expect(html).toMatchSnapshot();
141
- });
142
- });
143
- ```
144
-
145
- ### Inline Snapshots
146
- ```typescript
147
- it('should format date', () => {
148
- expect(formatDate('2024-12-15')).toMatchInlineSnapshot(`"Dec 15, 2024"`);
149
- });
150
- ```
151
-
152
- ### Update Snapshots
153
- ```bash
154
- # Update all snapshots
155
- npm test -- -u
156
-
157
- # Update specific test
158
- npm test -- user.test.ts -u
159
- ```
160
-
161
- ## Test Coverage Targets
162
- | Type | Target |
163
- |------|--------|
164
- | Unit | 80%+ |
165
- | Integration | 60%+ |
166
- | E2E | Critical paths |
167
-
168
- ## Fake Timers
169
-
170
- ### Control Time in Tests
171
- ```typescript
172
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
173
-
174
- describe('Timer tests', () => {
175
- beforeEach(() => {
176
- vi.useFakeTimers();
177
- });
178
-
179
- afterEach(() => {
180
- vi.useRealTimers();
181
- });
182
-
183
- it('should call callback after delay', () => {
184
- const callback = vi.fn();
185
- setTimeout(callback, 1000);
186
-
187
- vi.advanceTimersByTime(1000);
188
- expect(callback).toHaveBeenCalled();
189
- });
190
-
191
- it('should work with dates', () => {
192
- vi.setSystemTime(new Date('2024-12-15'));
193
- expect(new Date().toISOString()).toContain('2024-12-15');
194
- });
195
- });
196
- ```
197
-
198
- ## API Mocking with MSW
199
-
200
- ### Mock Service Worker Setup
201
- ```typescript
202
- // mocks/handlers.ts
203
- import { http, HttpResponse } from 'msw';
204
-
205
- export const handlers = [
206
- http.get('/api/users', () => {
207
- return HttpResponse.json([
208
- { id: 1, name: 'John' },
209
- { id: 2, name: 'Jane' }
210
- ]);
211
- }),
212
-
213
- http.post('/api/users', async ({ request }) => {
214
- const body = await request.json();
215
- return HttpResponse.json({ id: 3, ...body }, { status: 201 });
216
- }),
217
- ];
218
- ```
219
-
220
- ### Use in Tests
221
- ```typescript
222
- // vitest.setup.ts
223
- import { setupServer } from 'msw/node';
224
- import { handlers } from './mocks/handlers';
225
-
226
- const server = setupServer(...handlers);
227
-
228
- beforeAll(() => server.listen());
229
- afterEach(() => server.resetHandlers());
230
- afterAll(() => server.close());
231
- ```
232
-
233
- ## Best Practices
234
- 1. AAA pattern: Arrange, Act, Assert
235
- 2. One assertion per test (ideally)
236
- 3. Descriptive test names
237
- 4. Test behavior, not implementation
238
- 5. Don't test external libraries
239
- 6. **Use Vitest for new tests**
240
- 7. **Snapshot for UI components**
241
- 8. **Use MSW for API mocking**
242
- 9. **Fake timers for time-dependent code**
243
-
244
- ## AI Prompting Tips
245
-
246
- When using AI to write tests:
247
-
248
- ```markdown
249
- ## Prompt Template
250
-
251
- "Write unit test for function [function name] in file [path].
252
- - Framework: Vitest
253
- - Mock: [dependencies to mock]
254
- - Cases: [happy path, error cases, edge cases]
255
- - Style: AAA pattern"
256
- ```
257
-
258
- ### Effective Prompt Examples
259
-
260
- ❌ **Bad:** "Write test for user.ts"
261
-
262
- ✅ **Good:** "Write Vitest unit tests for `createUser` function in `src/services/user.ts`. Mock database calls with vi.mock. Cover: valid input, invalid email, duplicate user."
263
-
264
- ### Tips
265
- 1. Specify framework (Vitest/Jest)
266
- 2. List specific test cases
267
- 3. Specify dependencies to mock
268
- 4. Mention AAA pattern if structure needed
269
-
270
- ## Related Agents
271
- - **Coder** - write code with tests
272
- - **Reviewer** - review test quality
273
-
274
-
1
+ # Tester Agent
2
+
3
+ ## Role
4
+ Write tests and ensure code quality.
5
+
6
+ ## When to Use
7
+ - Write unit tests
8
+ - Integration tests
9
+ - E2E tests
10
+ - Test edge cases
11
+ - Verify bug fixes
12
+
13
+ ## Capabilities
14
+
15
+ ### 1. Unit Testing
16
+ - Test individual functions
17
+ - Mock dependencies
18
+ - Cover edge cases
19
+ - Assert expected outcomes
20
+
21
+ ### 2. Integration Testing
22
+ - Test component interactions
23
+ - API endpoint tests
24
+ - Database integration
25
+
26
+ ### 3. E2E Testing
27
+ - User flow testing
28
+ - Browser automation
29
+ - Cross-browser testing
30
+
31
+ ### 4. Test Strategy
32
+ - Identify test cases
33
+ - Prioritize by risk
34
+ - Coverage analysis
35
+
36
+ ## Test Patterns
37
+
38
+ ### Unit Test Structure
39
+ ```typescript
40
+ describe('UserService', () => {
41
+ describe('createUser', () => {
42
+ it('should create user with valid data', async () => {
43
+ // Arrange
44
+ const userData = { name: 'John', email: 'john@test.com' };
45
+
46
+ // Act
47
+ const result = await userService.createUser(userData);
48
+
49
+ // Assert
50
+ expect(result.id).toBeDefined();
51
+ expect(result.name).toBe('John');
52
+ });
53
+
54
+ it('should throw error for invalid email', async () => {
55
+ // Arrange
56
+ const userData = { name: 'John', email: 'invalid' };
57
+
58
+ // Act & Assert
59
+ await expect(userService.createUser(userData))
60
+ .rejects.toThrow('Invalid email');
61
+ });
62
+ });
63
+ });
64
+ ```
65
+
66
+ ### Mock Pattern
67
+ ```typescript
68
+ // Mock external service
69
+ jest.mock('./emailService');
70
+ const mockSendEmail = emailService.send as jest.Mock;
71
+ mockSendEmail.mockResolvedValue({ success: true });
72
+
73
+ // Verify mock called
74
+ expect(mockSendEmail).toHaveBeenCalledWith({
75
+ to: 'user@test.com',
76
+ subject: 'Welcome'
77
+ });
78
+ ```
79
+
80
+ ## Vitest Patterns
81
+
82
+ > This project uses **Vitest** - API similar to Jest but faster.
83
+
84
+ ### Basic Vitest Test
85
+ ```typescript
86
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
87
+ import { createUser } from '../user';
88
+
89
+ describe('createUser', () => {
90
+ it('should create user successfully', async () => {
91
+ const user = await createUser({ name: 'John' });
92
+ expect(user.id).toBeDefined();
93
+ });
94
+ });
95
+ ```
96
+
97
+ ### Vitest Mocking
98
+ ```typescript
99
+ import { vi } from 'vitest';
100
+
101
+ // Mock module
102
+ vi.mock('./emailService', () => ({
103
+ sendEmail: vi.fn().mockResolvedValue({ success: true })
104
+ }));
105
+
106
+ // Spy on function
107
+ const spy = vi.spyOn(console, 'log');
108
+ spy.mockImplementation(() => {});
109
+
110
+ // Clear mocks
111
+ beforeEach(() => {
112
+ vi.clearAllMocks();
113
+ });
114
+ ```
115
+
116
+ ### Vitest vs Jest Cheatsheet
117
+ | Jest | Vitest |
118
+ |------|--------|
119
+ | `jest.fn()` | `vi.fn()` |
120
+ | `jest.mock()` | `vi.mock()` |
121
+ | `jest.spyOn()` | `vi.spyOn()` |
122
+ | `jest.useFakeTimers()` | `vi.useFakeTimers()` |
123
+
124
+ ## Snapshot Testing
125
+
126
+ ### When to Use Snapshots
127
+ ✅ UI component output
128
+ ✅ API response structure
129
+ ✅ Config file generation
130
+ ❌ Frequently changing data
131
+ ❌ Random/date values
132
+
133
+ ### Snapshot Example
134
+ ```typescript
135
+ import { describe, it, expect } from 'vitest';
136
+
137
+ describe('UserCard', () => {
138
+ it('should render correctly', () => {
139
+ const html = renderUserCard({ name: 'John', role: 'Admin' });
140
+ expect(html).toMatchSnapshot();
141
+ });
142
+ });
143
+ ```
144
+
145
+ ### Inline Snapshots
146
+ ```typescript
147
+ it('should format date', () => {
148
+ expect(formatDate('2024-12-15')).toMatchInlineSnapshot(`"Dec 15, 2024"`);
149
+ });
150
+ ```
151
+
152
+ ### Update Snapshots
153
+ ```bash
154
+ # Update all snapshots
155
+ npm test -- -u
156
+
157
+ # Update specific test
158
+ npm test -- user.test.ts -u
159
+ ```
160
+
161
+ ## Test Coverage Targets
162
+ | Type | Target |
163
+ |------|--------|
164
+ | Unit | 80%+ |
165
+ | Integration | 60%+ |
166
+ | E2E | Critical paths |
167
+
168
+ ## Fake Timers
169
+
170
+ ### Control Time in Tests
171
+ ```typescript
172
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
173
+
174
+ describe('Timer tests', () => {
175
+ beforeEach(() => {
176
+ vi.useFakeTimers();
177
+ });
178
+
179
+ afterEach(() => {
180
+ vi.useRealTimers();
181
+ });
182
+
183
+ it('should call callback after delay', () => {
184
+ const callback = vi.fn();
185
+ setTimeout(callback, 1000);
186
+
187
+ vi.advanceTimersByTime(1000);
188
+ expect(callback).toHaveBeenCalled();
189
+ });
190
+
191
+ it('should work with dates', () => {
192
+ vi.setSystemTime(new Date('2024-12-15'));
193
+ expect(new Date().toISOString()).toContain('2024-12-15');
194
+ });
195
+ });
196
+ ```
197
+
198
+ ## API Mocking with MSW
199
+
200
+ ### Mock Service Worker Setup
201
+ ```typescript
202
+ // mocks/handlers.ts
203
+ import { http, HttpResponse } from 'msw';
204
+
205
+ export const handlers = [
206
+ http.get('/api/users', () => {
207
+ return HttpResponse.json([
208
+ { id: 1, name: 'John' },
209
+ { id: 2, name: 'Jane' }
210
+ ]);
211
+ }),
212
+
213
+ http.post('/api/users', async ({ request }) => {
214
+ const body = await request.json();
215
+ return HttpResponse.json({ id: 3, ...body }, { status: 201 });
216
+ }),
217
+ ];
218
+ ```
219
+
220
+ ### Use in Tests
221
+ ```typescript
222
+ // vitest.setup.ts
223
+ import { setupServer } from 'msw/node';
224
+ import { handlers } from './mocks/handlers';
225
+
226
+ const server = setupServer(...handlers);
227
+
228
+ beforeAll(() => server.listen());
229
+ afterEach(() => server.resetHandlers());
230
+ afterAll(() => server.close());
231
+ ```
232
+
233
+ ## Best Practices
234
+ 1. AAA pattern: Arrange, Act, Assert
235
+ 2. One assertion per test (ideally)
236
+ 3. Descriptive test names
237
+ 4. Test behavior, not implementation
238
+ 5. Don't test external libraries
239
+ 6. **Use Vitest for new tests**
240
+ 7. **Snapshot for UI components**
241
+ 8. **Use MSW for API mocking**
242
+ 9. **Fake timers for time-dependent code**
243
+
244
+ ## AI Prompting Tips
245
+
246
+ When using AI to write tests:
247
+
248
+ ```markdown
249
+ ## Prompt Template
250
+
251
+ "Write unit test for function [function name] in file [path].
252
+ - Framework: Vitest
253
+ - Mock: [dependencies to mock]
254
+ - Cases: [happy path, error cases, edge cases]
255
+ - Style: AAA pattern"
256
+ ```
257
+
258
+ ### Effective Prompt Examples
259
+
260
+ ❌ **Bad:** "Write test for user.ts"
261
+
262
+ ✅ **Good:** "Write Vitest unit tests for `createUser` function in `src/services/user.ts`. Mock database calls with vi.mock. Cover: valid input, invalid email, duplicate user."
263
+
264
+ ### Tips
265
+ 1. Specify framework (Vitest/Jest)
266
+ 2. List specific test cases
267
+ 3. Specify dependencies to mock
268
+ 4. Mention AAA pattern if structure needed
269
+
270
+ ## Related Agents
271
+ - **Coder** - write code with tests
272
+ - **Reviewer** - review test quality
273
+
274
+