From 0010cf673b615a1e023ba99a35736444808524ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dimitri=20Lavren=C3=BCk?= <20122620+dlavrenuek@users.noreply.github.com> Date: Wed, 8 Jul 2026 10:38:24 +0200 Subject: [PATCH] fix: Google Docs add default drive id when searching folders (#33765) --- .../nodes/Google/Docs/GoogleDocs.node.ts | 2 +- .../Google/Docs/test/GoogleDocs.node.test.ts | 59 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 packages/nodes-base/nodes/Google/Docs/test/GoogleDocs.node.test.ts diff --git a/packages/nodes-base/nodes/Google/Docs/GoogleDocs.node.ts b/packages/nodes-base/nodes/Google/Docs/GoogleDocs.node.ts index 3c814fc9ccc..a7998012763 100644 --- a/packages/nodes-base/nodes/Google/Docs/GoogleDocs.node.ts +++ b/packages/nodes-base/nodes/Google/Docs/GoogleDocs.node.ts @@ -165,7 +165,7 @@ export class GoogleDocs implements INodeType { value: 'default', }, ]; - const driveId = this.getNodeParameter('driveId'); + const driveId = this.getNodeParameter('driveId', 'myDrive'); const qs = { q: `mimeType = \'application/vnd.google-apps.folder\' ${ diff --git a/packages/nodes-base/nodes/Google/Docs/test/GoogleDocs.node.test.ts b/packages/nodes-base/nodes/Google/Docs/test/GoogleDocs.node.test.ts new file mode 100644 index 00000000000..7bb9b5f8741 --- /dev/null +++ b/packages/nodes-base/nodes/Google/Docs/test/GoogleDocs.node.test.ts @@ -0,0 +1,59 @@ +import type { IDataObject, ILoadOptionsFunctions } from 'n8n-workflow'; +import type { Mock } from 'vitest'; + +import { googleApiRequestAllItems } from '../GenericFunctions'; +import { GoogleDocs } from '../GoogleDocs.node'; + +vi.mock('../GenericFunctions', () => ({ + googleApiRequestAllItems: vi.fn(), +})); + +const node = new GoogleDocs(); + +let nodeParameters: Record; + +const mockThis = { + getNode: () => ({ name: 'Google Docs', parameters: {} }), + getNodeParameter: vi.fn((name: string, ...rest: unknown[]) => { + if (nodeParameters[name] !== undefined) return nodeParameters[name]; + if (rest.length === 0) { + throw new Error(`Could not get parameter "${name}"`); + } + return rest[0]; + }), +} as unknown as ILoadOptionsFunctions; + +const getRequestedQuery = () => (googleApiRequestAllItems as Mock).mock.calls[0][4] as IDataObject; + +describe('GoogleDocs Node - loadOptions', () => { + beforeEach(() => { + vi.clearAllMocks(); + nodeParameters = {}; + }); + + describe('getFolders', () => { + it('should use myDrive when driveId is absent from node parameters', async () => { + (googleApiRequestAllItems as Mock).mockResolvedValue([{ name: 'Reports', id: 'folder-1' }]); + + const result = await node.methods.loadOptions.getFolders.call(mockThis); + + expect(mockThis.getNodeParameter).toHaveBeenCalledWith('driveId', 'myDrive'); + expect(result).toEqual([ + { name: '/', value: 'default' }, + { name: 'Reports', value: 'folder-1' }, + ]); + const qs = getRequestedQuery(); + expect(qs.q).toContain("'root' in parents"); + expect(qs.driveId).toBeUndefined(); + }); + + it('should query the selected shared drive', async () => { + nodeParameters = { driveId: 'drive-123' }; + (googleApiRequestAllItems as Mock).mockResolvedValue([]); + + await node.methods.loadOptions.getFolders.call(mockThis); + + expect(getRequestedQuery().driveId).toBe('drive-123'); + }); + }); +});