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, + }), + ); + }); });