From bc156fce2a7252b5cc91ba8dfe930fe1603b625d Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Fri, 24 Oct 2025 12:16:20 +0200 Subject: [PATCH] fix: TypeScript compilation errors in test-automator generated tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed 29 TypeScript compilation errors in test files: **breaking-change-detector.test.ts** (22 errors): - Added missing `nodeType`, `fromVersion`, `toVersion` to BreakingChange objects - All 22 BreakingChange object instantiations now comply with interface **node-migration-service.test.ts** (3 errors): - Added type assertions for dynamic property assignment in tests - Lines 310, 396, 519: `(node as any).property = value` **workflow-versioning-service.test.ts** (5 errors): - Fixed N8nApiClient constructor: takes config object, not separate params - Fixed updateWorkflow mock: returns Workflow object, not undefined All tests now compile successfully with `npm run typecheck`. Conceived by Romuald Członkowski - www.aiadvisors.pl/en 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../services/breaking-change-detector.test.ts | 66 +++++++++++++++++++ .../services/node-migration-service.test.ts | 6 +- .../workflow-versioning-service.test.ts | 10 +-- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/tests/unit/services/breaking-change-detector.test.ts b/tests/unit/services/breaking-change-detector.test.ts index 4f91976..ff72843 100644 --- a/tests/unit/services/breaking-change-detector.test.ts +++ b/tests/unit/services/breaking-change-detector.test.ts @@ -39,6 +39,9 @@ describe('BreakingChangeDetector', () => { describe('analyzeVersionUpgrade', () => { it('should combine registry and dynamic changes', async () => { const registryChange: BreakingChangesRegistry.BreakingChange = { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'registryProp', changeType: 'removed', isBreaking: true, @@ -66,6 +69,9 @@ describe('BreakingChangeDetector', () => { it('should detect breaking changes', async () => { const breakingChange: BreakingChangesRegistry.BreakingChange = { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'criticalProp', changeType: 'removed', isBreaking: true, @@ -86,6 +92,9 @@ describe('BreakingChangeDetector', () => { it('should calculate auto-migratable and manual counts', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'autoProp', changeType: 'added', isBreaking: false, @@ -95,6 +104,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: { type: 'add_property', defaultValue: null } }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'manualProp', changeType: 'requirement_changed', isBreaking: true, @@ -116,6 +128,9 @@ describe('BreakingChangeDetector', () => { it('should determine overall severity', async () => { const highSeverityChange: BreakingChangesRegistry.BreakingChange = { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'criticalProp', changeType: 'removed', isBreaking: true, @@ -136,6 +151,9 @@ describe('BreakingChangeDetector', () => { it('should generate recommendations', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop1', changeType: 'removed', isBreaking: true, @@ -145,6 +163,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: { type: 'remove_property' } }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop2', changeType: 'requirement_changed', isBreaking: true, @@ -306,6 +327,9 @@ describe('BreakingChangeDetector', () => { describe('change merging and deduplication', () => { it('should prioritize registry changes over dynamic', async () => { const registryChange: BreakingChangesRegistry.BreakingChange = { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'sharedProp', changeType: 'removed', isBreaking: true, @@ -334,6 +358,9 @@ describe('BreakingChangeDetector', () => { it('should sort changes by severity', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'lowProp', changeType: 'added', isBreaking: false, @@ -343,6 +370,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: { type: 'add_property', defaultValue: null } }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'highProp', changeType: 'removed', isBreaking: true, @@ -352,6 +382,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: undefined }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'medProp', changeType: 'renamed', isBreaking: true, @@ -375,6 +408,9 @@ describe('BreakingChangeDetector', () => { describe('hasBreakingChanges', () => { it('should return true when breaking changes exist', () => { const breakingChange: BreakingChangesRegistry.BreakingChange = { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop', changeType: 'removed', isBreaking: true, @@ -404,6 +440,9 @@ describe('BreakingChangeDetector', () => { it('should return list of changed property names', () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop1', changeType: 'added', isBreaking: false, @@ -413,6 +452,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: undefined }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop2', changeType: 'removed', isBreaking: true, @@ -443,6 +485,9 @@ describe('BreakingChangeDetector', () => { it('should recommend safe upgrade when no breaking changes', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop', changeType: 'added', isBreaking: false, @@ -465,6 +510,9 @@ describe('BreakingChangeDetector', () => { it('should warn about breaking changes', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop', changeType: 'removed', isBreaking: true, @@ -486,6 +534,9 @@ describe('BreakingChangeDetector', () => { it('should list manual changes required', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'manualProp', changeType: 'requirement_changed', isBreaking: true, @@ -538,6 +589,9 @@ describe('BreakingChangeDetector', () => { it('should return HIGH when any change is HIGH severity', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'lowProp', changeType: 'added', isBreaking: false, @@ -547,6 +601,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: undefined }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'highProp', changeType: 'removed', isBreaking: true, @@ -568,6 +625,9 @@ describe('BreakingChangeDetector', () => { it('should return MEDIUM when no HIGH but has MEDIUM', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'lowProp', changeType: 'added', isBreaking: false, @@ -577,6 +637,9 @@ describe('BreakingChangeDetector', () => { migrationStrategy: undefined }, { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'medProp', changeType: 'renamed', isBreaking: true, @@ -598,6 +661,9 @@ describe('BreakingChangeDetector', () => { it('should return LOW when all changes are LOW severity', async () => { const changes: BreakingChangesRegistry.BreakingChange[] = [ { + nodeType: 'nodes-base.httpRequest', + fromVersion: '1.0', + toVersion: '2.0', propertyName: 'prop', changeType: 'added', isBreaking: false, diff --git a/tests/unit/services/node-migration-service.test.ts b/tests/unit/services/node-migration-service.test.ts index f262aba..113f5a5 100644 --- a/tests/unit/services/node-migration-service.test.ts +++ b/tests/unit/services/node-migration-service.test.ts @@ -307,7 +307,7 @@ describe('NodeMigrationService', () => { describe('removeProperty migration', () => { it('should remove deprecated property', async () => { const node = createMockNode('node-1', 'nodes-base.httpRequest', 1, {}); - node.oldField = 'value'; + (node as any).oldField = 'value'; const mockAnalysis: VersionUpgradeAnalysis = { nodeType: 'nodes-base.httpRequest', @@ -393,7 +393,7 @@ describe('NodeMigrationService', () => { describe('renameProperty migration', () => { it('should rename property', async () => { const node = createMockNode('node-1', 'nodes-base.httpRequest', 1, {}); - node.oldName = 'value'; + (node as any).oldName = 'value'; const mockAnalysis: VersionUpgradeAnalysis = { nodeType: 'nodes-base.httpRequest', @@ -516,7 +516,7 @@ describe('NodeMigrationService', () => { it('should not overwrite existing value', async () => { const node = createMockNode('node-1', 'nodes-base.httpRequest', 1, {}); - node.field = 'existing'; + (node as any).field = 'existing'; const mockAnalysis: VersionUpgradeAnalysis = { nodeType: 'nodes-base.httpRequest', diff --git a/tests/unit/services/workflow-versioning-service.test.ts b/tests/unit/services/workflow-versioning-service.test.ts index 859e09a..4636ef8 100644 --- a/tests/unit/services/workflow-versioning-service.test.ts +++ b/tests/unit/services/workflow-versioning-service.test.ts @@ -38,7 +38,7 @@ describe('WorkflowVersioningService', () => { beforeEach(() => { vi.clearAllMocks(); mockRepository = new NodeRepository({} as any); - mockApiClient = new N8nApiClient('http://test', 'test-key'); + mockApiClient = new N8nApiClient({ baseUrl: 'http://test', apiKey: 'test-key' }); service = new WorkflowVersioningService(mockRepository, mockApiClient); }); @@ -221,7 +221,7 @@ describe('WorkflowVersioningService', () => { vi.spyOn(mockRepository, 'createWorkflowVersion').mockReturnValue(4); vi.spyOn(mockRepository, 'pruneWorkflowVersions').mockReturnValue(0); vi.spyOn(mockApiClient, 'getWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Current')); - vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(undefined); + vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Restored')); const result = await service.restoreVersion('workflow-1', undefined, false); @@ -266,7 +266,7 @@ describe('WorkflowVersioningService', () => { vi.spyOn(mockRepository, 'createWorkflowVersion').mockReturnValue(2); vi.spyOn(mockRepository, 'pruneWorkflowVersions').mockReturnValue(0); vi.spyOn(mockApiClient, 'getWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Current')); - vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(undefined); + vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Restored')); const mockValidator = vi.fn(); vi.spyOn(WorkflowValidator.prototype, 'validateWorkflow').mockImplementation(mockValidator); @@ -285,7 +285,7 @@ describe('WorkflowVersioningService', () => { vi.spyOn(mockRepository, 'createWorkflowVersion').mockReturnValue(3); vi.spyOn(mockRepository, 'pruneWorkflowVersions').mockReturnValue(0); vi.spyOn(mockApiClient, 'getWorkflow').mockResolvedValue(currentWorkflow); - vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(undefined); + vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Restored')); const result = await service.restoreVersion('workflow-1', 1, false); @@ -322,7 +322,7 @@ describe('WorkflowVersioningService', () => { vi.spyOn(mockRepository, 'createWorkflowVersion').mockReturnValue(3); vi.spyOn(mockRepository, 'pruneWorkflowVersions').mockReturnValue(0); vi.spyOn(mockApiClient, 'getWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Current')); - vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(undefined); + vi.spyOn(mockApiClient, 'updateWorkflow').mockResolvedValue(createMockWorkflow('workflow-1', 'Restored')); const result = await service.restoreVersion('workflow-1', 1, false);