From cd8b300d5c9c2a2911b50c737c88ba799a2f0799 Mon Sep 17 00:00:00 2001 From: Elias Meire Date: Fri, 7 Feb 2025 12:57:18 +0100 Subject: [PATCH] fix(Google Sheets Trigger Node): Do not return header row in rowAdded mode (#13119) --- .../Google/Sheet/GoogleSheetsTrigger.node.ts | 8 +++ .../Sheet/test/GoogleSheetsTrigger.test.ts | 53 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 packages/nodes-base/nodes/Google/Sheet/test/GoogleSheetsTrigger.test.ts diff --git a/packages/nodes-base/nodes/Google/Sheet/GoogleSheetsTrigger.node.ts b/packages/nodes-base/nodes/Google/Sheet/GoogleSheetsTrigger.node.ts index b23183c29b..88dd6622b2 100644 --- a/packages/nodes-base/nodes/Google/Sheet/GoogleSheetsTrigger.node.ts +++ b/packages/nodes-base/nodes/Google/Sheet/GoogleSheetsTrigger.node.ts @@ -120,6 +120,9 @@ export class GoogleSheetsTrigger implements INodeType { default: { mode: 'list', value: '' }, // default: '', //empty string set to progresivly reveal fields required: true, + typeOptions: { + loadOptionsDependsOn: ['documentId.value'], + }, modes: [ { displayName: 'From List', @@ -530,6 +533,11 @@ export class GoogleSheetsTrigger implements INodeType { (options.dateTimeRenderOption as string) || 'FORMATTED_STRING', ); + if (Array.isArray(sheetData) && sheetData.length !== 0) { + const zeroBasedKeyRow = keyRow - 1; + sheetData.splice(zeroBasedKeyRow, 1); // Remove key row + } + if (this.getMode() === 'manual') { if (Array.isArray(sheetData)) { const returnData = arrayOfArraysToJson(sheetData, columns); diff --git a/packages/nodes-base/nodes/Google/Sheet/test/GoogleSheetsTrigger.test.ts b/packages/nodes-base/nodes/Google/Sheet/test/GoogleSheetsTrigger.test.ts new file mode 100644 index 0000000000..0ff72143ee --- /dev/null +++ b/packages/nodes-base/nodes/Google/Sheet/test/GoogleSheetsTrigger.test.ts @@ -0,0 +1,53 @@ +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' } }], + ]); + }); + }); +});