mirror of
https://github.com/overleaf/overleaf.git
synced 2025-03-10 22:13:02 +00:00
Merge pull request #1643 from sharelatex/spd-transfer-projects
Add support for transferring project ownership GitOrigin-RevId: 088e02bb5be67033dba8e24c11660a1e200a3258
This commit is contained in:
parent
a5ad2e48d4
commit
d184087a53
2 changed files with 52 additions and 0 deletions
|
@ -8,6 +8,7 @@ _ = require("underscore")
|
|||
PublicAccessLevels = require("../Authorization/PublicAccessLevels")
|
||||
Errors = require("../Errors/Errors")
|
||||
ProjectTokenGenerator = require('./ProjectTokenGenerator')
|
||||
ProjectEntityHandler = require('./ProjectEntityHandler')
|
||||
ProjectHelper = require('./ProjectHelper')
|
||||
settings = require('settings-sharelatex')
|
||||
|
||||
|
@ -46,6 +47,26 @@ module.exports = ProjectDetailsHandler =
|
|||
logger.err err:err, "something went wrong setting project description"
|
||||
callback(err)
|
||||
|
||||
transferOwnership: (project_id, user_id, callback)->
|
||||
ProjectGetter.getProject project_id, {owner_ref: true}, (err, project)->
|
||||
return callback(err) if err?
|
||||
return callback(new Errors.NotFoundError("project not found")) unless project?
|
||||
return callback() if project.owner_ref == user_id
|
||||
|
||||
UserGetter.getUser user_id, (err, user) ->
|
||||
return callback(err) if err?
|
||||
return callback(new Errors.NotFoundError("user not found")) unless user?
|
||||
|
||||
Project.update {_id: project_id},
|
||||
{$set: {owner_ref: user_id}, $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
|
||||
|
||||
renameProject: (project_id, newName, callback = ->)->
|
||||
ProjectDetailsHandler.validateProjectName newName, (error) ->
|
||||
return callback(error) if error?
|
||||
|
|
|
@ -30,11 +30,14 @@ describe 'ProjectDetailsHandler', ->
|
|||
getUser: sinon.stub().callsArgWith(1, null, @user)
|
||||
@tpdsUpdateSender =
|
||||
moveEntity:sinon.stub().callsArgWith 1
|
||||
@ProjectEntityHandler =
|
||||
flushProjectToThirdPartyDataStore: sinon.stub().callsArg(1)
|
||||
@handler = SandboxedModule.require modulePath, requires:
|
||||
"./ProjectGetter":@ProjectGetter
|
||||
'../../models/Project': Project:@ProjectModel
|
||||
"../User/UserGetter": @UserGetter
|
||||
'../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender
|
||||
"./ProjectEntityHandler": @ProjectEntityHandler
|
||||
'logger-sharelatex':
|
||||
log:->
|
||||
err:->
|
||||
|
@ -80,6 +83,34 @@ describe 'ProjectDetailsHandler', ->
|
|||
err.should.equal error
|
||||
done()
|
||||
|
||||
describe "transferOwnership", ->
|
||||
it "should return a not found error if the project can't be found", (done) ->
|
||||
@ProjectGetter.getProject.callsArgWith(2)
|
||||
@handler.transferOwnership 'abc', '123', (err) ->
|
||||
err.should.exist
|
||||
err.name.should.equal "NotFoundError"
|
||||
done()
|
||||
|
||||
it "should return a not found error if the user can't be found", (done) ->
|
||||
@ProjectGetter.getProject.callsArgWith(2)
|
||||
@handler.transferOwnership 'abc', '123', (err) ->
|
||||
err.should.exist
|
||||
err.name.should.equal "NotFoundError"
|
||||
done()
|
||||
|
||||
it "should transfer ownership of the project", (done) ->
|
||||
@ProjectModel.update.callsArgWith(2)
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@ProjectModel.update, {_id: 'abc'})
|
||||
done()
|
||||
|
||||
it "should flush the project to tpds", (done) ->
|
||||
@ProjectModel.update.callsArgWith(2)
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@ProjectEntityHandler.flushProjectToThirdPartyDataStore, 'abc')
|
||||
done()
|
||||
|
||||
|
||||
describe "getProjectDescription", ->
|
||||
|
||||
it "should make a call to mongo just for the description", (done)->
|
||||
|
|
Loading…
Reference in a new issue