1
1
mirror of https://github.com/n8n-io/n8n.git synced 2024-09-17 16:08:12 +03:00

fix(Google Drive Node): Create from text operation (#9185)

This commit is contained in:
Michael Kret 2024-04-24 20:59:00 +03:00 committed by GitHub
parent 1efeeccc5b
commit d9e74949c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 23 deletions

View File

@ -11,7 +11,7 @@ jest.mock('../../../../v2/transport', () => {
return {
...originalModule,
googleApiRequest: jest.fn(async function () {
return {};
return { id: 42 };
}),
};
});
@ -69,23 +69,34 @@ describe('test GoogleDriveV2: file createFromText', () => {
await createFromText.execute.call(fakeExecuteFunction, 0);
expect(transport.googleApiRequest).toBeCalledTimes(1);
expect(transport.googleApiRequest).toBeCalledTimes(2);
expect(transport.googleApiRequest).toHaveBeenCalledWith(
'POST',
'/upload/drive/v3/files',
'\n\t\t\n--XXXXXX\t\t\nContent-Type: application/json; charset=UTF-8\t\t\n\n{"name":"helloDrive.txt","parents":["folderIDxxxxxx"],"mimeType":"text/plain","properties":{"prop1":"value1","prop2":"value2"},"appProperties":{"appKey1":"appValue1"}}\t\t\n--XXXXXX\t\t\nContent-Type: text/plain\t\t\nContent-Transfer-Encoding: base64\t\t\n\nhello drive!\t\t\n--XXXXXX--',
expect.anything(), // Buffer of content goes here
{ uploadType: 'media' },
undefined,
{ headers: { 'Content-Length': 12, 'Content-Type': 'text/plain' } },
);
expect(transport.googleApiRequest).toHaveBeenCalledWith(
'PATCH',
'/drive/v3/files/42',
{
appProperties: { appKey1: 'appValue1' },
mimeType: 'text/plain',
name: 'helloDrive.txt',
properties: { prop1: 'value1', prop2: 'value2' },
},
{
addParents: 'folderIDxxxxxx',
corpora: 'allDrives',
includeItemsFromAllDrives: true,
keepRevisionForever: true,
ocrLanguage: 'en',
spaces: 'appDataFolder, drive',
supportsAllDrives: true,
uploadType: 'multipart',
useContentAsIndexableText: true,
},
undefined,
{ headers: { 'Content-Length': 12, 'Content-Type': 'multipart/related; boundary=XXXXXX' } },
);
});
});

View File

@ -96,8 +96,6 @@ export async function execute(this: IExecuteFunctions, i: number): Promise<INode
options,
);
const boundary = 'XXXXXX';
const qs = setUpdateCommonParams(
{
includeItemsFromAllDrives: true,
@ -147,34 +145,36 @@ export async function execute(this: IExecuteFunctions, i: number): Promise<INode
const content = Buffer.from(this.getNodeParameter('content', i, '') as string, 'utf8');
const contentLength = content.byteLength;
const body = `
\n--${boundary}\
\nContent-Type: application/json; charset=UTF-8\
\n\n${JSON.stringify(bodyParameters)}\
\n--${boundary}\
\nContent-Type: text/plain\
\nContent-Transfer-Encoding: base64\
\n\n${content}\
\n--${boundary}--`;
const responseData = await googleApiRequest.call(
const uploadData = await googleApiRequest.call(
this,
'POST',
'/upload/drive/v3/files',
body,
content,
{
uploadType: 'multipart',
...qs,
uploadType: 'media',
},
undefined,
{
headers: {
'Content-Type': `multipart/related; boundary=${boundary}`,
'Content-Type': mimeType,
'Content-Length': contentLength,
},
},
);
const uploadId = uploadData.id;
qs.addParents = setParentFolder(folderId, driveId);
delete bodyParameters.parents;
const responseData = await googleApiRequest.call(
this,
'PATCH',
`/drive/v3/files/${uploadId}`,
bodyParameters,
qs,
);
response = { id: responseData.id };
}