Files
kdrive-n8n/tests/KDrive.node.test.ts
2025-12-23 14:58:14 +01:00

154 lines
5.2 KiB
TypeScript

import { KDrive } from '../src/nodes/KDrive/KDrive.node';
import {
kdriveApiRequest,
handleApiError,
resolvePathToId,
parsePath,
normalizePath,
resolveIdToPath,
clearPathCache
} from '../src/nodes/KDrive/GenericFunctions';
describe('KDrive Node', () => {
let kdriveNode: KDrive;
beforeEach(() => {
kdriveNode = new KDrive();
});
describe('Node Description', () => {
it('should have correct node description', () => {
expect(kdriveNode.description.displayName).toBe('kDrive');
expect(kdriveNode.description.name).toBe('kDrive');
expect(kdriveNode.description.group).toContain('transform');
expect(kdriveNode.description.version).toBe(1);
});
it('should have required credentials', () => {
expect(kdriveNode.description.credentials).toBeDefined();
if (kdriveNode.description.credentials) {
expect(kdriveNode.description.credentials.length).toBe(1);
expect(kdriveNode.description.credentials[0].name).toBe('kDriveApi');
}
});
});
describe('Node Properties', () => {
it('should have authentication property', () => {
const authProperty = kdriveNode.description.properties.find(p => p.name === 'authentication');
expect(authProperty).toBeDefined();
if (authProperty) {
expect(authProperty.type).toBe('options');
}
});
it('should have resource property', () => {
const resourceProperty = kdriveNode.description.properties.find(p => p.name === 'resource');
expect(resourceProperty).toBeDefined();
if (resourceProperty) {
expect(resourceProperty.type).toBe('options');
}
});
it('should have operation property', () => {
const operationProperty = kdriveNode.description.properties.find(p => p.name === 'operation');
expect(operationProperty).toBeDefined();
if (operationProperty) {
expect(operationProperty.type).toBe('options');
}
});
it('should have path-based operation options', () => {
const operationProperty = kdriveNode.description.properties.find(p => p.name === 'operation') as any;
expect(operationProperty).toBeDefined();
if (operationProperty && operationProperty.options) {
const operationValues = operationProperty.options.map((opt: any) => opt.value);
expect(operationValues).toContain('listFilesByPath');
expect(operationValues).toContain('getFileInfoByPath');
expect(operationValues).toContain('uploadFileByPath');
expect(operationValues).toContain('downloadFileByPath');
expect(operationValues).toContain('deleteFileByPath');
expect(operationValues).toContain('getFileVersionsByPath');
}
});
it('should have path-based parameters', () => {
const filePathParam = kdriveNode.description.properties.find(p => p.name === 'filePath');
expect(filePathParam).toBeDefined();
const directoryPathParam = kdriveNode.description.properties.find(p => p.name === 'directoryPath');
expect(directoryPathParam).toBeDefined();
const uploadPathParam = kdriveNode.description.properties.find(p => p.name === 'uploadPath');
expect(uploadPathParam).toBeDefined();
});
});
});
describe('Generic Functions', () => {
describe('kdriveApiRequest', () => {
it('should be a function', () => {
expect(typeof kdriveApiRequest).toBe('function');
});
});
describe('handleApiError', () => {
it('should be a function', () => {
expect(typeof handleApiError).toBe('function');
});
});
describe('Path Resolution Functions', () => {
describe('normalizePath', () => {
it('should normalize Windows paths', () => {
expect(normalizePath('documents\\file.txt')).toBe('documents/file.txt');
});
it('should handle leading/trailing slashes', () => {
expect(normalizePath('/documents/file.txt/')).toBe('documents/file.txt');
expect(normalizePath('///documents///file.txt///')).toBe('documents/file.txt');
});
it('should handle empty path as root', () => {
expect(normalizePath('')).toBe('root');
expect(normalizePath('/')).toBe('root');
expect(normalizePath('///')).toBe('root');
});
it('should handle root path', () => {
expect(normalizePath('root')).toBe('root');
});
});
describe('parsePath', () => {
it('should parse simple paths', () => {
expect(parsePath('file.txt')).toEqual(['file.txt']);
});
it('should parse nested paths', () => {
expect(parsePath('documents/project/file.txt')).toEqual(['documents', 'project', 'file.txt']);
});
it('should handle root path', () => {
expect(parsePath('root')).toEqual(['root']);
});
it('should normalize before parsing', () => {
expect(parsePath('/documents//project///file.txt/')).toEqual(['documents', 'project', 'file.txt']);
});
});
describe('clearPathCache', () => {
it('should be a function', () => {
expect(typeof clearPathCache).toBe('function');
});
});
describe('resolvePathToId and resolveIdToPath', () => {
it('should be functions', () => {
expect(typeof resolvePathToId).toBe('function');
expect(typeof resolveIdToPath).toBe('function');
});
});
});
});