diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee new file mode 100644 index 0000000000..67b901ef6a --- /dev/null +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee @@ -0,0 +1,17 @@ +User = require('../models/User').User +Settings = require('settings-sharelatex') +EmailHandler = require("../Email/EmailHandler") +projectEntityHandler = require '../Project/ProjectEntityHandler' +mimelib = require("mimelib") + + + +module.exports = + + + + changeUsersPrivlageLevel: (project_id, user_id, newPrivalageLevel, callback)-> + @removeUserFromProject project_id, user_id, => + User.findById user_id, (err, user)=> + @addUserToProject project_id, user_id, newPrivalageLevel, callback + diff --git a/services/web/app/coffee/handlers/ProjectHandler.coffee b/services/web/app/coffee/handlers/ProjectHandler.coffee index e18d5c46f3..daff69bf32 100755 --- a/services/web/app/coffee/handlers/ProjectHandler.coffee +++ b/services/web/app/coffee/handlers/ProjectHandler.coffee @@ -74,10 +74,4 @@ module.exports = class ProjectHandler if err? logger.err err: err, "problem removing user from project collaberators" if callback? - callback() - - changeUsersPrivlageLevel: (project_id, user_id, newPrivalageLevel)-> - @removeUserFromProject project_id, user_id, ()=> - User.findById user_id, (err, user)=> - if user - @addUserToProject project_id, user.email, newPrivalageLevel + callback() \ No newline at end of file diff --git a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee new file mode 100644 index 0000000000..3d902f5cf4 --- /dev/null +++ b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee @@ -0,0 +1,39 @@ +should = require('chai').should() +SandboxedModule = require('sandboxed-module') +assert = require('assert') +path = require('path') +sinon = require('sinon') +modulePath = path.join __dirname, "../../../../app/js/Features/Collaborators/CollaboratorsHandler" +expect = require("chai").expect + +describe "CollaboratorsHandler", -> + + beforeEach -> + + @user = + email:"bob@bob.com" + @UserModel = + findById:sinon.stub().callsArgWith(1, null, @user) + + @settings = {} + @CollaboratorHandler = SandboxedModule.require modulePath, requires: + "settings-sharelatex":@settings + "logger-sharelatex": log:-> + '../models/User': User:@UserModel + + @project_id = "123l2j13lkj" + @user_id = "132kj1lk2j" + + describe "changeUsersPrivlageLevel", -> + + + 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.removeUserFromProject.calledWith(@project_id, @user_id).should.equal true + @CollaboratorHandler.addUserToProject.calledWith(@project_id, @user_id, newPrivalageLevel) + done() + +