mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-02-06 13:33:11 +00:00
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:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 }]] }
|
||||||
|
|||||||
Reference in New Issue
Block a user