mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-21 11:49:59 +00:00
fix(Baserow Node): Fix issue where database selection was returning other types (#14115)
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
/* eslint-disable n8n-nodes-base/node-param-display-name-miscased */
|
||||
import { NodeApiError } from 'n8n-workflow';
|
||||
|
||||
import {
|
||||
baserowApiRequest,
|
||||
baserowApiRequestAllItems,
|
||||
getJwtToken,
|
||||
getFieldNamesAndIds,
|
||||
toOptions,
|
||||
TableFieldMapper,
|
||||
} from '../GenericFunctions';
|
||||
|
||||
describe('Baserow > GenericFunctions', () => {
|
||||
const mockExecuteFunctions: any = {
|
||||
helpers: {
|
||||
request: jest.fn(),
|
||||
},
|
||||
getCredentials: jest.fn().mockResolvedValue({
|
||||
username: 'nathan@n8n.io',
|
||||
password: 'this-is-a-fake-password',
|
||||
host: 'https://api.baserow.io',
|
||||
}),
|
||||
getNodeParameter: jest.fn(),
|
||||
getNode: jest.fn(),
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('baserowApiRequest', () => {
|
||||
it('should return data on success', async () => {
|
||||
mockExecuteFunctions.helpers.request.mockResolvedValue({ success: true });
|
||||
const result = await baserowApiRequest.call(
|
||||
mockExecuteFunctions,
|
||||
'GET',
|
||||
'/endpoint',
|
||||
'testJwt',
|
||||
);
|
||||
expect(result).toEqual({ success: true });
|
||||
expect(mockExecuteFunctions.helpers.request).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should throw NodeApiError on failure', async () => {
|
||||
mockExecuteFunctions.helpers.request.mockRejectedValue({ error: 'fail' });
|
||||
await expect(
|
||||
baserowApiRequest.call(mockExecuteFunctions, 'GET', '/endpoint', 'testJwt'),
|
||||
).rejects.toThrow(NodeApiError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('baserowApiRequestAllItems', () => {
|
||||
it('should accumulate all pages', async () => {
|
||||
mockExecuteFunctions.getNodeParameter
|
||||
.mockReturnValueOnce(true) // returnAll
|
||||
.mockReturnValue(1000); // limit
|
||||
mockExecuteFunctions.helpers.request
|
||||
.mockResolvedValueOnce({ results: [{ data: 1 }], next: 'page2' })
|
||||
.mockResolvedValueOnce({ results: [{ data: 2 }], next: null });
|
||||
|
||||
const result = await baserowApiRequestAllItems.call(
|
||||
mockExecuteFunctions,
|
||||
'GET',
|
||||
'/endpoint',
|
||||
'testJwt',
|
||||
{},
|
||||
{},
|
||||
);
|
||||
|
||||
expect(result).toEqual([{ data: 1 }, { data: 2 }]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getJwtToken', () => {
|
||||
it('should return a token', async () => {
|
||||
mockExecuteFunctions.helpers.request.mockResolvedValue({ token: 'mockToken' });
|
||||
const result = await getJwtToken.call(mockExecuteFunctions, {
|
||||
username: 'nathan@n8n.io',
|
||||
password: 'this-is-a-fake-password',
|
||||
host: 'https://api.baserow.io',
|
||||
});
|
||||
expect(result).toBe('mockToken');
|
||||
});
|
||||
|
||||
it('should throw NodeApiError if request fails', async () => {
|
||||
mockExecuteFunctions.helpers.request.mockRejectedValue({ error: 'fail' });
|
||||
await expect(
|
||||
getJwtToken.call(mockExecuteFunctions, {
|
||||
username: 'nathan@n8n.io',
|
||||
password: 'this-is-a-fake-password',
|
||||
host: 'https://api.baserow.io',
|
||||
}),
|
||||
).rejects.toThrow(NodeApiError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getFieldNamesAndIds', () => {
|
||||
it('should return field names and ids', async () => {
|
||||
mockExecuteFunctions.helpers.request.mockResolvedValue([
|
||||
{ id: 1, name: 'field1' },
|
||||
{ id: 2, name: 'field2' },
|
||||
]);
|
||||
const result = await getFieldNamesAndIds.call(mockExecuteFunctions, '1', 'testJwt');
|
||||
expect(result).toEqual({
|
||||
names: ['field1', 'field2'],
|
||||
ids: ['field_1', 'field_2'],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('toOptions', () => {
|
||||
it('should map items to options', () => {
|
||||
const result = toOptions([
|
||||
{ id: 1, name: 'field1' },
|
||||
{ id: 2, name: 'field2' },
|
||||
]);
|
||||
expect(result).toEqual([
|
||||
{ name: 'field1', value: 1 },
|
||||
{ name: 'field2', value: 2 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('TableFieldMapper', () => {
|
||||
it('should create name-to-id and id-to-name mappings', () => {
|
||||
const mapper = new TableFieldMapper();
|
||||
mapper.createMappings([
|
||||
{ id: 1, name: 'field1' },
|
||||
{ id: 2, name: 'field2' },
|
||||
]);
|
||||
expect(mapper.nameToIdMapping).toEqual({
|
||||
field1: 'field_1',
|
||||
field2: 'field_2',
|
||||
});
|
||||
expect(mapper.idToNameMapping).toEqual({
|
||||
field_1: 'field1',
|
||||
field_2: 'field2',
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user