Skip to content

Commit

Permalink
Merge branch 'master' into ADO-2073-fetch-cloud-role
Browse files Browse the repository at this point in the history
* master:
  fix(core): Ensure the generic OAuth2 API credential uses the OAuth2 credential test (#8941)
  fix(MySQL Node): Set paired items correctly in single query batch mode (#8940)
  docs: Fix the Microsoft OneDrive Trigger docs link (#8930)
  • Loading branch information
MiloradFilipovic committed Mar 21, 2024
2 parents 5f54673 + 079a114 commit 5a9fbee
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 5 deletions.
5 changes: 3 additions & 2 deletions packages/cli/src/services/credentials-tester.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export class CredentialsTester {
return 'access_token' in oauthTokenData;
}

private getCredentialTestFunction(
getCredentialTestFunction(
credentialType: string,
): ICredentialTestFunction | ICredentialTestRequestData | undefined {
// Check if test is defined on credentials
Expand Down Expand Up @@ -116,7 +116,8 @@ export class CredentialsTester {
for (const { name, testedBy } of nodeType.description.credentials ?? []) {
if (
name === credentialType &&
this.credentialTypes.getParentTypes(name).includes('oAuth2Api')
(this.credentialTypes.getParentTypes(name).includes('oAuth2Api') ||
name === 'oAuth2Api')
) {
return async function oauth2CredTest(
this: ICredentialTestFunctions,
Expand Down
32 changes: 32 additions & 0 deletions packages/cli/test/unit/credentials-tester.unit.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { CredentialsTester } from '@/services/credentials-tester.service';
import mock from 'jest-mock-extended/lib/Mock';
import type { CredentialTypes } from '@/CredentialTypes';
import type { ICredentialType, INodeType } from 'n8n-workflow';
import type { NodeTypes } from '@/NodeTypes';

describe('CredentialsTester', () => {
const credentialTypes = mock<CredentialTypes>();
const nodeTypes = mock<NodeTypes>();
const credentialsTester = new CredentialsTester(mock(), credentialTypes, nodeTypes, mock());

beforeEach(() => {
jest.clearAllMocks();
});

it('should find the OAuth2 credential test for a generic OAuth2 API credential', () => {
credentialTypes.getByName.mockReturnValue(mock<ICredentialType>({ test: undefined }));
credentialTypes.getSupportedNodes.mockReturnValue(['oAuth2Api']);
credentialTypes.getParentTypes.mockReturnValue([]);
nodeTypes.getByName.mockReturnValue(
mock<INodeType>({
description: { credentials: [{ name: 'oAuth2Api' }] },
}),
);

const testFn = credentialsTester.getCredentialTestFunction('oAuth2Api');

if (typeof testFn !== 'function') fail();

expect(testFn.name).toBe('oauth2CredTest');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
],
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftonedrivetrigger/"
"url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.microsoftonedrivetrigger/"
}
],
"generic": [
Expand Down
32 changes: 32 additions & 0 deletions packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,38 @@ describe('Test MySql V2, runQueries', () => {
jest.clearAllMocks();
});

describe('in single query batch mode', () => {
it('should set paired items correctly', async () => {
const nodeOptions = { queryBatching: BATCH_MODE.SINGLE, nodeVersion: 2 };
const pool = createFakePool(fakeConnection);
const mockExecuteFns = createMockExecuteFunction({}, mySqlMockNode);

pool.query = jest.fn(async () => [
[[{ finishedAt: '2023-12-30' }], [{ finishedAt: '2023-12-31' }]],
]);

const result = await configureQueryRunner.call(
mockExecuteFns,
nodeOptions,
pool,
)([
{ query: 'SELECT finishedAt FROM my_table WHERE id = ?', values: [123] },
{ query: 'SELECT finishedAt FROM my_table WHERE id = ?', values: [456] },
]);

expect(result).toEqual([
{
json: { finishedAt: '2023-12-30' },
pairedItem: { item: 0 },
},
{
json: { finishedAt: '2023-12-31' },
pairedItem: { item: 1 },
},
]);
});
});

it('should execute in "Single" mode, should return success true', async () => {
const nodeOptions: IDataObject = { queryBatching: BATCH_MODE.SINGLE, nodeVersion: 2 };

Expand Down
4 changes: 2 additions & 2 deletions packages/nodes-base/nodes/MySql/v2/helpers/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,9 @@ export function prepareOutput(
} else {
response
.filter((entry) => Array.isArray(entry))
.forEach((entry) => {
.forEach((entry, index) => {
const executionData = constructExecutionHelper(wrapData(entry), {
itemData,
itemData: Array.isArray(itemData) ? itemData[index] : itemData,
});

returnData.push(...executionData);
Expand Down

0 comments on commit 5a9fbee

Please sign in to comment.