atlas-pipeline-mcp 1.0.19 โ†’ 1.0.20

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.
@@ -0,0 +1,490 @@
1
+ /**
2
+ * Atlas Server - Testing Utilities and Fixtures
3
+ *
4
+ * Comprehensive testing infrastructure for all tools:
5
+ * - Mock data generators
6
+ * - Test fixtures and helpers
7
+ * - Performance benchmarking
8
+ * - Integration test utilities
9
+ * - Assertion helpers
10
+ *
11
+ * @module test-utils
12
+ * @version 1.0.0
13
+ */
14
+ // ============================================================================
15
+ // Mock Data Generators
16
+ // ============================================================================
17
+ /**
18
+ * Generate mock intent analysis for testing
19
+ */
20
+ export function mockIntentAnalysis(overrides) {
21
+ return {
22
+ primaryIntent: 'code_generation',
23
+ confidence: 0.85,
24
+ entities: [
25
+ { type: 'language', value: 'TypeScript', position: { start: 10, end: 20 } },
26
+ { type: 'framework', value: 'React', position: { start: 25, end: 30 } },
27
+ ],
28
+ keywords: ['create', 'component', 'typescript', 'react'],
29
+ requiresClarification: false,
30
+ ...overrides,
31
+ };
32
+ }
33
+ /**
34
+ * Generate mock project info for testing
35
+ */
36
+ export function mockProjectInfo(overrides) {
37
+ return {
38
+ rootPath: '/mock/project',
39
+ languages: ['TypeScript', 'JavaScript'],
40
+ frameworks: ['React', 'Next.js'],
41
+ packageManager: 'npm',
42
+ configFiles: ['package.json', 'tsconfig.json'],
43
+ ...overrides,
44
+ };
45
+ }
46
+ /**
47
+ * Generate mock git context for testing
48
+ */
49
+ export function mockGitContext(overrides) {
50
+ return {
51
+ currentBranch: 'main',
52
+ recentCommits: [
53
+ {
54
+ hash: 'abc123',
55
+ message: 'feat: add new feature',
56
+ author: 'Test User',
57
+ date: '2024-01-15T10:30:00Z',
58
+ filesChanged: 3,
59
+ },
60
+ {
61
+ hash: 'def456',
62
+ message: 'fix: resolve bug',
63
+ author: 'Test User',
64
+ date: '2024-01-14T15:45:00Z',
65
+ filesChanged: 1,
66
+ },
67
+ ],
68
+ uncommittedChanges: [],
69
+ remoteUrl: 'https://github.com/user/repo.git',
70
+ isDirty: false,
71
+ ...overrides,
72
+ };
73
+ }
74
+ /**
75
+ * Generate mock code snippet for testing
76
+ */
77
+ export function mockCodeSnippet(overrides) {
78
+ return {
79
+ filePath: '/mock/file.ts',
80
+ content: `function example() {\n return 'mock';\n}`,
81
+ language: 'TypeScript',
82
+ lineRange: { start: 1, end: 3 },
83
+ relevance: 0.8,
84
+ ...overrides,
85
+ };
86
+ }
87
+ /**
88
+ * Generate mock pipeline context for testing
89
+ */
90
+ export function mockPipelineContext(overrides) {
91
+ return {
92
+ intent: mockIntentAnalysis(),
93
+ codeSnippets: [mockCodeSnippet()],
94
+ projectInfo: mockProjectInfo(),
95
+ gitContext: mockGitContext(),
96
+ ...overrides,
97
+ };
98
+ }
99
+ /**
100
+ * Generate mock decomposition result for testing
101
+ */
102
+ export function mockDecompositionResult(overrides) {
103
+ return {
104
+ summary: 'Create a React component with TypeScript',
105
+ tasks: [
106
+ {
107
+ id: '1',
108
+ description: 'Define component interface',
109
+ type: 'design',
110
+ priority: 1,
111
+ dependencies: [],
112
+ complexity: 'low',
113
+ },
114
+ {
115
+ id: '2',
116
+ description: 'Implement component',
117
+ type: 'implementation',
118
+ priority: 2,
119
+ dependencies: ['1'],
120
+ complexity: 'medium',
121
+ },
122
+ ],
123
+ executionOrder: ['1', '2'],
124
+ overallComplexity: 'medium',
125
+ ...overrides,
126
+ };
127
+ }
128
+ /**
129
+ * Generate mock solution variant for testing
130
+ */
131
+ export function mockSolutionVariant(overrides) {
132
+ return {
133
+ id: 'mock-variant-1',
134
+ label: 'A',
135
+ content: `const Component = () => {\n return <div>Mock</div>;\n};`,
136
+ approach: 'Functional component with hooks',
137
+ tradeoffs: {
138
+ pros: ['Simple', 'Modern'],
139
+ cons: ['Limited flexibility'],
140
+ },
141
+ useCase: 'Simple presentational components',
142
+ ...overrides,
143
+ };
144
+ }
145
+ /**
146
+ * Generate mock critique for testing
147
+ */
148
+ export function mockCritique(overrides) {
149
+ return {
150
+ variantId: 'mock-variant-1',
151
+ qualityScore: 85,
152
+ assessment: {
153
+ correctness: 90,
154
+ performance: 85,
155
+ maintainability: 80,
156
+ security: 85,
157
+ bestPractices: 85,
158
+ },
159
+ issues: [
160
+ {
161
+ severity: 'minor',
162
+ category: 'maintainability',
163
+ description: 'Consider adding PropTypes or TypeScript types',
164
+ },
165
+ ],
166
+ suggestions: ['Add error boundaries', 'Implement loading states'],
167
+ isViable: true,
168
+ ...overrides,
169
+ };
170
+ }
171
+ // ============================================================================
172
+ // Test Helpers
173
+ // ============================================================================
174
+ /**
175
+ * Measure async function execution time
176
+ */
177
+ export async function measureTime(fn) {
178
+ const start = performance.now();
179
+ const result = await fn();
180
+ const durationMs = Math.round(performance.now() - start);
181
+ return { result, durationMs };
182
+ }
183
+ /**
184
+ * Assert that a function throws with a specific message
185
+ */
186
+ export async function assertThrows(fn, expectedMessage) {
187
+ try {
188
+ await fn();
189
+ throw new Error('Expected function to throw, but it did not');
190
+ }
191
+ catch (error) {
192
+ if (error instanceof Error) {
193
+ if (expectedMessage) {
194
+ const matches = typeof expectedMessage === 'string'
195
+ ? error.message.includes(expectedMessage)
196
+ : expectedMessage.test(error.message);
197
+ if (!matches) {
198
+ throw new Error(`Expected error message "${error.message}" to match "${expectedMessage}"`);
199
+ }
200
+ }
201
+ return error;
202
+ }
203
+ throw error;
204
+ }
205
+ }
206
+ /**
207
+ * Wait for a condition to be true
208
+ */
209
+ export async function waitFor(condition, options = {}) {
210
+ const { timeout = 5000, interval = 100 } = options;
211
+ const start = Date.now();
212
+ while (Date.now() - start < timeout) {
213
+ if (await condition()) {
214
+ return;
215
+ }
216
+ await new Promise((resolve) => setTimeout(resolve, interval));
217
+ }
218
+ throw new Error(`Condition not met within ${timeout}ms`);
219
+ }
220
+ /**
221
+ * Create a spy function that tracks calls
222
+ */
223
+ export function createSpy() {
224
+ const calls = [];
225
+ const spy = ((...args) => {
226
+ const call = { args };
227
+ calls.push(call);
228
+ return undefined;
229
+ });
230
+ return {
231
+ spy,
232
+ calls,
233
+ reset: () => {
234
+ calls.length = 0;
235
+ },
236
+ };
237
+ }
238
+ /**
239
+ * Benchmark a function performance
240
+ */
241
+ export async function benchmark(name, fn, iterations = 100) {
242
+ const times = [];
243
+ // Warmup
244
+ for (let i = 0; i < Math.min(10, iterations); i++) {
245
+ await fn();
246
+ }
247
+ // Actual benchmark
248
+ for (let i = 0; i < iterations; i++) {
249
+ const start = performance.now();
250
+ await fn();
251
+ times.push(performance.now() - start);
252
+ }
253
+ const totalMs = times.reduce((a, b) => a + b, 0);
254
+ const avgMs = totalMs / iterations;
255
+ const minMs = Math.min(...times);
256
+ const maxMs = Math.max(...times);
257
+ const opsPerSecond = 1000 / avgMs;
258
+ return {
259
+ name,
260
+ iterations,
261
+ totalMs,
262
+ avgMs,
263
+ minMs,
264
+ maxMs,
265
+ opsPerSecond,
266
+ };
267
+ }
268
+ /**
269
+ * Compare multiple function implementations
270
+ */
271
+ export async function benchmarkCompare(tests, iterations = 100) {
272
+ const results = [];
273
+ for (const test of tests) {
274
+ const result = await benchmark(test.name, test.fn, iterations);
275
+ results.push(result);
276
+ }
277
+ // Sort by fastest first
278
+ results.sort((a, b) => a.avgMs - b.avgMs);
279
+ return results;
280
+ }
281
+ /**
282
+ * Print benchmark results to console
283
+ */
284
+ export function printBenchmarkResults(results) {
285
+ console.log('\n๐Ÿ“Š Benchmark Results:\n');
286
+ console.log('โ”‚ Name โ”‚ Avg (ms) โ”‚ Min (ms) โ”‚ Max (ms) โ”‚ Ops/sec โ”‚');
287
+ console.log('โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค');
288
+ for (const result of results) {
289
+ const name = result.name.padEnd(30);
290
+ const avg = result.avgMs.toFixed(2).padStart(8);
291
+ const min = result.minMs.toFixed(2).padStart(8);
292
+ const max = result.maxMs.toFixed(2).padStart(8);
293
+ const ops = Math.round(result.opsPerSecond).toString().padStart(7);
294
+ console.log(`โ”‚ ${name} โ”‚ ${avg} โ”‚ ${min} โ”‚ ${max} โ”‚ ${ops} โ”‚`);
295
+ }
296
+ console.log('โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n');
297
+ // Show relative performance
298
+ if (results.length > 1) {
299
+ const fastest = results[0];
300
+ console.log('๐Ÿ† Relative Performance:\n');
301
+ for (let i = 1; i < results.length; i++) {
302
+ const result = results[i];
303
+ const factor = (result.avgMs / fastest.avgMs).toFixed(2);
304
+ console.log(` ${result.name}: ${factor}x slower than ${fastest.name}`);
305
+ }
306
+ console.log();
307
+ }
308
+ }
309
+ // ============================================================================
310
+ // Integration Test Helpers
311
+ // ============================================================================
312
+ /**
313
+ * Create a temporary directory for testing
314
+ */
315
+ export async function createTempDir() {
316
+ const { mkdtemp } = await import('node:fs/promises');
317
+ const { tmpdir } = await import('node:os');
318
+ const { join } = await import('node:path');
319
+ return await mkdtemp(join(tmpdir(), 'atlas-test-'));
320
+ }
321
+ /**
322
+ * Cleanup a temporary directory
323
+ */
324
+ export async function cleanupTempDir(dir) {
325
+ const { rm } = await import('node:fs/promises');
326
+ await rm(dir, { recursive: true, force: true });
327
+ }
328
+ /**
329
+ * Write test file to a directory
330
+ */
331
+ export async function writeTestFile(dir, filename, content) {
332
+ const { writeFile } = await import('node:fs/promises');
333
+ const { join } = await import('node:path');
334
+ const filePath = join(dir, filename);
335
+ await writeFile(filePath, content, 'utf-8');
336
+ return filePath;
337
+ }
338
+ /**
339
+ * Execute test with automatic cleanup
340
+ */
341
+ export async function withTestDir(fn) {
342
+ const dir = await createTempDir();
343
+ try {
344
+ return await fn(dir);
345
+ }
346
+ finally {
347
+ await cleanupTempDir(dir);
348
+ }
349
+ }
350
+ // ============================================================================
351
+ // Assertion Helpers
352
+ // ============================================================================
353
+ /**
354
+ * Assert that two values are deeply equal
355
+ */
356
+ export function assertEqual(actual, expected, message) {
357
+ const actualStr = JSON.stringify(actual);
358
+ const expectedStr = JSON.stringify(expected);
359
+ if (actualStr !== expectedStr) {
360
+ throw new Error(message ||
361
+ `Assertion failed:\n Expected: ${expectedStr}\n Actual: ${actualStr}`);
362
+ }
363
+ }
364
+ /**
365
+ * Assert that a value is truthy
366
+ */
367
+ export function assertTrue(value, message) {
368
+ if (!value) {
369
+ throw new Error(message || `Assertion failed: Expected truthy value, got ${value}`);
370
+ }
371
+ }
372
+ /**
373
+ * Assert that a value is falsy
374
+ */
375
+ export function assertFalse(value, message) {
376
+ if (value) {
377
+ throw new Error(message || `Assertion failed: Expected falsy value, got ${value}`);
378
+ }
379
+ }
380
+ /**
381
+ * Assert that a value is defined (not null or undefined)
382
+ */
383
+ export function assertDefined(value, message) {
384
+ if (value === null || value === undefined) {
385
+ throw new Error(message || 'Assertion failed: Expected defined value');
386
+ }
387
+ }
388
+ /**
389
+ * Assert that an array contains a value
390
+ */
391
+ export function assertContains(array, value, message) {
392
+ if (!array.includes(value)) {
393
+ throw new Error(message || `Assertion failed: Array does not contain ${JSON.stringify(value)}`);
394
+ }
395
+ }
396
+ /**
397
+ * Assert that a number is within a range
398
+ */
399
+ export function assertInRange(value, min, max, message) {
400
+ if (value < min || value > max) {
401
+ throw new Error(message || `Assertion failed: ${value} is not in range [${min}, ${max}]`);
402
+ }
403
+ }
404
+ // ============================================================================
405
+ // Mock LLM Provider
406
+ // ============================================================================
407
+ /**
408
+ * Mock LLM provider for testing without actual API calls
409
+ */
410
+ export class MockLLMProvider {
411
+ responses = new Map();
412
+ callCount = 0;
413
+ /**
414
+ * Set a mock response for a specific prompt pattern
415
+ */
416
+ setResponse(pattern, response) {
417
+ const key = pattern instanceof RegExp ? pattern.source : pattern;
418
+ this.responses.set(key, response);
419
+ }
420
+ /**
421
+ * Mock complete method
422
+ */
423
+ async complete(prompt) {
424
+ this.callCount++;
425
+ for (const [pattern, response] of this.responses) {
426
+ const regex = new RegExp(pattern);
427
+ if (regex.test(prompt)) {
428
+ return typeof response === 'string' ? response : JSON.stringify(response);
429
+ }
430
+ }
431
+ return 'Mock response';
432
+ }
433
+ /**
434
+ * Mock completeJson method
435
+ */
436
+ async completeJson(prompt) {
437
+ this.callCount++;
438
+ for (const [pattern, response] of this.responses) {
439
+ const regex = new RegExp(pattern);
440
+ if (regex.test(prompt)) {
441
+ return { data: response };
442
+ }
443
+ }
444
+ return { data: null };
445
+ }
446
+ /**
447
+ * Reset the mock provider
448
+ */
449
+ reset() {
450
+ this.responses.clear();
451
+ this.callCount = 0;
452
+ }
453
+ }
454
+ // ============================================================================
455
+ // Example Test Suite Template
456
+ // ============================================================================
457
+ /**
458
+ * Example test suite demonstrating usage
459
+ */
460
+ export async function exampleTestSuite() {
461
+ console.log('๐Ÿงช Running Example Test Suite...\n');
462
+ // Test 1: Mock data generation
463
+ const intent = mockIntentAnalysis({ confidence: 0.95 });
464
+ assertEqual(intent.primaryIntent, 'code_generation', 'Intent should be code_generation');
465
+ // Test 2: Performance benchmark
466
+ const results = await benchmarkCompare([
467
+ {
468
+ name: 'Sequential processing',
469
+ fn: async () => {
470
+ for (let i = 0; i < 10; i++) {
471
+ await Promise.resolve(i);
472
+ }
473
+ },
474
+ },
475
+ {
476
+ name: 'Parallel processing',
477
+ fn: async () => {
478
+ await Promise.all(Array.from({ length: 10 }, (_, i) => Promise.resolve(i)));
479
+ },
480
+ },
481
+ ], 50);
482
+ printBenchmarkResults(results);
483
+ // Test 3: Temporary directory
484
+ await withTestDir(async (dir) => {
485
+ const file = await writeTestFile(dir, 'test.txt', 'Hello, World!');
486
+ assertTrue(file.includes('test.txt'), 'File path should contain test.txt');
487
+ });
488
+ console.log('โœ… All tests passed!\n');
489
+ }
490
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/tools/test-utils.ts"],"names":[],"mappings":"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"}