mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 11:01:15 +00:00
264 lines
6.2 KiB
TypeScript
264 lines
6.2 KiB
TypeScript
import { mockDeep } from 'jest-mock-extended';
|
|
import nock from 'nock';
|
|
|
|
import { testPollingTriggerNode } from '@test/nodes/TriggerHelpers';
|
|
|
|
import { GoogleSheetsTrigger } from '../GoogleSheetsTrigger.node';
|
|
|
|
describe('GoogleSheetsTrigger', () => {
|
|
const baseUrl = 'https://sheets.googleapis.com';
|
|
|
|
describe('rowAdded event', () => {
|
|
it('should return rows without header', async () => {
|
|
const scope = nock(baseUrl);
|
|
scope
|
|
.get('/v4/spreadsheets/testDocumentId')
|
|
.query({ fields: 'sheets.properties' })
|
|
.reply(200, {
|
|
sheets: [{ properties: { sheetId: 1, title: 'testSheetName' } }],
|
|
});
|
|
scope
|
|
.get((uri) => uri.startsWith('/v4/spreadsheets/testDocumentId/values/testSheetName!A1:ZZZ'))
|
|
.times(2)
|
|
.reply(200, {
|
|
values: [
|
|
['name', 'count'],
|
|
['apple', 14],
|
|
['banana', 12],
|
|
],
|
|
});
|
|
|
|
const { response } = await testPollingTriggerNode(GoogleSheetsTrigger, {
|
|
credential: mockDeep(),
|
|
mode: 'manual',
|
|
node: {
|
|
parameters: {
|
|
documentId: 'testDocumentId',
|
|
sheetName: 1,
|
|
event: 'rowAdded',
|
|
options: {
|
|
dataLocationOnSheet: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
scope.done();
|
|
|
|
expect(response).toEqual([
|
|
[{ json: { count: 14, name: 'apple' } }, { json: { count: 12, name: 'banana' } }],
|
|
]);
|
|
});
|
|
|
|
it('should return rows starting from first data row', async () => {
|
|
const scope = nock(baseUrl);
|
|
scope
|
|
.get('/v4/spreadsheets/testDocumentId')
|
|
.query({ fields: 'sheets.properties' })
|
|
.reply(200, {
|
|
sheets: [{ properties: { sheetId: 1, title: 'testSheetName' } }],
|
|
});
|
|
scope
|
|
.get((uri) => uri.startsWith('/v4/spreadsheets/testDocumentId/values/testSheetName!A5:ZZZ'))
|
|
.times(2)
|
|
.reply(200, {
|
|
values: [
|
|
['name', 'count'],
|
|
['apple', 14],
|
|
['banana', 12],
|
|
['orange', 10],
|
|
],
|
|
});
|
|
|
|
const { response } = await testPollingTriggerNode(GoogleSheetsTrigger, {
|
|
credential: mockDeep(),
|
|
mode: 'manual',
|
|
node: {
|
|
parameters: {
|
|
documentId: 'testDocumentId',
|
|
sheetName: 1,
|
|
event: 'rowAdded',
|
|
options: {
|
|
dataLocationOnSheet: {
|
|
values: {
|
|
rangeDefinition: 'specifyRange',
|
|
headerRow: 5,
|
|
firstDataRow: 7,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
scope.done();
|
|
|
|
expect(response).toEqual([
|
|
[{ json: { count: 12, name: 'banana' } }, { json: { count: 10, name: 'orange' } }],
|
|
]);
|
|
});
|
|
|
|
it('should return rows starting from header row when first data row is less than header row', async () => {
|
|
const scope = nock(baseUrl);
|
|
scope
|
|
.get('/v4/spreadsheets/testDocumentId')
|
|
.query({ fields: 'sheets.properties' })
|
|
.reply(200, {
|
|
sheets: [{ properties: { sheetId: 1, title: 'testSheetName' } }],
|
|
});
|
|
scope
|
|
.get((uri) => uri.startsWith('/v4/spreadsheets/testDocumentId/values/testSheetName!A5:ZZZ'))
|
|
.times(2)
|
|
.reply(200, {
|
|
values: [
|
|
['name', 'count'],
|
|
['apple', 14],
|
|
['banana', 12],
|
|
['orange', 10],
|
|
],
|
|
});
|
|
|
|
const { response } = await testPollingTriggerNode(GoogleSheetsTrigger, {
|
|
credential: mockDeep(),
|
|
mode: 'manual',
|
|
node: {
|
|
parameters: {
|
|
documentId: 'testDocumentId',
|
|
sheetName: 1,
|
|
event: 'rowAdded',
|
|
options: {
|
|
dataLocationOnSheet: {
|
|
values: {
|
|
rangeDefinition: 'specifyRange',
|
|
headerRow: 5,
|
|
firstDataRow: 4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
scope.done();
|
|
|
|
expect(response).toEqual([
|
|
[
|
|
{ json: { count: 14, name: 'apple' } },
|
|
{ json: { count: 12, name: 'banana' } },
|
|
{ json: { count: 10, name: 'orange' } },
|
|
],
|
|
]);
|
|
});
|
|
|
|
it('should return rows starting from first data row in trigger mode', async () => {
|
|
const scope = nock(baseUrl);
|
|
scope
|
|
.get('/v4/spreadsheets/testDocumentId')
|
|
.query({ fields: 'sheets.properties' })
|
|
.reply(200, {
|
|
sheets: [{ properties: { sheetId: 1, title: 'testSheetName' } }],
|
|
});
|
|
scope
|
|
.get((uri) => uri.startsWith('/v4/spreadsheets/testDocumentId/values/testSheetName!A5:ZZZ'))
|
|
.times(2)
|
|
.reply(200, {
|
|
values: [
|
|
['name', 'count'],
|
|
['apple', 14],
|
|
['banana', 12],
|
|
['orange', 10],
|
|
],
|
|
});
|
|
|
|
const { response } = await testPollingTriggerNode(GoogleSheetsTrigger, {
|
|
credential: mockDeep(),
|
|
mode: 'trigger',
|
|
workflowStaticData: {
|
|
documentId: 'testDocumentId',
|
|
sheetId: 1,
|
|
lastIndexChecked: 0,
|
|
},
|
|
node: {
|
|
parameters: {
|
|
documentId: 'testDocumentId',
|
|
sheetName: 1,
|
|
event: 'rowAdded',
|
|
options: {
|
|
dataLocationOnSheet: {
|
|
values: {
|
|
rangeDefinition: 'specifyRange',
|
|
headerRow: 5,
|
|
firstDataRow: 7,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
scope.done();
|
|
|
|
expect(response).toEqual([
|
|
[{ json: { count: 12, name: 'banana' } }, { json: { count: 10, name: 'orange' } }],
|
|
]);
|
|
});
|
|
|
|
it('should return rows starting from header row when first data row is less than header row in trigger mode', async () => {
|
|
const scope = nock(baseUrl);
|
|
scope
|
|
.get('/v4/spreadsheets/testDocumentId')
|
|
.query({ fields: 'sheets.properties' })
|
|
.reply(200, {
|
|
sheets: [{ properties: { sheetId: 1, title: 'testSheetName' } }],
|
|
});
|
|
scope
|
|
.get((uri) => uri.startsWith('/v4/spreadsheets/testDocumentId/values/testSheetName!A5:ZZZ'))
|
|
.times(2)
|
|
.reply(200, {
|
|
values: [
|
|
['name', 'count'],
|
|
['apple', 14],
|
|
['banana', 12],
|
|
['orange', 10],
|
|
],
|
|
});
|
|
|
|
const { response } = await testPollingTriggerNode(GoogleSheetsTrigger, {
|
|
credential: mockDeep(),
|
|
mode: 'trigger',
|
|
workflowStaticData: {
|
|
documentId: 'testDocumentId',
|
|
sheetId: 1,
|
|
lastIndexChecked: 0,
|
|
},
|
|
node: {
|
|
parameters: {
|
|
documentId: 'testDocumentId',
|
|
sheetName: 1,
|
|
event: 'rowAdded',
|
|
options: {
|
|
dataLocationOnSheet: {
|
|
values: {
|
|
rangeDefinition: 'specifyRange',
|
|
headerRow: 5,
|
|
firstDataRow: 4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
scope.done();
|
|
|
|
expect(response).toEqual([
|
|
[
|
|
{ json: { count: 14, name: 'apple' } },
|
|
{ json: { count: 12, name: 'banana' } },
|
|
{ json: { count: 10, name: 'orange' } },
|
|
],
|
|
]);
|
|
});
|
|
});
|
|
});
|