From 430cf5cea8a06e6c7cec66094ff66132764eea7f Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 7 Apr 2014 20:46:58 +0100 Subject: [PATCH] created CollaboratorsHandler --- .../CollaboratorsController.coffee | 4 +- .../Collaborators/CollaboratorsHandler.coffee | 75 +++++++++++++++++-- .../Features/Editor/EditorController.coffee | 12 +-- .../SubscriptionViewModelBuilder.coffee | 2 - .../controllers/ProjectController.coffee | 4 +- .../app/coffee/handlers/ProjectHandler.coffee | 55 -------------- .../infrastructure/ExpressLocals.coffee | 6 +- services/web/app/coffee/router.coffee | 6 +- .../app/views/project/partials/manage.jade | 6 +- .../CollaboratorsControllerTests.coffee | 8 +- .../CollaboratorsHandlerTests.coffee | 30 +++++++- .../Editor/EditorControllerTests.coffee | 51 ++++++++----- 12 files changed, 151 insertions(+), 108 deletions(-) diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee index 3c80b26ab9..cbf3d9c04a 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee @@ -1,5 +1,5 @@ ProjectGetter = require "../Project/ProjectGetter" -ProjectHandler = require "../../handlers/ProjectHandler" +CollaboratorsHandler = require "./CollaboratorsHandler" module.exports = CollaboratorsController = @@ -17,7 +17,7 @@ module.exports = CollaboratorsController = user_id = req.session?.user?._id if !user_id? return next(new Error("User should be logged in")) - ProjectHandler::removeUserFromProject req.params.project_id, user_id, (error) -> + CollaboratorsHandler.removeUserFromProject req.params.project_id, user_id, (error) -> return next(error) if error? res.redirect "/project" diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee index 67b901ef6a..d84ae95d3a 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee @@ -1,17 +1,82 @@ -User = require('../models/User').User +User = require('../../models/User').User +Project = require("../../models/Project").Project Settings = require('settings-sharelatex') EmailHandler = require("../Email/EmailHandler") -projectEntityHandler = require '../Project/ProjectEntityHandler' mimelib = require("mimelib") - +logger = require('logger-sharelatex') +async = require("async") module.exports = + removeUserFromProject: (project_id, user_id, callback = ->)-> + logger.log user_id: user_id, project_id: project_id, "removing user" + conditions = _id:project_id + update = $pull:{} + update["$pull"] = collaberator_refs:user_id, readOnly_refs:user_id + Project.update conditions, update, (err)-> + if err? + logger.err err: err, "problem removing user from project collaberators" + callback(err) - - changeUsersPrivlageLevel: (project_id, user_id, newPrivalageLevel, callback)-> + changeUsersPrivilegeLevel: (project_id, user_id, newPrivalageLevel, callback = ->)-> @removeUserFromProject project_id, user_id, => User.findById user_id, (err, user)=> @addUserToProject project_id, user_id, newPrivalageLevel, callback + addUserToProject: (project_id, email, privilegeLevel, callback)-> + emails = mimelib.parseAddresses(email) + email = emails[0].address?.toLowerCase() + self = @ + User.findOne {'email':email}, (err, user)-> + async.waterfall [ + (cb)-> + if user? + return cb(null, user) + else + self._createHoldingAccount email, cb + (@user, cb)=> + self._updateProjectWithUserPrivileges project_id, user, privilegeLevel, cb + (cb)-> + self._notifyUserViaEmail project_id, email, cb + ], (err)=> + callback(err, @user) + + _createHoldingAccount: (email, callback)-> + user = new User 'email':email, holdingAccount:true + user.save (err)-> + callback(err, user) + + _updateProjectWithUserPrivileges: (project_id, user, privilegeLevel, callback)-> + if privilegeLevel == 'readAndWrite' + level = {"collaberator_refs":user} + logger.log privileges: "readAndWrite", user: user, project_id: project_id, "adding user" + else if privilegeLevel == 'readOnly' + level = {"readOnly_refs":user} + logger.log privileges: "readOnly", user: user, project_id: project_id, "adding user" + Project.update {_id: project_id}, {$push:level}, (err)-> + callback(err) + + + _notifyUserViaEmail: (project_id, email, callback)-> + Project.findOne(_id: project_id ) + .select("name owner_ref") + .populate('owner_ref') + .exec (err, project)-> + emailOptions = + to : email + replyTo : project.owner_ref.email + project: + name: project.name + url: "#{Settings.siteUrl}/project/#{project._id}?" + [ + "project_name=#{encodeURIComponent(project.name)}" + "user_first_name=#{encodeURIComponent(project.owner_ref.first_name)}" + "new_email=#{encodeURIComponent(email)}" + "r=#{project.owner_ref.referal_id}" # Referal + "rs=ci" # referral source = collaborator invite + ].join("&") + owner: project.owner_ref + EmailHandler.sendEmail "projectSharedWithYou", emailOptions, callback + + + diff --git a/services/web/app/coffee/Features/Editor/EditorController.coffee b/services/web/app/coffee/Features/Editor/EditorController.coffee index 4cfd5a9972..0409f0002a 100644 --- a/services/web/app/coffee/Features/Editor/EditorController.coffee +++ b/services/web/app/coffee/Features/Editor/EditorController.coffee @@ -7,7 +7,7 @@ ProjectOptionsHandler = require('../Project/ProjectOptionsHandler') ProjectDetailsHandler = require('../Project/ProjectDetailsHandler') ProjectDeleter = require("../Project/ProjectDeleter") ProjectGetter = require('../Project/ProjectGetter') -ProjectHandler = new (require('../../handlers/ProjectHandler'))() +CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler") DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler') LimitationsManager = require("../Subscription/LimitationsManager") AuthorizationManager = require("../Security/AuthorizationManager") @@ -124,7 +124,7 @@ module.exports = EditorController = cursorData.name = "Anonymous" EditorRealTimeController.emitToRoom(project_id, "clientTracking.clientUpdated", cursorData) - addUserToProject: (project_id, email, privlages, callback = (error, collaborator_added)->)-> + addUserToProject: (project_id, email, privileges, callback = (error, collaborator_added)->)-> email = email.toLowerCase() LimitationsManager.isCollaboratorLimitReached project_id, (error, limit_reached) => if error? @@ -134,12 +134,13 @@ module.exports = EditorController = if limit_reached callback null, false else - ProjectHandler.addUserToProject project_id, email, privlages, (user)=> - EditorRealTimeController.emitToRoom(project_id, 'userAddedToProject', user, privlages) + CollaboratorsHandler.addUserToProject project_id, email, privileges, (err, user)=> + ProjectEntityHandler.flushProjectToThirdPartyDataStore project_id, "", -> + EditorRealTimeController.emitToRoom(project_id, 'userAddedToProject', user, privileges) callback null, true removeUserFromProject: (project_id, user_id, callback)-> - ProjectHandler.removeUserFromProject project_id, user_id, => + CollaboratorsHandler.removeUserFromProject project_id, user_id, => EditorRealTimeController.emitToRoom(project_id, 'userRemovedFromProject', user_id) if callback? callback() @@ -241,7 +242,6 @@ module.exports = EditorController = deleteProject: (project_id, callback)-> Metrics.inc "editor.delete-project" logger.log project_id:project_id, "recived message to delete project" - console.log ProjectDeleter ProjectDeleter.deleteProject project_id, callback renameEntity: (project_id, entity_id, entityType, newName, callback)-> diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee index 74f91a8dad..340863a405 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee @@ -38,8 +38,6 @@ module.exports = buildViewModel : -> plans = Settings.plans - console.log plans - console.log(typeof(plans)) allPlans = {} plans.forEach (plan)-> allPlans[plan.planCode] = plan diff --git a/services/web/app/coffee/controllers/ProjectController.coffee b/services/web/app/coffee/controllers/ProjectController.coffee index 40084cfe0b..ac94579634 100755 --- a/services/web/app/coffee/controllers/ProjectController.coffee +++ b/services/web/app/coffee/controllers/ProjectController.coffee @@ -124,7 +124,7 @@ module.exports = class ProjectController else anonymous = false SubscriptionLocator.getUsersSubscription user?._id, (err, subscription)-> - SecurityManager.userCanAccessProject user, project, (canAccess, privlageLevel)-> + SecurityManager.userCanAccessProject user, project, (canAccess, privilegeLevel)-> allowedFreeTrial = true if subscription? and subscription.freeTrial? and subscription.freeTrial.expiresAt? allowedFreeTrial = !!subscription.freeTrial.allowed @@ -160,7 +160,7 @@ module.exports = class ProjectController siteUrl: Settings.siteUrl, jsPath: res.locals.jsPath }) - privlageLevel: privlageLevel + privilegeLevel: privilegeLevel userCanSeeDropbox: user.featureSwitches.dropbox and project.owner_ref._id+"" == user._id+"" loadPdfjs: (user.ace.pdfViewer == "pdfjs") chatUrl: Settings.apis.chat.url diff --git a/services/web/app/coffee/handlers/ProjectHandler.coffee b/services/web/app/coffee/handlers/ProjectHandler.coffee index daff69bf32..90b7cb83e2 100755 --- a/services/web/app/coffee/handlers/ProjectHandler.coffee +++ b/services/web/app/coffee/handlers/ProjectHandler.coffee @@ -20,58 +20,3 @@ tagsHandler = require('../Features/Tags/TagsHandler') module.exports = class ProjectHandler - - - addUserToProject: (project_id, email, privlages, callback)-> - if email != '' - doAdd = (user)=> - Project.findOne(_id: project_id ) - .select("name owner_ref") - .populate('owner_ref') - .exec (err, project)-> - emailOptions = - to : email - replyTo : project.owner_ref.email - project: - name: project.name - url: "#{Settings.siteUrl}/project/#{project._id}?" + [ - "project_name=#{encodeURIComponent(project.name)}" - "user_first_name=#{encodeURIComponent(project.owner_ref.first_name)}" - "new_email=#{encodeURIComponent(email)}" - "r=#{project.owner_ref.referal_id}" # Referal - "rs=ci" # referral source = collaborator invite - ].join("&") - owner: project.owner_ref - EmailHandler.sendEmail "projectSharedWithYou", emailOptions, -> - if privlages == 'readAndWrite' - level = {"collaberator_refs":user} - logger.log privileges: "readAndWrite", user: user, project: project, "adding user" - else if privlages == 'readOnly' - level = {"readOnly_refs":user} - logger.log privileges: "readOnly", user: user, project: project, "adding user" - Project.update {_id: project_id}, {$push:level},{},(err)-> - projectEntityHandler.flushProjectToThirdPartyDataStore project_id, "", -> - if callback? - callback(user) - - emails = mimelib.parseAddresses(email) - email = emails[0].address - User.findOne {'email':email}, (err, user)-> - if(!user) - user = new User 'email':email, holdingAccount:true - user.save (err)-> - logger.log user: user, 'creating new empty user' - doAdd user - else - doAdd user - - removeUserFromProject: (project_id, user_id, callback)-> - logger.log user_id: user_id, project_id: project_id, "removing user" - conditions = _id:project_id - update = $pull:{} - update["$pull"] = collaberator_refs:user_id, readOnly_refs:user_id - Project.update conditions, update, {}, (err)-> - if err? - logger.err err: err, "problem removing user from project collaberators" - if callback? - callback() \ No newline at end of file diff --git a/services/web/app/coffee/infrastructure/ExpressLocals.coffee b/services/web/app/coffee/infrastructure/ExpressLocals.coffee index 82d55f24f2..ca342f618b 100644 --- a/services/web/app/coffee/infrastructure/ExpressLocals.coffee +++ b/services/web/app/coffee/infrastructure/ExpressLocals.coffee @@ -54,9 +54,9 @@ module.exports = (app)-> next() app.use (req, res, next)-> - res.locals.formatProjectPublicAccessLevel = (privlageLevel)-> - formatedPrivlages = private:"Private", readOnly:"Public: Read Only", readAndWrite:"Public: Read and Write" - return formatedPrivlages[privlageLevel] || "Private" + res.locals.formatProjectPublicAccessLevel = (privilegeLevel)-> + formatedPrivileges = private:"Private", readOnly:"Public: Read Only", readAndWrite:"Public: Read and Write" + return formatedPrivileges[privilegeLevel] || "Private" next() app.use (req, res, next)-> diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index a092370f2f..ed7c74cd76 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -198,7 +198,7 @@ module.exports = class Router app.get '/test', (req, res) -> res.render "tests", - privlageLevel: "owner" + privilegeLevel: "owner" project: name: "test" date: Date.now() @@ -314,9 +314,9 @@ module.exports = class Router AuthorizationManager.ensureClientCanViewProject client, (error, project_id) => CompileManager.compile(project_id, user._id, opts, callback) - client.on 'changeUsersPrivlageLevel', (user_id, newPrivalageLevel)-> + client.on 'changeUsersPrivilegeLevel', (user_id, newPrivalageLevel)-> AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) => - projectHandler.changeUsersPrivlageLevel project_id, user_id, newPrivalageLevel + projectHandler.changeUsersPrivilegeLevel project_id, user_id, newPrivalageLevel client.on 'enableversioningController', (callback)-> AuthorizationManager.ensureClientCanEditProject client, (error, project_id) => diff --git a/services/web/app/views/project/partials/manage.jade b/services/web/app/views/project/partials/manage.jade index a6bca39ffc..8b317930a2 100644 --- a/services/web/app/views/project/partials/manage.jade +++ b/services/web/app/views/project/partials/manage.jade @@ -16,7 +16,7 @@ .tab-content.form-horizontal .tab-pane#generalProjectSettings.form.form-horizontal.active - if privlageLevel == 'owner' || privlageLevel == 'readAndWrite' + if privilegeLevel == 'owner' || privilegeLevel == 'readAndWrite' .control-group label(for='xlInput').control-label Project Name .controls @@ -54,7 +54,7 @@ else span You do not have permission to modify these settings. - if privlageLevel == 'owner' + if privilegeLevel == 'owner' .control-group label(for='select').control-label Public Access .controls @@ -69,7 +69,7 @@ a.btn(href='/project/'+project._id+'/clone').cloneProject Clone Project .tab-pane#deleteProjectTab - if privlageLevel == 'owner' + if privilegeLevel == 'owner' button#deleteProject.btn.btn-danger Delete Project else span You do not have permission to modify these settings. diff --git a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsControllerTests.coffee b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsControllerTests.coffee index 2fa883bad6..8460b6b00e 100644 --- a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsControllerTests.coffee @@ -11,9 +11,11 @@ ObjectId = require("mongojs").ObjectId describe "CollaboratorsController", -> beforeEach -> + @CollaboratorsHandler = + removeUserFromProject:sinon.stub() @CollaboratorsController = SandboxedModule.require modulePath, requires: "../Project/ProjectGetter": @ProjectGetter = {} - "../../handlers/ProjectHandler": @ProjectHandler = class ProjectHandler + "./CollaboratorsHandler": @CollaboratorsHandler @res = new MockResponse() @req = new MockRequest() @@ -54,12 +56,12 @@ describe "CollaboratorsController", -> user: _id: @user_id = "user-id-123" destroy:-> @req.params = project_id: @project_id - @ProjectHandler::removeUserFromProject = sinon.stub().callsArg(2) + @CollaboratorsHandler.removeUserFromProject = sinon.stub().callsArg(2) @CollaboratorsController.removeSelfFromProject(@req, @res) it "should remove the logged in user from the project", -> - @ProjectHandler::removeUserFromProject.calledWith(@project_id, @user_id) + @CollaboratorsHandler.removeUserFromProject.calledWith(@project_id, @user_id) it "should redirect to the project page", -> @res.redirectedTo.should.equal "/project" diff --git a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee index 3d902f5cf4..ea758a4699 100644 --- a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee @@ -14,26 +14,48 @@ describe "CollaboratorsHandler", -> email:"bob@bob.com" @UserModel = findById:sinon.stub().callsArgWith(1, null, @user) + update: sinon.stub() @settings = {} + @ProjectModel = + update: sinon.stub().callsArgWith(1) @CollaboratorHandler = SandboxedModule.require modulePath, requires: "settings-sharelatex":@settings - "logger-sharelatex": log:-> - '../models/User': User:@UserModel + "logger-sharelatex": + log:-> + err:-> + '../../models/User': User:@UserModel + "../../models/Project": Project:@ProjectModel @project_id = "123l2j13lkj" @user_id = "132kj1lk2j" - describe "changeUsersPrivlageLevel", -> + describe "changeUsersPrivilegeLevel", -> it "should call removeUserFromProject then addUserToProject", (done)-> @CollaboratorHandler.removeUserFromProject = sinon.stub().callsArgWith(2) @CollaboratorHandler.addUserToProject = sinon.stub().callsArgWith(3) newPrivalageLevel = "readAndWrite" - @CollaboratorHandler.changeUsersPrivlageLevel @project_id, @user_id, newPrivalageLevel, => + @CollaboratorHandler.changeUsersPrivilegeLevel @project_id, @user_id, newPrivalageLevel, => @CollaboratorHandler.removeUserFromProject.calledWith(@project_id, @user_id).should.equal true @CollaboratorHandler.addUserToProject.calledWith(@project_id, @user_id, newPrivalageLevel) done() + describe "removeUserFromProject", -> + + beforeEach -> + @ProjectModel.update.callsArgWith(2) + + it "should remove the user from mongo", (done)-> + + @CollaboratorHandler.removeUserFromProject @project_id, @user_id, => + update = @ProjectModel.update.args[0][1] + assert.deepEqual update, "$pull":{collaberator_refs:@user_id, readOnly_refs:@user_id} + done() + + + + + diff --git a/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee b/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee index cc1dde8a85..5da77ae5cc 100644 --- a/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee @@ -30,10 +30,10 @@ describe "EditorController", -> @ProjectOptionsHandler = setCompiler : sinon.spy() setSpellCheckLanguage: sinon.spy() - @ProjectEntityHandler = {} + @ProjectEntityHandler = + flushProjectToThirdPartyDataStore:sinon.stub() @ProjectEditorHandler = buildProjectModelView : sinon.stub().returns(@projectModelView) - @ProjectHandler = class ProjectHandler @Project = findPopulatedById: sinon.stub().callsArgWith(1, null, @project) @LimitationsManager = {} @@ -51,17 +51,24 @@ describe "EditorController", -> @TpdsPollingBackgroundTasks = {} @ProjectDetailsHandler = setProjectDescription:sinon.stub() + @CollaboratorsHandler = + removeUserFromProject: sinon.stub().callsArgWith(2) + addUserToProject: sinon.stub().callsArgWith(3) + @ProjectDeleter = + deleteProject: sinon.stub() + @EditorController = SandboxedModule.require modulePath, requires: "../../infrastructure/Server" : io : @io '../Project/ProjectEditorHandler' : @ProjectEditorHandler '../Project/ProjectEntityHandler' : @ProjectEntityHandler '../Project/ProjectOptionsHandler' : @ProjectOptionsHandler '../Project/ProjectDetailsHandler': @ProjectDetailsHandler + '../Project/ProjectDeleter' : @ProjectDeleter '../Project/ProjectGetter' : @ProjectGetter = {} + '../Collaborators/CollaboratorsHandler': @CollaboratorsHandler '../DocumentUpdater/DocumentUpdaterHandler' : @DocumentUpdaterHandler '../Subscription/LimitationsManager' : @LimitationsManager '../Security/AuthorizationManager' : @AuthorizationManager - '../../handlers/ProjectHandler' : @ProjectHandler "../Versioning/AutomaticSnapshotManager" : @AutomaticSnapshotManager "../Versioning/VersioningApiHandler" : @VersioningApiHandler '../../models/Project' : Project: @Project @@ -293,25 +300,29 @@ describe "EditorController", -> @email = "Jane.Doe@example.com" @priveleges = "readOnly" @addedUser = { _id: "added-user" } - @ProjectHandler::addUserToProject = sinon.stub().callsArgWith(3, @addedUser) + @CollaboratorsHandler.addUserToProject = sinon.stub().callsArgWith(3, null, @addedUser) @EditorRealTimeController.emitToRoom = sinon.stub() @callback = sinon.stub() describe "when the project can accept more collaborators", -> beforeEach -> @LimitationsManager.isCollaboratorLimitReached = sinon.stub().callsArgWith(1, null, false) - @EditorController.addUserToProject(@project_id, @email, @priveleges, @callback) - it "should add the user to the project", -> - @ProjectHandler::addUserToProject - .calledWith(@project_id, @email.toLowerCase(), @priveleges) - .should.equal true + it "should add the user to the project", (done)-> + @EditorController.addUserToProject @project_id, @email, @priveleges, => + @CollaboratorsHandler.addUserToProject.calledWith(@project_id, @email.toLowerCase(), @priveleges).should.equal true + done() - it "should emit a userAddedToProject event", -> - @EditorRealTimeController.emitToRoom.calledWith(@project_id, "userAddedToProject", @addedUser).should.equal true + it "should emit a userAddedToProject event", (done)-> + @EditorController.addUserToProject @project_id, @email, @priveleges, => + @EditorRealTimeController.emitToRoom.calledWith(@project_id, "userAddedToProject", @addedUser).should.equal true + done() + + it "should return true to the callback", (done)-> + @EditorController.addUserToProject @project_id, @email, @priveleges, (err, result)=> + result.should.equal true + done() - it "should return true to the callback", -> - @callback.calledWith(null, true).should.equal true describe "when the project cannot accept more collaborators", -> beforeEach -> @@ -319,7 +330,7 @@ describe "EditorController", -> @EditorController.addUserToProject(@project_id, @email, @priveleges, @callback) it "should not add the user to the project", -> - @ProjectHandler::addUserToProject.called.should.equal false + @CollaboratorsHandler.addUserToProject.called.should.equal false it "should not emit a userAddedToProject event", -> @EditorRealTimeController.emitToRoom.called.should.equal false @@ -331,13 +342,13 @@ describe "EditorController", -> describe "removeUserFromProject", -> beforeEach -> @removed_user_id = "removed-user-id" - @ProjectHandler::removeUserFromProject = sinon.stub().callsArgWith(2) + @CollaboratorsHandler.removeUserFromProject = sinon.stub().callsArgWith(2) @EditorRealTimeController.emitToRoom = sinon.stub() @EditorController.removeUserFromProject(@project_id, @removed_user_id) it "remove the user from the project", -> - @ProjectHandler::removeUserFromProject + @CollaboratorsHandler.removeUserFromProject .calledWith(@project_id, @removed_user_id) .should.equal true @@ -613,12 +624,12 @@ describe "EditorController", -> beforeEach -> @err = "errro" - @ProjectHandler::deleteProject = sinon.stub().callsArgWith(1, @err) + @ProjectDeleter.deleteProject = sinon.stub().callsArgWith(1, @err) it "should call the project handler", (done)-> @EditorController.deleteProject @project_id, (err)=> err.should.equal @err - @ProjectHandler::deleteProject.calledWith(@project_id).should.equal true + @ProjectDeleter.deleteProject.calledWith(@project_id).should.equal true done() @@ -673,7 +684,7 @@ describe "EditorController", -> @ProjectDetailsHandler.renameProject = sinon.stub().callsArgWith(2, @err) @EditorRealTimeController.emitToRoom = sinon.stub() - it "should call the ProjectHandler", (done)-> + it "should call the EditorController", (done)-> @EditorController.renameProject @project_id, @newName, => @ProjectDetailsHandler.renameProject.calledWith(@project_id, @newName).should.equal true done() @@ -693,7 +704,7 @@ describe "EditorController", -> @ProjectDetailsHandler.setPublicAccessLevel = sinon.stub().callsArgWith(2, @err) @EditorRealTimeController.emitToRoom = sinon.stub() - it "should call the ProjectHandler", (done)-> + it "should call the EditorController", (done)-> @EditorController.setPublicAccessLevel @project_id, @newAccessLevel, => @ProjectDetailsHandler.setPublicAccessLevel.calledWith(@project_id, @newAccessLevel).should.equal true done()