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
This commit is contained in:
czlonkowski
2025-09-26 18:57:05 +02:00
parent a5cf4193e4
commit 2716207d72
3 changed files with 39 additions and 24 deletions

View File

@@ -310,14 +310,14 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(searchRequest.params);
} }
expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('webhook', 2, 'OR'); expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('webhook', 2, 'OR');
}); });
it('should track zero-result searches', async () => { it('should track zero-result searches', async () => {
const searchRequest: CallToolRequest = { const zeroResultRequest: CallToolRequest = {
method: 'tools/call', method: 'tools/call',
params: { params: {
name: 'search_nodes', name: 'search_nodes',
@@ -334,14 +334,14 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(zeroResultRequest.params);
} }
expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('nonexistent', 0, 'AND'); expect(telemetry.trackSearchQuery).toHaveBeenCalledWith('nonexistent', 0, 'AND');
}); });
it('should track fallback search queries', async () => { it('should track fallback search queries', async () => {
const searchRequest: CallToolRequest = { const fallbackRequest: CallToolRequest = {
method: 'tools/call', method: 'tools/call',
params: { params: {
name: 'search_nodes', name: 'search_nodes',
@@ -360,7 +360,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(fallbackRequest.params);
} }
// Should track both main query and fallback // Should track both main query and fallback
@@ -400,7 +400,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(validateRequest.params);
} }
expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(workflow, true); expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(workflow, true);
@@ -444,7 +444,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(validateRequest.params);
} }
expect(telemetry.trackValidationDetails).toHaveBeenCalledWith( expect(telemetry.trackValidationDetails).toHaveBeenCalledWith(
@@ -482,7 +482,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(validateNodeRequest.params);
} }
// Should track the validation attempt // Should track the validation attempt
@@ -514,7 +514,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(slowToolRequest.params);
} }
expect(telemetry.trackToolUsage).toHaveBeenCalledWith( expect(telemetry.trackToolUsage).toHaveBeenCalledWith(
@@ -680,7 +680,7 @@ describe.skip('MCP Telemetry Integration', () => {
const callToolHandler = server.requestHandlers.get('tools/call'); const callToolHandler = server.requestHandlers.get('tools/call');
if (callToolHandler) { if (callToolHandler) {
await callToolHandler(callToolRequest.params); await callToolHandler(validateRequest.params);
} }
expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(complexWorkflow, true); expect(telemetry.trackWorkflowCreation).toHaveBeenCalledWith(complexWorkflow, true);

View File

@@ -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 { TelemetryBatchProcessor } from '../../../src/telemetry/batch-processor';
import { TelemetryEvent, WorkflowTelemetry, TELEMETRY_CONFIG } from '../../../src/telemetry/telemetry-types'; import { TelemetryEvent, WorkflowTelemetry, TELEMETRY_CONFIG } from '../../../src/telemetry/telemetry-types';
import { TelemetryError, TelemetryErrorType } from '../../../src/telemetry/telemetry-error'; import { TelemetryError, TelemetryErrorType } from '../../../src/telemetry/telemetry-error';
@@ -17,14 +17,15 @@ vi.mock('../../../src/utils/logger', () => ({
describe('TelemetryBatchProcessor', () => { describe('TelemetryBatchProcessor', () => {
let batchProcessor: TelemetryBatchProcessor; let batchProcessor: TelemetryBatchProcessor;
let mockSupabase: SupabaseClient; let mockSupabase: SupabaseClient;
let mockIsEnabled: vi.Mock; let mockIsEnabled: ReturnType<typeof vi.fn>;
let mockProcessExit: vi.SpyInstance; let mockProcessExit: MockInstance;
const createMockSupabaseResponse = (error: any = null) => ({ const createMockSupabaseResponse = (error: any = null) => ({
data: null, data: null,
error, error,
status: error ? 400 : 200, status: error ? 400 : 200,
statusText: error ? 'Bad Request' : 'OK' statusText: error ? 'Bad Request' : 'OK',
count: null
}); });
beforeEach(() => { beforeEach(() => {
@@ -38,7 +39,9 @@ describe('TelemetryBatchProcessor', () => {
} as any; } as any;
// Mock process events to prevent actual exit // 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(); vi.clearAllMocks();
@@ -431,8 +434,14 @@ describe('TelemetryBatchProcessor', () => {
const error = new Error('Mixed error'); const error = new Error('Mixed error');
const errorResponse = createMockSupabaseResponse(error); const errorResponse = createMockSupabaseResponse(error);
vi.mocked(mockSupabase.from).mockImplementation((table) => ({ 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[] = [ const events: TelemetryEvent[] = [
{ user_id: 'user1', event: 'event1', properties: {} } { user_id: 'user1', event: 'event1', properties: {} }
@@ -457,8 +466,14 @@ describe('TelemetryBatchProcessor', () => {
// Mock successful operations for dead letter queue processing // Mock successful operations for dead letter queue processing
vi.mocked(mockSupabase.from).mockImplementation((table) => ({ 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([]); await batchProcessor.flush([]);
expect(batchProcessor.getMetrics().deadLetterQueueSize).toBe(0); expect(batchProcessor.getMetrics().deadLetterQueueSize).toBe(0);

View File

@@ -21,8 +21,8 @@ vi.mock('path');
describe('TelemetryEventTracker', () => { describe('TelemetryEventTracker', () => {
let eventTracker: TelemetryEventTracker; let eventTracker: TelemetryEventTracker;
let mockGetUserId: vi.Mock; let mockGetUserId: ReturnType<typeof vi.fn>;
let mockIsEnabled: vi.Mock; let mockIsEnabled: ReturnType<typeof vi.fn>;
beforeEach(() => { beforeEach(() => {
mockGetUserId = vi.fn().mockReturnValue('test-user-123'); mockGetUserId = vi.fn().mockReturnValue('test-user-123');
@@ -107,9 +107,9 @@ describe('TelemetryEventTracker', () => {
describe('trackWorkflowCreation()', () => { describe('trackWorkflowCreation()', () => {
const mockWorkflow = { const mockWorkflow = {
nodes: [ nodes: [
{ id: '1', type: 'webhook', name: 'Webhook' }, { id: '1', type: 'webhook', name: 'Webhook', position: [0, 0] as [number, number], parameters: {} },
{ id: '2', type: 'httpRequest', name: 'HTTP Request' }, { id: '2', type: 'httpRequest', name: 'HTTP Request', position: [100, 0] as [number, number], parameters: {} },
{ id: '3', type: 'set', name: 'Set' } { id: '3', type: 'set', name: 'Set', position: [200, 0] as [number, number], parameters: {} }
], ],
connections: { connections: {
'1': { main: [[{ node: '2', type: 'main', index: 0 }]] } '1': { main: [[{ node: '2', type: 'main', index: 0 }]] }