diff --git a/services/web/app/coffee/Features/Editor/EditorController.coffee b/services/web/app/coffee/Features/Editor/EditorController.coffee index 135f3a8c5c..38552630d5 100644 --- a/services/web/app/coffee/Features/Editor/EditorController.coffee +++ b/services/web/app/coffee/Features/Editor/EditorController.coffee @@ -259,11 +259,11 @@ module.exports = EditorController = EditorRealTimeController.emitToRoom project_id, 'reciveEntityMove', entity_id, folder_id callback?() - renameProject: (project_id, window_id, newName, callback)-> + renameProject: (project_id, newName, callback)-> newName = sanitize.escape(newName) - ProjectHandler.renameProject project_id, window_id, newName, => + ProjectDetailsHandler.renameProject project_id, newName, => newName = sanitize.escape(newName) - EditorRealTimeController.emitToRoom project_id, 'projectNameUpdated', window_id, newName + EditorRealTimeController.emitToRoom project_id, 'projectNameUpdated', newName callback?() setPublicAccessLevel : (project_id, newAccessLevel, callback)-> diff --git a/services/web/app/coffee/Features/Project/ProjectDetailsHandler.coffee b/services/web/app/coffee/Features/Project/ProjectDetailsHandler.coffee index 3d59a16e94..3bcf98cb14 100644 --- a/services/web/app/coffee/Features/Project/ProjectDetailsHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectDetailsHandler.coffee @@ -2,6 +2,8 @@ ProjectGetter = require("./ProjectGetter") UserGetter = require("../User/UserGetter") Project = require('../../models/Project').Project logger = require("logger-sharelatex") +tpdsUpdateSender = require '../ThirdPartyDataStore/TpdsUpdateSender' + module.exports = @@ -28,3 +30,15 @@ module.exports = if err? logger.err err:err, "something went wrong setting project description" callback(err) + + renameProject: (project_id, newName, callback = ->)-> + logger.log project_id: project_id, newName:newName, "renaming project" + ProjectGetter.getProject project_id, {"name":1}, (err, project)-> + if err? or !project? + logger.err err:err, project_id:project_id, "error getting project or could not find it todo project rename" + return callback(err) + oldProjectName = project.name + Project.update _id:project_id, {name: newName}, (err, project)=> + if err? + return callback(err) + tpdsUpdateSender.moveEntity {project_id:project_id, project_name:oldProjectName, newProjectName:newName}, callback diff --git a/services/web/app/coffee/handlers/ProjectHandler.coffee b/services/web/app/coffee/handlers/ProjectHandler.coffee index 3c42fef479..f1ca69c051 100755 --- a/services/web/app/coffee/handlers/ProjectHandler.coffee +++ b/services/web/app/coffee/handlers/ProjectHandler.coffee @@ -20,19 +20,6 @@ tagsHandler = require('../Features/Tags/TagsHandler') module.exports = class ProjectHandler - - renameProject: (project_id, window_id, newName, callback)-> - logger.log project_id: project_id, "renaming project" - conditons = {_id:project_id} - Project.findOne conditons, "name", (err, project)-> - oldProjectName = project.name - Project.update conditons, {name: newName}, {},(err, project)=> - tpdsUpdateSender.moveEntity {project_id:project_id, project_name:oldProjectName, newProjectName:newName} - if callback? - callback err - - - setPublicAccessLevel : (project_id, newAccessLevel, callback)-> logger.log project_id: project_id, level: newAccessLevel, "set public access level" if project_id? && newAccessLevel? diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index bdc83d4128..a092370f2f 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -294,9 +294,9 @@ module.exports = class Router AuthorizationManager.ensureClientCanEditProject client, (error, project_id) => EditorController.moveEntity(project_id, entity_id, folder_id, entityType, callback) - client.on 'setProjectName', (window_id, newName, callback)-> + client.on 'setProjectName', (newName, callback)-> AuthorizationManager.ensureClientCanEditProject client, (error, project_id) => - EditorController.renameProject(project_id, window_id, newName, callback) + EditorController.renameProject(project_id, newName, callback) client.on 'setRootDoc', (newRootDocID, callback)-> AuthorizationManager.ensureClientCanEditProject client, (error, project_id) => diff --git a/services/web/public/coffee/models/Project.coffee b/services/web/public/coffee/models/Project.coffee index 952dbdb3d6..92634352b2 100644 --- a/services/web/public/coffee/models/Project.coffee +++ b/services/web/public/coffee/models/Project.coffee @@ -55,8 +55,8 @@ define [ remoteChange = false @on "change:name", (project, name) => if !remoteChange - @get("ide").socket.emit "setProjectName", window.window_id, name - @get("ide").socket.on "projectNameUpdated", (senderWindowId, name) => + @get("ide").socket.emit "setProjectName", name + @get("ide").socket.on "projectNameUpdated", (name) => remoteChange = true @set("name", name) remoteChange = false diff --git a/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee b/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee index 1f2f524d3d..655ba0fcc6 100644 --- a/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee @@ -670,18 +670,18 @@ describe "EditorController", -> @err = "errro" @window_id = "kdsjklj290jlk" @newName = "new name here" - @ProjectHandler::renameProject = sinon.stub().callsArgWith(3, @err) + @ProjectDetailsHandler.renameProject = sinon.stub().callsArgWith(2, @err) @EditorRealTimeController.emitToRoom = sinon.stub() it "should call the ProjectHandler", (done)-> - @EditorController.renameProject @project_id, @window_id, @newName, => - @ProjectHandler::renameProject.calledWith(@project_id, @window_id, @newName).should.equal true + @EditorController.renameProject @project_id, @newName, => + @ProjectDetailsHandler.renameProject.calledWith(@project_id, @newName).should.equal true done() it "should emit the update to the room", (done)-> - @EditorController.renameProject @project_id, @window_id, @newName, => - @EditorRealTimeController.emitToRoom.calledWith(@project_id, 'projectNameUpdated', @window_id, @newName).should.equal true + @EditorController.renameProject @project_id, @newName, => + @EditorRealTimeController.emitToRoom.calledWith(@project_id, 'projectNameUpdated', @newName).should.equal true done() diff --git a/services/web/test/UnitTests/coffee/Project/ProjectDetailsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectDetailsHandlerTests.coffee index 585e007cf6..f30e513243 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectDetailsHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectDetailsHandlerTests.coffee @@ -20,14 +20,18 @@ describe 'Project details handler', -> features: "mock-features" @ProjectGetter = getProjectWithoutDocLines: sinon.stub().callsArgWith(1, null, @project) + getProject: sinon.stub().callsArgWith(2, null, @project) @ProjectModel = update: sinon.stub() @UserGetter = getUser: sinon.stub().callsArgWith(1, null, @user) + @tpdsUpdateSender = + moveEntity:sinon.stub().callsArgWith 1 @handler = SandboxedModule.require modulePath, requires: "./ProjectGetter":@ProjectGetter '../../models/Project': Project:@ProjectModel "../User/UserGetter": @UserGetter + '../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender 'logger-sharelatex': log:-> err:-> @@ -61,4 +65,19 @@ describe 'Project details handler', -> @ProjectModel.update.calledWith({_id:@project_id}, {description:@description}).should.equal true done() + describe "renameProject", -> + beforeEach -> + @ProjectModel.update.callsArgWith(2) + @newName = "new name here" + + it "should update the project with the new name", (done)-> + newName = "new name here" + @handler.renameProject @project_id, @newName, => + @ProjectModel.update.calledWith({_id: @project_id}, {name: @newName}).should.equal true + done() + + it "should tell the tpdsUpdateSender", (done)-> + @handler.renameProject @project_id, @newName, => + @tpdsUpdateSender.moveEntity.calledWith({project_id:@project_id, project_name:@project.name, newProjectName:@newName}).should.equal true + done()