mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-07 14:32:16 +00:00
Ensure project name is unique when transferring to another user (#1712)
Ensure project name is unique when transferring to another user GitOrigin-RevId: 0742fcbd958b5801ed155214f403a74d17236859
This commit is contained in:
parent
85e7f688d5
commit
d3f0285fd2
2 changed files with 27 additions and 12 deletions
|
@ -48,7 +48,7 @@ module.exports = ProjectDetailsHandler =
|
|||
callback(err)
|
||||
|
||||
transferOwnership: (project_id, user_id, callback)->
|
||||
ProjectGetter.getProject project_id, {owner_ref: true}, (err, project)->
|
||||
ProjectGetter.getProject project_id, {owner_ref: true, name: 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
|
||||
|
@ -57,15 +57,23 @@ module.exports = ProjectDetailsHandler =
|
|||
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
|
||||
ProjectDetailsHandler.generateUniqueName user_id, project.name, (err, name) ->
|
||||
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
|
||||
|
||||
renameProject: (project_id, newName, callback = ->)->
|
||||
ProjectDetailsHandler.validateProjectName newName, (error) ->
|
||||
|
|
|
@ -84,6 +84,10 @@ describe 'ProjectDetailsHandler', ->
|
|||
done()
|
||||
|
||||
describe "transferOwnership", ->
|
||||
beforeEach ->
|
||||
@handler.generateUniqueName = sinon.stub().callsArgWith(2, null, 'teapot')
|
||||
@ProjectModel.update.callsArgWith(2)
|
||||
|
||||
it "should return a not found error if the project can't be found", (done) ->
|
||||
@ProjectGetter.getProject.callsArgWith(2)
|
||||
@handler.transferOwnership 'abc', '123', (err) ->
|
||||
|
@ -99,17 +103,20 @@ describe 'ProjectDetailsHandler', ->
|
|||
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()
|
||||
|
||||
it "should generate a unique name for the project", (done) ->
|
||||
@handler.transferOwnership 'abc', '123', () =>
|
||||
sinon.assert.calledWith(@handler.generateUniqueName, '123', @project.name)
|
||||
done()
|
||||
|
||||
|
||||
describe "getProjectDescription", ->
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue