From ff74104a1b5d8d83320649b146780d65890e9e37 Mon Sep 17 00:00:00 2001 From: Montassar Ghanmy Date: Tue, 27 Feb 2024 10:34:44 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20files=20notifications=20on?= =?UTF-8?q?=20shared=20folder=20(#369)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/services/documents/services/index.ts | 20 ++++----- .../documents/documents-notifications.spec.ts | 42 ++++++++++++++++++- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/tdrive/backend/node/src/services/documents/services/index.ts b/tdrive/backend/node/src/services/documents/services/index.ts index b2fa2bc9..a3244621 100644 --- a/tdrive/backend/node/src/services/documents/services/index.ts +++ b/tdrive/backend/node/src/services/documents/services/index.ts @@ -369,19 +369,17 @@ export class DocumentsService { ) : []; - if (sharedWith.length > 0) { - // Notify the user that the document has been shared with them - this.logger.info("Notifying users that the document has been shared with them: ", { + if (context.user.id !== parentItem?.creator && sharedWith.length > 0) { + // Notify the owner that the document has been shared with them + this.logger.info("Notifying the onwer that the document has been shared with them: ", { sharedWith, }); - for (const info of sharedWith) { - gr.services.documents.engine.notifyDocumentShared({ - context, - item: driveItem, - notificationEmitter: context.user.id, - notificationReceiver: info.id, - }); - } + gr.services.documents.engine.notifyDocumentShared({ + context, + item: driveItem, + notificationEmitter: context.user.id, + notificationReceiver: parentItem.creator, + }); } } } catch (error) { diff --git a/tdrive/backend/node/test/e2e/documents/documents-notifications.spec.ts b/tdrive/backend/node/test/e2e/documents/documents-notifications.spec.ts index b9b3694e..14b1dd46 100644 --- a/tdrive/backend/node/test/e2e/documents/documents-notifications.spec.ts +++ b/tdrive/backend/node/test/e2e/documents/documents-notifications.spec.ts @@ -49,7 +49,6 @@ describe("the Drive feature", () => { platform = null; }); - it("Did notify the user after sharing a file.", async () => { // jest.setTimeout(20000); //given:: user uploaded one doc and give permission to another user @@ -86,4 +85,45 @@ describe("the Drive feature", () => { expect(notifyDocumentVersionUpdated).toHaveBeenCalled(); }); + + it("Did notify the owner after a user uploaded a file to a shared directory.", async () => { + const oneUser = await UserApi.getInstance(platform, true, { companyRole: "admin" }); + const anotherUser = await UserApi.getInstance(platform, true, { companyRole: "admin" }); + const thridUser = await UserApi.getInstance(platform, true, { companyRole: "admin" }); + + const directory = await oneUser.createDirectory(); + directory.access_info.entities.push({ + type: "user", + id: anotherUser.user.id, + level: "write", + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + grantor: null, + }); + + directory.access_info.entities.push({ + type: "user", + id: thridUser.user.id, + level: "write", + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + grantor: null, + }); + + await anotherUser.uploadRandomFileAndCreateDocument(directory.id); + // expect the owner to be notified + expect(notifyDocumentShared).toHaveBeenCalledWith( + expect.objectContaining({ + notificationEmitter: anotherUser.user.id, + notificationReceiver: oneUser.user.id, + }), + ); + // expect only one notification went through (the owner only notified) + expect(notifyDocumentShared).not.toHaveBeenCalledWith( + expect.objectContaining({ + notificationEmitter: oneUser.user.id, + notificationReceiver: thridUser.user.id, + }), + ); + }); });