refactor: Overhaul nodes-testing setup - Part 1 (no-changelog) (#14303)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2025-04-01 10:15:13 +02:00
committed by GitHub
parent f85b851851
commit 73e8d76e13
165 changed files with 3397 additions and 6453 deletions

View File

@@ -1,60 +1,27 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'POST') {
return {
style: 'TableStyleMedium2',
name: 'Table3',
showFilterButton: true,
id: '{317CA469-7D1C-4A5D-9B0B-424444BF0336}',
highlightLastColumn: false,
highlightFirstColumn: false,
legacyId: '3',
showBandedColumns: false,
showBandedRows: true,
showHeaders: true,
showTotals: false,
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => addTable', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/addTable.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.post(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/tables/add',
{ address: 'A1:D4', hasHeaders: true },
)
.reply(200, {
style: 'TableStyleMedium2',
name: 'Table3',
showFilterButton: true,
id: '{317CA469-7D1C-4A5D-9B0B-424444BF0336}',
highlightLastColumn: false,
highlightFirstColumn: false,
legacyId: '3',
showBandedColumns: false,
showBandedRows: true,
showHeaders: true,
showTotals: false,
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{A0883CFE-D27E-4ECC-B94B-981830AAD55B}/tables/add',
{ address: 'A1:D4', hasHeaders: true },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/addTable.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,81 +1,28 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
if (method === 'GET') {
return {
value: [
{
name: 'id',
},
{
name: 'name',
},
{
name: 'age',
},
{
name: 'data',
},
],
};
}
if (method === 'POST' && resource.includes('createSession')) {
return {
id: 12345,
};
}
if (method === 'POST' && resource.includes('add')) {
return {
index: 3,
values: [[3, 'Donald', 99, 'data 5']],
};
}
if (method === 'POST' && resource.includes('closeSession')) {
return;
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => append', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/append.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(4);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{A0883CFE-D27E-4ECC-B94B-981830AAD55B}/tables/{317CA469-7D1C-4A5D-9B0B-424444BF0336}/rows/add',
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/tables/%7B317CA469-7D1C-4A5D-9B0B-424444BF0336%7D/columns',
)
.reply(200, {
value: [{ name: 'id' }, { name: 'name' }, { name: 'age' }, { name: 'data' }],
})
.post(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/tables/%7B317CA469-7D1C-4A5D-9B0B-424444BF0336%7D/rows/add',
{ values: [['3', 'Donald', '99', 'data 5']] },
{},
'',
{ 'workbook-session-id': 12345 },
);
)
.reply(200, {
index: 3,
values: [[3, 'Donald', 99, 'data 5']],
})
.post('/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/createSession')
.reply(200, { id: 12345 })
.post('/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/closeSession')
.reply(200);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/append.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,56 +1,23 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'POST') {
return {
address: 'Sheet4!A1:D5',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Sam', 34, 'data 4'],
[3, 'Donald', 99, 'data 5'],
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => convertToRange', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/convertToRange.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.post(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/tables/%7B6321EE4A-AC21-48AD-87D9-B527637D94B3%7D/convertToRange',
)
.reply(200, {
address: 'Sheet4!A1:D5',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Sam', 34, 'data 4'],
[3, 'Donald', 99, 'data 5'],
],
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{A0883CFE-D27E-4ECC-B94B-981830AAD55B}/tables/{6321EE4A-AC21-48AD-87D9-B527637D94B3}/convertToRange',
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/convertToRange.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,47 +1,14 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'DELETE') {
return;
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => deleteTable', () => {
nock('https://graph.microsoft.com/v1.0/me')
.delete(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/tables/%7B92FBE3F5-3180-47EE-8549-40892C38DA7F%7D',
)
.reply(200);
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/deleteTable.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'DELETE',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{A0883CFE-D27E-4ECC-B94B-981830AAD55B}/tables/{92FBE3F5-3180-47EE-8549-40892C38DA7F}',
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,61 +1,25 @@
import type { INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequestAllItemsSkip: jest.fn(async function () {
return [
{
name: 'country',
},
{
name: 'browser',
},
{
name: 'session_duration',
},
{
name: 'visits',
},
];
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => getColumns', () => {
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24top=100&%24skip=0',
)
.reply(200, {
value: [
{ name: 'country' },
{ name: 'browser' },
{ name: 'session_duration' },
{ name: 'visits' },
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24top=100&%24skip=100',
)
.reply(200, { value: [] });
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/getColumns.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledWith(
'value',
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{00000000-0001-0000-0000-000000000000}/tables/{613E8967-D581-44ED-81D3-82A01AA6A05C}/columns',
{},
{},
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,85 +1,34 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'GET') {
return {
value: [
{
index: 0,
values: [['uk', 'firefox', 1, 1]],
},
{
index: 1,
values: [['us', 'chrome', 1, 12]],
},
],
};
}
}),
microsoftApiRequestAllItemsSkip: jest.fn(async function () {
return [
{
name: 'country',
},
{
name: 'browser',
},
{
name: 'session_duration',
},
{
name: 'visits',
},
];
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => getRows', () => {
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/rows?%24top=2',
)
.reply(200, {
value: [
{ index: 0, values: [['uk', 'firefox', 1, 1]] },
{ index: 1, values: [['us', 'chrome', 1, 12]] },
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24select=name&%24top=100&%24skip=0',
)
.reply(200, {
value: [
{ name: 'country' },
{ name: 'browser' },
{ name: 'session_duration' },
{ name: 'visits' },
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24select=name&%24top=100&%24skip=100',
)
.reply(200, { value: [] });
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/getRows.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{00000000-0001-0000-0000-000000000000}/tables/{613E8967-D581-44ED-81D3-82A01AA6A05C}/rows',
{},
{ $top: 2 },
);
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledWith(
'value',
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{00000000-0001-0000-0000-000000000000}/tables/{613E8967-D581-44ED-81D3-82A01AA6A05C}/columns',
{},
{ $select: 'name' },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,102 +1,42 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequestAllItemsSkip: jest.fn(async function (
_property: string,
_method: IHttpRequestMethods,
endpoint: string,
) {
if (endpoint.includes('columns')) {
return [
{
name: 'country',
},
{
name: 'browser',
},
{
name: 'session_duration',
},
{
name: 'visits',
},
];
}
if (endpoint.includes('rows')) {
return [
{
index: 0,
values: [['uk', 'firefox', 1, 1]],
},
{
index: 1,
values: [['us', 'chrome', 1, 12]],
},
{
index: 2,
values: [['test', 'test', 55, 123]],
},
{
index: 3,
values: [['ua', 'chrome', 1, 3]],
},
{
index: 4,
values: [['ua', 'firefox', 1, 4]],
},
{
index: 5,
values: [['uk', 'chrome', 1, 55]],
},
];
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, table => lookup', () => {
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/rows?%24top=100&%24skip=0',
)
.reply(200, {
value: [
{ index: 0, values: [['uk', 'firefox', 1, 1]] },
{ index: 1, values: [['us', 'chrome', 1, 12]] },
{ index: 2, values: [['test', 'test', 55, 123]] },
{ index: 3, values: [['ua', 'chrome', 1, 3]] },
{ index: 4, values: [['ua', 'firefox', 1, 4]] },
{ index: 5, values: [['uk', 'chrome', 1, 55]] },
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/rows?%24top=100&%24skip=100',
)
.reply(200, { value: [] })
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24select=name&%24top=100&%24skip=0',
)
.reply(200, {
value: [
{ name: 'country' },
{ name: 'browser' },
{ name: 'session_duration' },
{ name: 'visits' },
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/tables/%7B613E8967-D581-44ED-81D3-82A01AA6A05C%7D/columns?%24select=name&%24top=100&%24skip=100',
)
.reply(200, { value: [] });
const workflows = ['nodes/Microsoft/Excel/test/v2/node/table/lookup.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledTimes(2);
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledWith(
'value',
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{00000000-0001-0000-0000-000000000000}/tables/{613E8967-D581-44ED-81D3-82A01AA6A05C}/rows',
{},
{},
);
expect(transport.microsoftApiRequestAllItemsSkip).toHaveBeenCalledWith(
'value',
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{00000000-0001-0000-0000-000000000000}/tables/{613E8967-D581-44ED-81D3-82A01AA6A05C}/columns',
{},
{ $select: 'name' },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,77 +1,26 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
if (method === 'POST' && resource.includes('createSession')) {
return {
id: 12345,
};
}
if (method === 'POST' && resource.includes('add')) {
return {
id: '{266ADAB7-25B6-4F28-A2D1-FD5BFBD7A4F0}',
name: 'Sheet42',
position: 8,
visibility: 'Visible',
};
}
if (method === 'POST' && resource.includes('closeSession')) {
return;
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, workbook => addWorksheet', () => {
nock('https://graph.microsoft.com/v1.0/me')
.post('/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/createSession', {
persistChanges: true,
})
.reply(200, { id: 12345 })
.post('/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/add', {
name: 'Sheet42',
})
.matchHeader('workbook-session-id', '12345')
.reply(200, {
id: '{266ADAB7-25B6-4F28-A2D1-FD5BFBD7A4F0}',
name: 'Sheet42',
position: 8,
visibility: 'Visible',
})
.post('/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/closeSession')
.reply(200);
const workflows = ['nodes/Microsoft/Excel/test/v2/node/workbook/addWorksheet.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(3);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/createSession',
{ persistChanges: true },
);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/add',
{ name: 'Sheet42' },
{},
'',
{ 'workbook-session-id': 12345 },
);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/closeSession',
{},
{},
'',
{ 'workbook-session-id': 12345 },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,47 +1,12 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'DELETE') {
return;
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, workbook => deleteWorkbook', () => {
nock('https://graph.microsoft.com/v1.0/me')
.delete('/drive/items/01FUWX3BXJLISGF2CFWBGYPHXFCXPXOJUK')
.reply(200);
const workflows = ['nodes/Microsoft/Excel/test/v2/node/workbook/deleteWorkbook.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'DELETE',
'/drive/items/01FUWX3BXJLISGF2CFWBGYPHXFCXPXOJUK',
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
testWorkflows(workflows);
});

View File

@@ -1,62 +1,23 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'GET') {
return {
value: [
{
'@odata.type': '#microsoft.graph.driveItem',
name: 'ПРРО копія.xlsx',
},
,
{
'@odata.type': '#microsoft.graph.driveItem',
name: 'Book 3.xlsx',
},
,
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, workbook => getAll', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/workbook/getAll.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.get("/drive/root/search(q='.xlsx')?%24select=name&%24top=2")
.reply(200, {
value: [
{
'@odata.type': '#microsoft.graph.driveItem',
name: 'ПРРО копія.xlsx',
},
{
'@odata.type': '#microsoft.graph.driveItem',
name: 'Book 3.xlsx',
},
],
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'GET',
"/drive/root/search(q='.xlsx')",
{},
{ $select: 'name', $top: 2 },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/workbook/getAll.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,45 +1,42 @@
import type { IHttpRequestMethods } from 'n8n-workflow';
import nock from 'nock';
import { equalityTest, setup, workflowToTests } from '@test/nodes/Helpers';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
if (method === 'GET' && resource.includes('usedRange')) {
return {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
};
}
if (method === 'PATCH' && resource.includes('{A0883CFE-D27E-4ECC-B94B-981830AAD55B}')) {
return {
values: [[4, 'Sam', 34, 'data 4']],
};
}
if (method === 'PATCH' && resource.includes('{426949D7-797F-43A9-A8A4-8FE283495A82}')) {
return {
values: [[4, 'Don', 37, 'data 44']],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => append', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/append.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/range(address='A7:D7')",
)
.reply(200, { values: [[4, 'Sam', 34, 'data 4']] })
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/range(address='A7:D7')",
)
.reply(200, { values: [[4, 'Don', 37, 'data 44']] });
for (const testData of tests) {
test(testData.description, async () => await equalityTest(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/append.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,56 +1,17 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'POST') {
return {
values: [
{
json: {
success: true,
},
},
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => clear', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/clear.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.post(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BF7AF92FE-D42D-452F-8E4A-901B1D1EBF3F%7D/range/clear',
{ applyTo: 'All' },
)
.reply(200, {
values: [{ json: { success: true } }],
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'POST',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{F7AF92FE-D42D-452F-8E4A-901B1D1EBF3F}/range/clear',
{ applyTo: 'All' },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/clear.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,55 +1,16 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'DELETE') {
return {
values: [
{
json: {
success: true,
},
},
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => deleteWorksheet', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/deleteWorksheet.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.delete(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B88D9C37A-4180-4B23-8996-BF11F32EB63C%7D',
)
.reply(200, {
values: [{ json: { success: true } }],
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'DELETE',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/{88D9C37A-4180-4B23-8996-BF11F32EB63C}',
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/deleteWorksheet.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,64 +1,29 @@
import type { IHttpRequestMethods, INodeTypes } from 'n8n-workflow';
import nock from 'nock';
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
import { getResultNodeData, setup, workflowToTests } from '@test/nodes/Helpers';
import type { WorkflowTestData } from '@test/nodes/types';
import * as transport from '../../../../v2/transport';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods) {
if (method === 'GET') {
return {
value: [
{
id: '{00000000-0001-0000-0000-000000000000}',
name: 'Sheet1',
},
{
id: '{F7AF92FE-D42D-452F-8E4A-901B1D1EBF3F}',
name: 'Sheet2',
},
{
id: '{BF7BD843-4912-4B81-A0AC-4FBBC2783E20}',
name: 'foo2',
},
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => getAll', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/getAll.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
const testNode = async (testData: WorkflowTestData, types: INodeTypes) => {
const { result } = await executeWorkflow(testData, types);
const resultNodeData = getResultNodeData(result, testData);
resultNodeData.forEach(({ nodeName, resultData }) => {
return expect(resultData).toEqual(testData.output.nodeData[nodeName]);
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets?%24select=name&%24top=3',
)
.reply(200, {
value: [
{
id: '{00000000-0001-0000-0000-000000000000}',
name: 'Sheet1',
},
{
id: '{F7AF92FE-D42D-452F-8E4A-901B1D1EBF3F}',
name: 'Sheet2',
},
{
id: '{BF7BD843-4912-4B81-A0AC-4FBBC2783E20}',
name: 'foo2',
},
],
});
expect(transport.microsoftApiRequest).toHaveBeenCalledTimes(1);
expect(transport.microsoftApiRequest).toHaveBeenCalledWith(
'GET',
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets',
{},
{ $select: 'name', $top: 3 },
);
expect(result.finished).toEqual(true);
};
for (const testData of tests) {
test(testData.description, async () => await testNode(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/getAll.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,42 +1,31 @@
import type { IHttpRequestMethods } from 'n8n-workflow';
import nock from 'nock';
import { equalityTest, setup, workflowToTests } from '@test/nodes/Helpers';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
{
if (method === 'GET' && resource.includes('usedRange')) {
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
};
}
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => readRows', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/readRows.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/usedRange',
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.get(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/range(address='A1:D3')",
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
],
});
for (const testData of tests) {
test(testData.description, async () => await equalityTest(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/readRows.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,55 +1,56 @@
import type { IHttpRequestMethods } from 'n8n-workflow';
import nock from 'nock';
import { equalityTest, setup, workflowToTests } from '@test/nodes/Helpers';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
if (method === 'GET' && resource.includes('usedRange')) {
return {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
};
}
if (method === 'PATCH' && resource.includes('{A0883CFE-D27E-4ECC-B94B-981830AAD55B}')) {
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Sam', 34, 'data 4'],
],
};
}
if (method === 'PATCH' && resource.includes('{426949D7-797F-43A9-A8A4-8FE283495A82}')) {
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Don', 37, 'data 44'],
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => update', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/update.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/range(address='A1:D6')",
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Sam', 34, 'data 4'],
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/range(address='A1:D6')",
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Don', 37, 'data 44'],
],
});
for (const testData of tests) {
test(testData.description, async () => await equalityTest(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/update.workflow.json'];
testWorkflows(workflows);
});

View File

@@ -1,57 +1,58 @@
import type { IHttpRequestMethods } from 'n8n-workflow';
import nock from 'nock';
import { equalityTest, setup, workflowToTests } from '@test/nodes/Helpers';
jest.mock('../../../../v2/transport', () => {
const originalModule = jest.requireActual('../../../../v2/transport');
return {
...originalModule,
microsoftApiRequest: jest.fn(async function (method: IHttpRequestMethods, resource: string) {
if (method === 'GET' && resource.includes('usedRange')) {
return {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
};
}
if (method === 'PATCH' && resource.includes('{A0883CFE-D27E-4ECC-B94B-981830AAD55B}')) {
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
[4, 'Sam', 34, 'data 4'],
],
};
}
if (method === 'PATCH' && resource.includes('{426949D7-797F-43A9-A8A4-8FE283495A82}')) {
return {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
[4, 'Don', 37, 'data 44'],
],
};
}
}),
};
});
import { testWorkflows } from '@test/nodes/Helpers';
describe('Test MicrosoftExcelV2, worksheet => upsert', () => {
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/upsert.workflow.json'];
const tests = workflowToTests(workflows);
const nodeTypes = setup(tests);
nock('https://graph.microsoft.com/v1.0/me')
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7BA0883CFE-D27E-4ECC-B94B-981830AAD55B%7D/range(address='A1:D7')",
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
[4, 'Sam', 34, 'data 4'],
],
})
.get(
'/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/usedRange',
)
.reply(200, {
address: 'Sheet4!A1:D6',
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
],
})
.patch(
"/drive/items/01FUWX3BQ4ATCOZNR265GLA6IJEZDQUE4I/workbook/worksheets/%7B426949D7-797F-43A9-A8A4-8FE283495A82%7D/range(address='A1:D7')",
)
.reply(200, {
values: [
['id', 'name', 'age', 'data'],
[1, 'Sam', 33, 'data 1'],
[2, 'Jon', 44, 'data 2'],
[3, 'Ron', 55, 'data 3'],
[4, 'Don', 37, 'data 44'],
],
});
for (const testData of tests) {
test(testData.description, async () => await equalityTest(testData, nodeTypes));
}
const workflows = ['nodes/Microsoft/Excel/test/v2/node/worksheet/upsert.workflow.json'];
testWorkflows(workflows);
});