test: fix failing test and add comprehensive version extraction test coverage

Address code review feedback from PR #285:

1. Fix Failing Test (CRITICAL)
   - Updated test from baseDescription.defaultVersion to description.defaultVersion
   - Added test to verify baseDescription is correctly ignored (legacy bug)

2. Add Missing Test Coverage (HIGH PRIORITY)
   - Test currentVersion priority over description.defaultVersion
   - Test currentVersion = 0 edge case (version 0 should be valid)
   - All 34 tests now passing

3. Enhanced Documentation
   - Added comprehensive JSDoc for extractVersion() explaining priority chain
   - Enhanced validation comments explaining why typeVersion must run before langchain skip
   - Clarified that parameter validation (not typeVersion) is skipped for langchain nodes

Test Results:
-  34/34 tests passing
-  Version extraction priority chain validated
-  Edge cases covered (version 0, missing properties)
-  Legacy bug prevention tested

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-10-07 20:23:45 +02:00
parent b986beef2c
commit 8e2e1dce62
3 changed files with 72 additions and 8 deletions

View File

@@ -286,20 +286,64 @@ describe('NodeParser', () => {
});
describe('version extraction', () => {
it('should extract version from baseDescription.defaultVersion', () => {
it('should prioritize currentVersion over description.defaultVersion', () => {
const NodeClass = class {
baseDescription = {
currentVersion = 2.2; // Should be returned
description = {
name: 'AI Agent',
displayName: 'AI Agent',
defaultVersion: 3 // Should be ignored when currentVersion exists
};
};
const result = parser.parse(NodeClass, 'n8n-nodes-base');
expect(result.version).toBe('2.2');
});
it('should extract version from description.defaultVersion', () => {
const NodeClass = class {
description = {
name: 'test',
displayName: 'Test',
defaultVersion: 3
};
};
const result = parser.parse(NodeClass, 'n8n-nodes-base');
expect(result.version).toBe('3');
});
it('should handle currentVersion = 0 correctly', () => {
const NodeClass = class {
currentVersion = 0; // Edge case: version 0 should be valid
description = {
name: 'test',
displayName: 'Test',
defaultVersion: 5 // Should be ignored
};
};
const result = parser.parse(NodeClass, 'n8n-nodes-base');
expect(result.version).toBe('0');
});
it('should NOT extract version from non-existent baseDescription (legacy bug)', () => {
const NodeClass = class {
baseDescription = { // This property doesn't exist on VersionedNodeType!
name: 'test',
displayName: 'Test',
defaultVersion: 3
};
};
const result = parser.parse(NodeClass, 'n8n-nodes-base');
expect(result.version).toBe('1'); // Should fallback to default
});
it('should extract version from nodeVersions keys', () => {
const NodeClass = class {
description = { name: 'test', displayName: 'Test' };