mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 18:41:14 +00:00
95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
/* eslint-disable n8n-nodes-base/node-param-display-name-miscased */
|
|
import mysql2 from 'mysql2/promise';
|
|
import type { ILoadOptionsFunctions, INodeListSearchResult } from 'n8n-workflow';
|
|
|
|
import { searchTables } from '../../v1/GenericFunctions';
|
|
|
|
jest.mock('mysql2/promise');
|
|
|
|
describe('MySQL / v1 / Generic Functions', () => {
|
|
let mockLoadOptionsFunctions: ILoadOptionsFunctions;
|
|
|
|
beforeEach(() => {
|
|
jest.resetAllMocks();
|
|
|
|
mockLoadOptionsFunctions = {
|
|
getCredentials: jest.fn().mockResolvedValue({
|
|
database: 'test_db',
|
|
}),
|
|
} as unknown as ILoadOptionsFunctions;
|
|
});
|
|
|
|
describe('searchTables', () => {
|
|
it('should return matching tables', async () => {
|
|
const mockRows = [{ table_name: 'users' }, { table_name: 'products' }];
|
|
|
|
const mockQuery = jest.fn().mockResolvedValue([mockRows]);
|
|
const mockEnd = jest.fn().mockResolvedValue(undefined);
|
|
|
|
(mysql2.createConnection as jest.Mock).mockResolvedValue({
|
|
query: mockQuery,
|
|
end: mockEnd,
|
|
});
|
|
|
|
const result: INodeListSearchResult = await searchTables.call(
|
|
mockLoadOptionsFunctions,
|
|
'user',
|
|
);
|
|
|
|
expect(result).toEqual({
|
|
results: [
|
|
{ name: 'users', value: 'users' },
|
|
{ name: 'products', value: 'products' },
|
|
],
|
|
});
|
|
|
|
expect(mockQuery).toHaveBeenCalledWith(
|
|
`SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = ?
|
|
AND table_name LIKE ?
|
|
ORDER BY table_name`,
|
|
['test_db', '%user%'],
|
|
);
|
|
|
|
expect(mockEnd).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should handle empty search query', async () => {
|
|
const mockRows: any[] = [];
|
|
|
|
const mockQuery = jest.fn().mockResolvedValue([mockRows]);
|
|
const mockEnd = jest.fn().mockResolvedValue(undefined);
|
|
|
|
(mysql2.createConnection as jest.Mock).mockResolvedValue({
|
|
query: mockQuery,
|
|
end: mockEnd,
|
|
});
|
|
|
|
const result = await searchTables.call(mockLoadOptionsFunctions);
|
|
|
|
expect(result).toEqual({ results: [] });
|
|
expect(mockQuery).toHaveBeenCalledWith(
|
|
`SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = ?
|
|
AND table_name LIKE ?
|
|
ORDER BY table_name`,
|
|
['test_db', '%%'],
|
|
);
|
|
|
|
expect(mockEnd).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should handle database errors', async () => {
|
|
const mockError = new Error('Database connection failed');
|
|
|
|
(mysql2.createConnection as jest.Mock).mockRejectedValue(mockError);
|
|
|
|
await expect(searchTables.call(mockLoadOptionsFunctions)).rejects.toThrow(
|
|
'Database connection failed',
|
|
);
|
|
});
|
|
});
|
|
});
|