diff --git a/services/web/app/src/Features/TokenAccess/TokenAccessController.js b/services/web/app/src/Features/TokenAccess/TokenAccessController.js index dbfea873f9..26fed096ed 100644 --- a/services/web/app/src/Features/TokenAccess/TokenAccessController.js +++ b/services/web/app/src/Features/TokenAccess/TokenAccessController.js @@ -340,6 +340,14 @@ async function grantTokenAccessReadAndWrite(req, res, next) { req.ip, { privileges: 'readAndWrite' } ) + AnalyticsManager.recordEventForUserInBackground( + userId, + 'project-joined', + { + mode: 'read-write', + projectId: project._id.toString(), + } + ) // Currently does not enforce the collaborator limit (warning phase) await CollaboratorsHandler.promises.addUserIdToProject( project._id, diff --git a/services/web/test/unit/src/TokenAccess/TokenAccessControllerTests.js b/services/web/test/unit/src/TokenAccess/TokenAccessControllerTests.js index c010be0b54..4dcc439b4d 100644 --- a/services/web/test/unit/src/TokenAccess/TokenAccessControllerTests.js +++ b/services/web/test/unit/src/TokenAccess/TokenAccessControllerTests.js @@ -108,6 +108,7 @@ describe('TokenAccessController', function () { this.AnalyticsManager = { recordEventForSession: sinon.stub(), + recordEventForUserInBackground: sinon.stub(), } this.UserGetter = { @@ -252,6 +253,15 @@ describe('TokenAccessController', function () { ) }) + it('records a project-joined event for the user', function () { + expect( + this.AnalyticsManager.recordEventForUserInBackground + ).to.have.been.calledWith(this.user._id, 'project-joined', { + mode: 'read-write', + projectId: this.project._id.toString(), + }) + }) + it('emits a project membership changed event', function () { expect( this.EditorRealTimeController.emitToRoom