From 4b291fab2aff947a0a81f9499483d16d73ae3a9d Mon Sep 17 00:00:00 2001 From: Tim Alby Date: Thu, 22 Feb 2018 16:22:55 -0500 Subject: [PATCH 1/3] Record new project event --- .../app/coffee/Features/Project/ProjectCreationHandler.coffee | 4 ++++ .../unit/coffee/Project/ProjectCreationHandlerTests.coffee | 3 +++ 2 files changed, 7 insertions(+) diff --git a/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee b/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee index 8af70e5fc5..76ca7e594c 100644 --- a/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee @@ -12,6 +12,7 @@ User = require('../../models/User').User fs = require('fs') Path = require "path" _ = require "underscore" +AnalyticsManger = require("../Analytics/AnalyticsManager") module.exports = ProjectCreationHandler = @@ -46,6 +47,9 @@ module.exports = ProjectCreationHandler = project.spellCheckLanguage = user.ace.spellCheckLanguage project.save (err)-> return callback(err) if err? + AnalyticsManger.recordEvent( + owner_id, 'project-created', { projectId: project._id } + ) callback err, project createBasicProject : (owner_id, projectName, callback = (error, project) ->)-> diff --git a/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee b/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee index 7c940ea323..dd9308fb56 100644 --- a/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee +++ b/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee @@ -52,6 +52,8 @@ describe 'ProjectCreationHandler', -> @Settings = apis: { project_history: {} } + @AnalyticsManger = recordEvent: sinon.stub() + @handler = SandboxedModule.require modulePath, requires: '../../models/User': User:@User '../../models/Project':{Project:@ProjectModel} @@ -60,6 +62,7 @@ describe 'ProjectCreationHandler', -> './ProjectEntityUpdateHandler':@ProjectEntityUpdateHandler "./ProjectDetailsHandler":@ProjectDetailsHandler "settings-sharelatex": @Settings + "../Analytics/AnalyticsManager": @AnalyticsManger 'logger-sharelatex': {log:->} "metrics-sharelatex": { inc: ()->, From d5109d22d2548f45f71f026d76010c50e53ec9dd Mon Sep 17 00:00:00 2001 From: Tim Alby Date: Tue, 6 Mar 2018 18:26:25 -0500 Subject: [PATCH 2/3] record both project-created and project-imported events --- .../Project/ProjectCreationHandler.coffee | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee b/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee index 76ca7e594c..0b66b38ad6 100644 --- a/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectCreationHandler.coffee @@ -26,11 +26,21 @@ module.exports = ProjectCreationHandler = return callback(error) if error? logger.log owner_id:owner_id, projectName:projectName, "creating blank project" if projectHistoryId? - ProjectCreationHandler._createBlankProject owner_id, projectName, projectHistoryId, callback + ProjectCreationHandler._createBlankProject owner_id, projectName, projectHistoryId, (error, project) -> + return callback(error) if error? + AnalyticsManger.recordEvent( + owner_id, 'project-imported', { projectId: project._id, projectHistoryId: projectHistoryId } + ) + callback(error, project) else HistoryManager.initializeProject (error, history) -> return callback(error) if error? - ProjectCreationHandler._createBlankProject owner_id, projectName, history?.overleaf_id, callback + ProjectCreationHandler._createBlankProject owner_id, projectName, history?.overleaf_id, (error, project) -> + return callback(error) if error? + AnalyticsManger.recordEvent( + owner_id, 'project-created', { projectId: project._id } + ) + callback(error, project) _createBlankProject : (owner_id, projectName, projectHistoryId, callback = (error, project) ->)-> rootFolder = new Folder {'name':'rootFolder'} @@ -47,9 +57,6 @@ module.exports = ProjectCreationHandler = project.spellCheckLanguage = user.ace.spellCheckLanguage project.save (err)-> return callback(err) if err? - AnalyticsManger.recordEvent( - owner_id, 'project-created', { projectId: project._id } - ) callback err, project createBasicProject : (owner_id, projectName, callback = (error, project) ->)-> From 9dc86005889b514a418872c09f15e3e5c8e91b7b Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 12 Mar 2018 10:50:15 +0000 Subject: [PATCH 3/3] Add a unit test for the analytics events sent from project-creation --- .../ProjectCreationHandlerTests.coffee | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee b/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee index dd9308fb56..042dc34d09 100644 --- a/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee +++ b/services/web/test/unit/coffee/Project/ProjectCreationHandlerTests.coffee @@ -52,7 +52,7 @@ describe 'ProjectCreationHandler', -> @Settings = apis: { project_history: {} } - @AnalyticsManger = recordEvent: sinon.stub() + @AnalyticsManager = recordEvent: sinon.stub() @handler = SandboxedModule.require modulePath, requires: '../../models/User': User:@User @@ -62,7 +62,7 @@ describe 'ProjectCreationHandler', -> './ProjectEntityUpdateHandler':@ProjectEntityUpdateHandler "./ProjectDetailsHandler":@ProjectDetailsHandler "settings-sharelatex": @Settings - "../Analytics/AnalyticsManager": @AnalyticsManger + "../Analytics/AnalyticsManager": @AnalyticsManager 'logger-sharelatex': {log:->} "metrics-sharelatex": { inc: ()->, @@ -131,6 +131,23 @@ describe 'ProjectCreationHandler', -> expect(project.overleaf.history.display).to.equal true done() + it "should send a project-created event to analytics", (done) -> + @handler.createBlankProject ownerId, projectName, (err, project) => + expect(@AnalyticsManager.recordEvent.callCount).to.equal 1 + expect( + @AnalyticsManager.recordEvent.calledWith(ownerId, 'project-created') + ).to.equal true + done() + + it "should send a project-imported event when importing a project", (done) -> + @handler.createBlankProject ownerId, projectName, 1234, (err, project) => + expect(@AnalyticsManager.recordEvent.callCount).to.equal 1 + expect( + @AnalyticsManager.recordEvent.calledWith(ownerId, 'project-imported') + ).to.equal true + done() + + describe "with an error", -> beforeEach -> @ProjectModel::save = sinon.stub().callsArgWith(0, new Error("something went wrong"))