mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-03 06:09:02 +02:00
Merge pull request #1804 from overleaf/msm-removed-collaborator-as-first-step-transfer-ownership
Removing user as collaborator as a pre-step for project ownership transfer GitOrigin-RevId: dbfe1553ae7277863908341fdd2af709dc019692
This commit is contained in:
committed by
sharelatex
parent
56839ae6fb
commit
b84c24520c
@@ -10,6 +10,7 @@ Errors = require("../Errors/Errors")
|
||||
ProjectTokenGenerator = require('./ProjectTokenGenerator')
|
||||
ProjectEntityHandler = require('./ProjectEntityHandler')
|
||||
ProjectHelper = require('./ProjectHelper')
|
||||
CollaboratorsHandler = require('../Collaborators/CollaboratorsHandler')
|
||||
settings = require('settings-sharelatex')
|
||||
|
||||
|
||||
@@ -60,23 +61,21 @@ module.exports = ProjectDetailsHandler =
|
||||
return callback(err) if err?
|
||||
return callback(new Errors.NotFoundError("user not found")) unless user?
|
||||
|
||||
ProjectDetailsHandler.generateUniqueName user_id, project.name + suffix, (err, name) ->
|
||||
# we make sure the user to which the project is transferred is not a collaborator for the project,
|
||||
# this prevents any conflict during unique name generation
|
||||
CollaboratorsHandler.removeUserFromProject project_id, user_id, (err) ->
|
||||
return callback(err) if err?
|
||||
|
||||
Project.update {_id: project_id},
|
||||
{
|
||||
$set: {
|
||||
owner_ref: user_id,
|
||||
name: name
|
||||
},
|
||||
$pull: {
|
||||
readOnly_refs: user_id,
|
||||
collaberator_refs: user_id,
|
||||
tokenAccessReadAndWrite_refs: user_id,
|
||||
tokenAccessReadOnly_refs: user_id
|
||||
}}, (err) ->
|
||||
return callback(err) if err?
|
||||
ProjectEntityHandler.flushProjectToThirdPartyDataStore project_id, callback
|
||||
ProjectDetailsHandler.generateUniqueName user_id, project.name + suffix, (err, name) ->
|
||||
return callback(err) if err?
|
||||
Project.update {_id: project_id},
|
||||
{
|
||||
$set: {
|
||||
owner_ref: user_id,
|
||||
name: name
|
||||
}
|
||||
}, (err) ->
|
||||
return callback(err) if err?
|
||||
ProjectEntityHandler.flushProjectToThirdPartyDataStore project_id, callback
|
||||
|
||||
renameProject: (project_id, newName, callback = ->)->
|
||||
ProjectDetailsHandler.validateProjectName newName, (error) ->
|
||||
|
||||
@@ -32,12 +32,15 @@ describe 'ProjectDetailsHandler', ->
|
||||
moveEntity:sinon.stub().callsArgWith 1
|
||||
@ProjectEntityHandler =
|
||||
flushProjectToThirdPartyDataStore: sinon.stub().callsArg(1)
|
||||
@CollaboratorsHandler =
|
||||
removeUserFromProject: sinon.stub().callsArg(2)
|
||||
@handler = SandboxedModule.require modulePath, requires:
|
||||
"./ProjectGetter":@ProjectGetter
|
||||
'../../models/Project': Project:@ProjectModel
|
||||
"../User/UserGetter": @UserGetter
|
||||
'../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender
|
||||
"./ProjectEntityHandler": @ProjectEntityHandler
|
||||
"../Collaborators/CollaboratorsHandler": @CollaboratorsHandler
|
||||
'logger-sharelatex':
|
||||
log:->
|
||||
err:->
|
||||
@@ -102,11 +105,24 @@ describe 'ProjectDetailsHandler', ->
|
||||
err.name.should.equal "NotFoundError"
|
||||
done()
|
||||
|
||||
it "should return an error if user cannot be removed as collaborator ", (done) ->
|
||||
errorMessage = "user-cannot-be-removed"
|
||||
@CollaboratorsHandler.removeUserFromProject.callsArgWith(2, errorMessage)
|
||||
@handler.transferOwnership 'abc', '123', (err) ->
|
||||
err.should.exist
|
||||
err.should.equal errorMessage
|
||||
done()
|
||||
|
||||
it "should transfer ownership of the project", (done) ->
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@ProjectModel.update, {_id: 'abc'}, sinon.match({$set: {name: 'teapot'}}))
|
||||
done()
|
||||
|
||||
it "should remove the user from the project's collaborators", (done) ->
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@CollaboratorsHandler.removeUserFromProject, 'abc', '123')
|
||||
done()
|
||||
|
||||
it "should flush the project to tpds", (done) ->
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@ProjectEntityHandler.flushProjectToThirdPartyDataStore, 'abc')
|
||||
|
||||
Reference in New Issue
Block a user