Explorar o código

add locking for EditorController.renameEntity

Hayden Faulds %!s(int64=8) %!d(string=hai) anos
pai
achega
a8818a4149

+ 10 - 5
services/web/app/coffee/Features/Editor/EditorController.coffee

@@ -148,13 +148,18 @@ module.exports = EditorController =
 		newName = sanitize.escape(newName)
 		Metrics.inc "editor.rename-entity"
 		logger.log entity_id:entity_id, entity_id:entity_id, entity_id:entity_id, "reciving new name for entity for project"
-		ProjectEntityHandler.renameEntity project_id, entity_id, entityType, newName, userId, (err) ->
+		LockManager.getLock project_id, (err)->
 			if err?
-				logger.err err:err, project_id:project_id, entity_id:entity_id, entityType:entityType, newName:newName, "error renaming entity"
+				logger.err err:err, project_id:project_id, "could not get lock for rename entity"
 				return callback(err)
-			if newName.length > 0
-				EditorRealTimeController.emitToRoom project_id, 'reciveEntityRename', entity_id, newName
-				callback?()
+			ProjectEntityHandler.renameEntity project_id, entity_id, entityType, newName, userId, (err) ->
+				if err?
+					logger.err err:err, project_id:project_id, entity_id:entity_id, entityType:entityType, newName:newName, "error renaming entity"
+					return callback(err)
+				LockManager.releaseLock project_id, ->
+					if newName.length > 0
+						EditorRealTimeController.emitToRoom project_id, 'reciveEntityRename', entity_id, newName
+					callback?()
 
 	moveEntity: (project_id, entity_id, folder_id, entityType, userId, callback)->
 		Metrics.inc "editor.move-entity"

+ 23 - 9
services/web/test/unit/coffee/Editor/EditorControllerTests.coffee

@@ -466,23 +466,37 @@ describe "EditorController", ->
 
 
 	describe "renameEntity", ->
-		beforeEach ->
+		beforeEach (done) ->
 			@entity_id = "entity_id_here"
 			@entityType = "doc"
 			@newName = "bobsfile.tex"
 			@ProjectEntityHandler.renameEntity = sinon.stub().callsArg(5)
 			@EditorRealTimeController.emitToRoom = sinon.stub()
 
-		it "should call the project handler", (done)->
-			@EditorController.renameEntity @project_id, @entity_id, @entityType, @newName, @user_id, =>
-				@ProjectEntityHandler.renameEntity.calledWith(@project_id, @entity_id, @entityType, @newName, @user_id).should.equal true
-				done()
+			@LockManager.releaseLock.callsArgWith(1)
+			@LockManager.getLock.callsArgWith(1)
 
+			@EditorController.renameEntity @project_id, @entity_id, @entityType, @newName, @user_id, done
 
-		it "should emit the update to the room", (done)->
-			@EditorController.renameEntity @project_id, @entity_id, @entityType, @newName, @user_id, =>
-				@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'reciveEntityRename', @entity_id, @newName).should.equal true				
-				done()
+		it "should call the project handler", ->
+			@ProjectEntityHandler.renameEntity
+				.calledWith(@project_id, @entity_id, @entityType, @newName, @user_id)
+				.should.equal true
+
+		it "should take the lock", ->
+			@LockManager.getLock
+				.calledWith(@project_id)
+				.should.equal true
+
+		it "should release the lock", ->
+			@LockManager.releaseLock
+				.calledWith(@project_id)
+				.should.equal true
+
+		it "should emit the update to the room", ->
+			@EditorRealTimeController.emitToRoom
+				.calledWith(@project_id, 'reciveEntityRename', @entity_id, @newName)
+				.should.equal true
 
 	describe "moveEntity", ->
 		beforeEach ->