From 2716207d72f2bdda2f2f814b7beb290d3ee8b2f0 Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:57:05 +0200 Subject: [PATCH] fix: resolve TypeScript lint errors in telemetry tests - Fix variable name conflicts in mcp-telemetry.test.ts - Fix process.exit mock type in batch-processor.test.ts - Fix position tuple types in event-tracker.test.ts - Import MockInstance type from vitest --- .../telemetry/mcp-telemetry.test.ts | 20 +++++------ tests/unit/telemetry/batch-processor.test.ts | 33 ++++++++++++++----- tests/unit/telemetry/event-tracker.test.ts | 10 +++--- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/tests/integration/telemetry/mcp-telemetry.test.ts b/tests/integration/telemetry/mcp-telemetry.test.ts index af02f85..583a0b1 100644 --- a/tests/integration/telemetry/mcp-telemetry.test.ts +++ b/tests/integration/telemetry/mcp-telemetry.test.ts @@ -310,14 +310,14 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(searchRequest.params); } expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('webhook', 2, 'OR'); }); it('should track zero-result searches', async () => { - const searchRequest: CallToolRequest = { + const zeroResultRequest: CallToolRequest = { method: 'tools/call', params: { name: 'search_nodes', @@ -334,14 +334,14 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(zeroResultRequest.params); } expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('nonexistent', 0, 'AND'); }); it('should track fallback search queries', async () => { - const searchRequest: CallToolRequest = { + const fallbackRequest: CallToolRequest = { method: 'tools/call', params: { name: 'search_nodes', @@ -360,7 +360,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(fallbackRequest.params); } // Should track both main query and fallback @@ -400,7 +400,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(validateRequest.params); } expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(workflow, true); @@ -444,7 +444,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(validateRequest.params); } expect(telemetry.trackValidationDetails).toHaveBeenCalledWith( @@ -482,7 +482,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(validateNodeRequest.params); } // Should track the validation attempt @@ -514,7 +514,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(slowToolRequest.params); } expect(telemetry.trackToolUsage).toHaveBeenCalledWith( @@ -680,7 +680,7 @@ describe.skip('MCP Telemetry Integration', () => { const callToolHandler = server.requestHandlers.get('tools/call'); if (callToolHandler) { - await callToolHandler(callToolRequest.params); + await callToolHandler(validateRequest.params); } expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(complexWorkflow, true); diff --git a/tests/unit/telemetry/batch-processor.test.ts b/tests/unit/telemetry/batch-processor.test.ts index 79f933b..e16f7e8 100644 --- a/tests/unit/telemetry/batch-processor.test.ts +++ b/tests/unit/telemetry/batch-processor.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach, vi, afterEach, beforeAll, afterAll } from 'vitest'; +import { describe, it, expect, beforeEach, vi, afterEach, beforeAll, afterAll, type MockInstance } from 'vitest'; import { TelemetryBatchProcessor } from '../../../src/telemetry/batch-processor'; import { TelemetryEvent, WorkflowTelemetry, TELEMETRY_CONFIG } from '../../../src/telemetry/telemetry-types'; import { TelemetryError, TelemetryErrorType } from '../../../src/telemetry/telemetry-error'; @@ -17,14 +17,15 @@ vi.mock('../../../src/utils/logger', () => ({ describe('TelemetryBatchProcessor', () => { let batchProcessor: TelemetryBatchProcessor; let mockSupabase: SupabaseClient; - let mockIsEnabled: vi.Mock; - let mockProcessExit: vi.SpyInstance; + let mockIsEnabled: ReturnType; + let mockProcessExit: MockInstance; const createMockSupabaseResponse = (error: any = null) => ({ data: null, error, status: error ? 400 : 200, - statusText: error ? 'Bad Request' : 'OK' + statusText: error ? 'Bad Request' : 'OK', + count: null }); beforeEach(() => { @@ -38,7 +39,9 @@ describe('TelemetryBatchProcessor', () => { } as any; // Mock process events to prevent actual exit - mockProcessExit = vi.spyOn(process, 'exit').mockImplementation(() => undefined as never); + mockProcessExit = vi.spyOn(process, 'exit').mockImplementation(() => { + throw new Error('Process.exit called'); + }); vi.clearAllMocks(); @@ -431,8 +434,14 @@ describe('TelemetryBatchProcessor', () => { const error = new Error('Mixed error'); const errorResponse = createMockSupabaseResponse(error); vi.mocked(mockSupabase.from).mockImplementation((table) => ({ - insert: vi.fn().mockResolvedValue(errorResponse) - })); + insert: vi.fn().mockResolvedValue(errorResponse), + url: { href: '' }, + headers: {}, + select: vi.fn(), + upsert: vi.fn(), + update: vi.fn(), + delete: vi.fn() + } as any)); const events: TelemetryEvent[] = [ { user_id: 'user1', event: 'event1', properties: {} } @@ -457,8 +466,14 @@ describe('TelemetryBatchProcessor', () => { // Mock successful operations for dead letter queue processing vi.mocked(mockSupabase.from).mockImplementation((table) => ({ - insert: vi.fn().mockResolvedValue(createMockSupabaseResponse()) - })); + insert: vi.fn().mockResolvedValue(createMockSupabaseResponse()), + url: { href: '' }, + headers: {}, + select: vi.fn(), + upsert: vi.fn(), + update: vi.fn(), + delete: vi.fn() + } as any)); await batchProcessor.flush([]); expect(batchProcessor.getMetrics().deadLetterQueueSize).toBe(0); diff --git a/tests/unit/telemetry/event-tracker.test.ts b/tests/unit/telemetry/event-tracker.test.ts index ab63645..72c524b 100644 --- a/tests/unit/telemetry/event-tracker.test.ts +++ b/tests/unit/telemetry/event-tracker.test.ts @@ -21,8 +21,8 @@ vi.mock('path'); describe('TelemetryEventTracker', () => { let eventTracker: TelemetryEventTracker; - let mockGetUserId: vi.Mock; - let mockIsEnabled: vi.Mock; + let mockGetUserId: ReturnType; + let mockIsEnabled: ReturnType; beforeEach(() => { mockGetUserId = vi.fn().mockReturnValue('test-user-123'); @@ -107,9 +107,9 @@ describe('TelemetryEventTracker', () => { describe('trackWorkflowCreation()', () => { const mockWorkflow = { nodes: [ - { id: '1', type: 'webhook', name: 'Webhook' }, - { id: '2', type: 'httpRequest', name: 'HTTP Request' }, - { id: '3', type: 'set', name: 'Set' } + { id: '1', type: 'webhook', name: 'Webhook', position: [0, 0] as [number, number], parameters: {} }, + { id: '2', type: 'httpRequest', name: 'HTTP Request', position: [100, 0] as [number, number], parameters: {} }, + { id: '3', type: 'set', name: 'Set', position: [200, 0] as [number, number], parameters: {} } ], connections: { '1': { main: [[{ node: '2', type: 'main', index: 0 }]] }