Przeglądaj źródła

pass object to DocumentUpdater.updateProjectStructure instead of separate arrays

Hayden Faulds 8 lat temu
rodzic
commit
4094801f18

+ 5 - 3
services/web/app/coffee/Features/DocumentUpdater/DocumentUpdaterHandler.coffee

@@ -204,11 +204,11 @@ module.exports = DocumentUpdaterHandler =
 				logger.error {project_id, doc_id, thread_id}, "doc updater returned a non-success status code: #{res.statusCode}"
 				logger.error {project_id, doc_id, thread_id}, "doc updater returned a non-success status code: #{res.statusCode}"
 				callback new Error("doc updater returned a non-success status code: #{res.statusCode}")
 				callback new Error("doc updater returned a non-success status code: #{res.statusCode}")
 
 
-	updateProjectStructure : (project_id, userId, oldDocs, newDocs, oldFiles, newFiles, callback = (error) ->)->
+	updateProjectStructure : (project_id, userId, changes, callback = (error) ->)->
 		return callback() if !settings.apis.project_history?.enabled
 		return callback() if !settings.apis.project_history?.enabled
 
 
-		docUpdates = DocumentUpdaterHandler._getRenameUpdates('doc', oldDocs, newDocs)
-		fileUpdates = DocumentUpdaterHandler._getRenameUpdates('file', oldFiles, newFiles)
+		docUpdates = DocumentUpdaterHandler._getRenameUpdates('doc', changes.oldDocs, changes.newDocs)
+		fileUpdates = DocumentUpdaterHandler._getRenameUpdates('file', changes.oldFiles, changes.newFiles)
 
 
 		timer = new metrics.Timer("set-document")
 		timer = new metrics.Timer("set-document")
 		url = "#{settings.apis.documentupdater.url}/project/#{project_id}"
 		url = "#{settings.apis.documentupdater.url}/project/#{project_id}"
@@ -231,6 +231,8 @@ module.exports = DocumentUpdaterHandler =
 				callback new Error("doc updater returned a non-success status code: #{res.statusCode}")
 				callback new Error("doc updater returned a non-success status code: #{res.statusCode}")
 
 
 	_getRenameUpdates: (entityType, oldEntities, newEntities) ->
 	_getRenameUpdates: (entityType, oldEntities, newEntities) ->
+		oldEntities ||= []
+		newEntities ||= []
 		updates = []
 		updates = []
 
 
 		oldEntitiesHash = _.indexBy oldEntities, (entity) -> entity[entityType]._id.toString()
 		oldEntitiesHash = _.indexBy oldEntities, (entity) -> entity[entityType]._id.toString()

+ 14 - 10
services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee

@@ -176,11 +176,12 @@ module.exports = ProjectEntityHandler =
 						rev:          0
 						rev:          0
 					}, (err) ->
 					}, (err) ->
 						return callback(err) if err?
 						return callback(err) if err?
-						newDoc =
+						newDocs = [
 							doc: doc
 							doc: doc
 							path: result?.path?.fileSystem
 							path: result?.path?.fileSystem
 							docLines: docLines.join('\n')
 							docLines: docLines.join('\n')
-						DocumentUpdaterHandler.updateProjectStructure project_id, userId, [], [newDoc], [], [], (error) ->
+						]
+						DocumentUpdaterHandler.updateProjectStructure project_id, userId, {newDocs}, (error) ->
 							return callback(error) if error?
 							return callback(error) if error?
 							callback null, doc, folder_id
 							callback null, doc, folder_id
 
 
@@ -214,11 +215,12 @@ module.exports = ProjectEntityHandler =
 						return callback(err)
 						return callback(err)
 					tpdsUpdateSender.addFile {project_id:project._id, file_id:fileRef._id, path:result?.path?.fileSystem, project_name:project.name, rev:fileRef.rev}, (err) ->
 					tpdsUpdateSender.addFile {project_id:project._id, file_id:fileRef._id, path:result?.path?.fileSystem, project_name:project.name, rev:fileRef.rev}, (err) ->
 						return callback(err) if err?
 						return callback(err) if err?
-						newFile =
+						newFiles = [
 							file: fileRef
 							file: fileRef
 							path: result?.path?.fileSystem
 							path: result?.path?.fileSystem
 							url: fileStoreUrl
 							url: fileStoreUrl
-						DocumentUpdaterHandler.updateProjectStructure project_id, userId, [], [], [], [newFile], (error) ->
+						]
+						DocumentUpdaterHandler.updateProjectStructure project_id, userId, {newFiles}, (error) ->
 							return callback(error) if error?
 							return callback(error) if error?
 							callback null, fileRef, folder_id
 							callback null, fileRef, folder_id
 
 
@@ -247,11 +249,12 @@ module.exports = ProjectEntityHandler =
 							"$set": set
 							"$set": set
 						Project.findOneAndUpdate conditions, update, { "new": true}, (err) ->
 						Project.findOneAndUpdate conditions, update, { "new": true}, (err) ->
 							return callback(err) if err?
 							return callback(err) if err?
-							newFile =
+							newFiles = [
 								file: fileRef
 								file: fileRef
 								path: path.fileSystem
 								path: path.fileSystem
 								url: fileStoreUrl
 								url: fileStoreUrl
-							DocumentUpdaterHandler.updateProjectStructure project_id, userId, [], [], [], [newFile], callback
+							]
+							DocumentUpdaterHandler.updateProjectStructure project_id, userId, {newFiles}, callback
 
 
 	copyFileFromExistingProjectWithProject: (project, folder_id, originalProject_id, origonalFileRef, userId, callback = (error, fileRef, folder_id) ->)->
 	copyFileFromExistingProjectWithProject: (project, folder_id, originalProject_id, origonalFileRef, userId, callback = (error, fileRef, folder_id) ->)->
 		project_id = project._id
 		project_id = project._id
@@ -273,11 +276,12 @@ module.exports = ProjectEntityHandler =
 					tpdsUpdateSender.addFile { project_id, file_id:fileRef._id, path:result?.path?.fileSystem, rev:fileRef.rev, project_name:project.name}, (err) ->
 					tpdsUpdateSender.addFile { project_id, file_id:fileRef._id, path:result?.path?.fileSystem, rev:fileRef.rev, project_name:project.name}, (err) ->
 						if err?
 						if err?
 							logger.err { err, project_id, folder_id, originalProject_id, origonalFileRef }, "error sending file to tpds worker"
 							logger.err { err, project_id, folder_id, originalProject_id, origonalFileRef }, "error sending file to tpds worker"
-						newFile =
+						newFiles = [
 							file: fileRef
 							file: fileRef
 							path: result?.path?.fileSystem
 							path: result?.path?.fileSystem
 							url: fileStoreUrl
 							url: fileStoreUrl
-						DocumentUpdaterHandler.updateProjectStructure project_id, userId, [], [], [], [newFile], (error) ->
+						]
+						DocumentUpdaterHandler.updateProjectStructure project_id, userId, {newFiles}, (error) ->
 							return callback(error) if error?
 							return callback(error) if error?
 							callback null, fileRef, folder_id
 							callback null, fileRef, folder_id
 
 
@@ -393,7 +397,7 @@ module.exports = ProjectEntityHandler =
 								tpdsUpdateSender.moveEntity opts
 								tpdsUpdateSender.moveEntity opts
 								self.getAllEntitiesFromProject newProject, (error, newDocs, newFiles) =>
 								self.getAllEntitiesFromProject newProject, (error, newDocs, newFiles) =>
 									return callback(error) if error?
 									return callback(error) if error?
-									DocumentUpdaterHandler.updateProjectStructure project_id, userId, oldDocs, newDocs, oldFiles, newFiles, callback
+									DocumentUpdaterHandler.updateProjectStructure project_id, userId, {oldDocs, newDocs, oldFiles, newFiles}, callback
 
 
 	_checkValidMove: (project, entityType, entityPath, destFolderId, callback = (error) ->) ->
 	_checkValidMove: (project, entityType, entityPath, destFolderId, callback = (error) ->) ->
 		return callback() if !entityType.match(/folder/)
 		return callback() if !entityType.match(/folder/)
@@ -450,7 +454,7 @@ module.exports = ProjectEntityHandler =
 						return callback(error) if error?
 						return callback(error) if error?
 						ProjectEntityHandler.getAllEntitiesFromProject newProject, (error, newDocs, newFiles) =>
 						ProjectEntityHandler.getAllEntitiesFromProject newProject, (error, newDocs, newFiles) =>
 							return callback(error) if error?
 							return callback(error) if error?
-							DocumentUpdaterHandler.updateProjectStructure project_id, userId, oldDocs, newDocs, oldFiles, newFiles, callback
+							DocumentUpdaterHandler.updateProjectStructure project_id, userId, {oldDocs, newDocs, oldFiles, newFiles}, callback
 
 
 	_cleanUpEntity: (project, entity, entityType, callback = (error) ->) ->
 	_cleanUpEntity: (project, entity, entityType, callback = (error) ->) ->
 		if(entityType.indexOf("file") != -1)
 		if(entityType.indexOf("file") != -1)

+ 19 - 28
services/web/test/unit/coffee/DocumentUpdater/DocumentUpdaterHandlerTests.coffee

@@ -396,7 +396,7 @@ describe 'DocumentUpdaterHandler', ->
 				@settings.apis.project_history.enabled = false
 				@settings.apis.project_history.enabled = false
 				@request.post = sinon.stub()
 				@request.post = sinon.stub()
 
 
-				@handler.updateProjectStructure @project_id, @user_id, @oldDocs, @newDocs, @oldFiles, @newFiles, @callback
+				@handler.updateProjectStructure @project_id, @user_id, {}, @callback
 
 
 			it 'does not make a web request', ->
 			it 'does not make a web request', ->
 				@request.post.called.should.equal false
 				@request.post.called.should.equal false
@@ -414,17 +414,17 @@ describe 'DocumentUpdaterHandler', ->
 				it 'should send the structure update to the document updater', (done) ->
 				it 'should send the structure update to the document updater', (done) ->
 					@docIdA = new ObjectId()
 					@docIdA = new ObjectId()
 					@docIdB = new ObjectId()
 					@docIdB = new ObjectId()
-					@oldDocs = [
-						{ path: '/old_a', doc: _id: @docIdA }
-						{ path: '/old_b', doc: _id: @docIdB }
-					]
-					# create new instances of the same ObjectIds so that == doens't pass
-					@newDocs = [
-						{ path: '/old_a', doc: _id: new ObjectId(@docIdA.toString()) }
-						{ path: '/new_b', doc: _id: new ObjectId(@docIdB.toString()) }
-					]
-					@oldFiles = []
-					@newFiles = []
+					@changes = {
+						oldDocs: [
+							{ path: '/old_a', doc: _id: @docIdA }
+							{ path: '/old_b', doc: _id: @docIdB }
+						]
+						# create new instances of the same ObjectIds so that == doesn't pass
+						newDocs: [
+							{ path: '/old_a', doc: _id: new ObjectId(@docIdA.toString()) }
+							{ path: '/new_b', doc: _id: new ObjectId(@docIdB.toString()) }
+						]
+					}
 
 
 					docUpdates = [
 					docUpdates = [
 						id: @docIdB.toString(),
 						id: @docIdB.toString(),
@@ -432,7 +432,7 @@ describe 'DocumentUpdaterHandler', ->
 						newPathname: "/new_b"
 						newPathname: "/new_b"
 					]
 					]
 
 
-					@handler.updateProjectStructure @project_id, @user_id, @oldDocs, @newDocs, @oldFiles, @newFiles, () =>
+					@handler.updateProjectStructure @project_id, @user_id, @changes, () =>
 						@request.post
 						@request.post
 							.calledWith(url: @url, json: {docUpdates, fileUpdates: [], userId: @user_id})
 							.calledWith(url: @url, json: {docUpdates, fileUpdates: [], userId: @user_id})
 							.should.equal true
 							.should.equal true
@@ -441,12 +441,9 @@ describe 'DocumentUpdaterHandler', ->
 			describe "when a doc has been added", ->
 			describe "when a doc has been added", ->
 				it 'should send the structure update to the document updater', (done) ->
 				it 'should send the structure update to the document updater', (done) ->
 					@docId = new ObjectId()
 					@docId = new ObjectId()
-					@oldDocs = []
-					@newDocs = [
+					@changes = newDocs: [
 						{ path: '/foo', docLines: 'a\nb', doc: _id: @docId }
 						{ path: '/foo', docLines: 'a\nb', doc: _id: @docId }
 					]
 					]
-					@oldFiles = []
-					@newFiles = []
 
 
 					docUpdates = [
 					docUpdates = [
 						id: @docId.toString(),
 						id: @docId.toString(),
@@ -455,7 +452,7 @@ describe 'DocumentUpdaterHandler', ->
 						url: undefined
 						url: undefined
 					]
 					]
 
 
-					@handler.updateProjectStructure @project_id, @user_id, @oldDocs, @newDocs, @oldFiles, @newFiles, () =>
+					@handler.updateProjectStructure @project_id, @user_id, @changes, () =>
 						@request.post
 						@request.post
 							.calledWith(url: @url, json: {docUpdates, fileUpdates: [], userId: @user_id})
 							.calledWith(url: @url, json: {docUpdates, fileUpdates: [], userId: @user_id})
 							.should.equal true
 							.should.equal true
@@ -464,10 +461,7 @@ describe 'DocumentUpdaterHandler', ->
 			describe "when a file has been added", ->
 			describe "when a file has been added", ->
 				it 'should send the structure update to the document updater', (done) ->
 				it 'should send the structure update to the document updater', (done) ->
 					@fileId = new ObjectId()
 					@fileId = new ObjectId()
-					@oldDocs = []
-					@newDocs = []
-					@oldFiles = []
-					@newFiles = [
+					@changes = newFiles: [
 						{ path: '/bar', url: 'filestore.example.com/file', file: _id: @fileId }
 						{ path: '/bar', url: 'filestore.example.com/file', file: _id: @fileId }
 					]
 					]
 
 
@@ -478,7 +472,7 @@ describe 'DocumentUpdaterHandler', ->
 						docLines: undefined
 						docLines: undefined
 					]
 					]
 
 
-					@handler.updateProjectStructure @project_id, @user_id, @oldDocs, @newDocs, @oldFiles, @newFiles, () =>
+					@handler.updateProjectStructure @project_id, @user_id, @changes, () =>
 						@request.post
 						@request.post
 							.calledWith(url: @url, json: {docUpdates: [], fileUpdates, userId: @user_id})
 							.calledWith(url: @url, json: {docUpdates: [], fileUpdates, userId: @user_id})
 							.should.equal true
 							.should.equal true
@@ -487,14 +481,11 @@ describe 'DocumentUpdaterHandler', ->
 			describe "when a doc has been deleted", ->
 			describe "when a doc has been deleted", ->
 				it 'should do nothing', (done) ->
 				it 'should do nothing', (done) ->
 					@docId = new ObjectId()
 					@docId = new ObjectId()
-					@oldDocs = [
+					@changes = oldDocs: [
 						{ path: '/foo', docLines: 'a\nb', doc: _id: @docId }
 						{ path: '/foo', docLines: 'a\nb', doc: _id: @docId }
 					]
 					]
-					@newDocs = []
-					@oldFiles = []
-					@newFiles = []
 
 
-					@handler.updateProjectStructure @project_id, @user_id, @oldDocs, @newDocs, @oldFiles, @newFiles, () =>
+					@handler.updateProjectStructure @project_id, @user_id, @changes, () =>
 						@request.post.called.should.equal false
 						@request.post.called.should.equal false
 						done()
 						done()
 
 

+ 14 - 10
services/web/test/unit/coffee/Project/ProjectEntityHandlerTests.coffee

@@ -69,7 +69,7 @@ describe 'ProjectEntityHandler', ->
 		@settings =
 		@settings =
 			maxEntitiesPerProject:200
 			maxEntitiesPerProject:200
 		@documentUpdaterHandler =
 		@documentUpdaterHandler =
-			updateProjectStructure: sinon.stub().callsArg(6)
+			updateProjectStructure: sinon.stub().yields()
 			deleteDoc: sinon.stub().callsArg(2)
 			deleteDoc: sinon.stub().callsArg(2)
 		@ProjectEntityHandler = SandboxedModule.require modulePath, requires:
 		@ProjectEntityHandler = SandboxedModule.require modulePath, requires:
 			'../../models/Project': Project:@ProjectModel
 			'../../models/Project': Project:@ProjectModel
@@ -274,7 +274,7 @@ describe 'ProjectEntityHandler', ->
 
 
 			it "should should send the update to the doc updater", ->
 			it "should should send the update to the doc updater", ->
 				@documentUpdaterHandler.updateProjectStructure
 				@documentUpdaterHandler.updateProjectStructure
-					.calledWith(project_id, userId, @oldDocs, @newDocs, @oldFiles, @newFiles)
+					.calledWith(project_id, userId, {@oldDocs, @newDocs, @oldFiles, @newFiles})
 					.should.equal true
 					.should.equal true
 
 
 			it 'should remove the element from its current position', ->
 			it 'should remove the element from its current position', ->
@@ -326,7 +326,7 @@ describe 'ProjectEntityHandler', ->
 
 
 				it "should should send the update to the doc updater", ->
 				it "should should send the update to the doc updater", ->
 					@documentUpdaterHandler.updateProjectStructure
 					@documentUpdaterHandler.updateProjectStructure
-						.calledWith(project_id, userId, @oldDocs, @newDocs, @oldFiles, @newFiles)
+						.calledWith(project_id, userId, {@oldDocs, @newDocs, @oldFiles, @newFiles})
 						.should.equal true
 						.should.equal true
 
 
 				it 'should remove the element from its current position', ->
 				it 'should remove the element from its current position', ->
@@ -487,12 +487,13 @@ describe 'ProjectEntityHandler', ->
 				.should.equal true
 				.should.equal true
 
 
 		it "should should send the change in project structure to the doc updater", () ->
 		it "should should send the change in project structure to the doc updater", () ->
-			newDoc =
+			newDocs = [
 				doc: @doc
 				doc: @doc
 				path: @path
 				path: @path
 				docLines: @lines.join('\n')
 				docLines: @lines.join('\n')
+			]
 			@documentUpdaterHandler.updateProjectStructure
 			@documentUpdaterHandler.updateProjectStructure
-				.calledWith(project_id, userId, [], [newDoc], [], [])
+				.calledWith(project_id, userId, {newDocs})
 				.should.equal true
 				.should.equal true
 
 
 	describe "restoreDoc", ->
 	describe "restoreDoc", ->
@@ -570,9 +571,10 @@ describe 'ProjectEntityHandler', ->
 			@ProjectEntityHandler.addFile project_id, folder_id, fileName, {}, userId, (err, fileRef, parentFolder)->
 			@ProjectEntityHandler.addFile project_id, folder_id, fileName, {}, userId, (err, fileRef, parentFolder)->
 
 
 		it "should should send the change in project structure to the doc updater", (done) ->
 		it "should should send the change in project structure to the doc updater", (done) ->
-			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, oldDocs, newDocs, oldFiles, newFiles) =>
+			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, changes) =>
 				passed_project_id.should.equal project_id
 				passed_project_id.should.equal project_id
 				passed_user_id.should.equal userId
 				passed_user_id.should.equal userId
+				{ newFiles } = changes
 				newFiles.length.should.equal 1
 				newFiles.length.should.equal 1
 				newFile = newFiles[0]
 				newFile = newFiles[0]
 				newFile.file.name.should.equal fileName
 				newFile.file.name.should.equal fileName
@@ -635,9 +637,10 @@ describe 'ProjectEntityHandler', ->
 			@ProjectEntityHandler.replaceFile project_id, @file_id, @fsPath, userId, =>
 			@ProjectEntityHandler.replaceFile project_id, @file_id, @fsPath, userId, =>
 
 
 		it "should should send the old and new project structure to the doc updater", (done) ->
 		it "should should send the old and new project structure to the doc updater", (done) ->
-			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, oldDocs, newDocs, oldFiles, newFiles) =>
+			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, changes) =>
 				passed_project_id.should.equal project_id
 				passed_project_id.should.equal project_id
 				passed_user_id.should.equal userId
 				passed_user_id.should.equal userId
+				{ newFiles } = changes
 				newFiles.length.should.equal 1
 				newFiles.length.should.equal 1
 				newFile = newFiles[0]
 				newFile = newFiles[0]
 				newFile.file.name.should.equal @fileName
 				newFile.file.name.should.equal @fileName
@@ -1029,9 +1032,10 @@ describe 'ProjectEntityHandler', ->
 			@ProjectEntityHandler.copyFileFromExistingProjectWithProject @project, folder_id, oldProject_id, oldFileRef, userId, (err, fileRef, parentFolder)->
 			@ProjectEntityHandler.copyFileFromExistingProjectWithProject @project, folder_id, oldProject_id, oldFileRef, userId, (err, fileRef, parentFolder)->
 
 
 		it "should should send the change in project structure to the doc updater", (done) ->
 		it "should should send the change in project structure to the doc updater", (done) ->
-			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, oldDocs, newDocs, oldFiles, newFiles) =>
+			@documentUpdaterHandler.updateProjectStructure = (passed_project_id, passed_user_id, changes) =>
 				passed_project_id.should.equal project_id
 				passed_project_id.should.equal project_id
 				passed_user_id.should.equal userId
 				passed_user_id.should.equal userId
+				{ newFiles } = changes
 				newFiles.length.should.equal 1
 				newFiles.length.should.equal 1
 				newFile = newFiles[0]
 				newFile = newFiles[0]
 				newFile.file.name.should.equal fileName
 				newFile.file.name.should.equal fileName
@@ -1060,12 +1064,12 @@ describe 'ProjectEntityHandler', ->
 			@projectLocator.findElement = sinon.stub().callsArgWith(1, null, @entity = { _id: @entity_id, name:"old.tex", rev:4 }, @path)
 			@projectLocator.findElement = sinon.stub().callsArgWith(1, null, @entity = { _id: @entity_id, name:"old.tex", rev:4 }, @path)
 			@tpdsUpdateSender.moveEntity = sinon.stub()
 			@tpdsUpdateSender.moveEntity = sinon.stub()
 			@ProjectModel.findOneAndUpdate = sinon.stub().callsArgWith(3, null, @project)
 			@ProjectModel.findOneAndUpdate = sinon.stub().callsArgWith(3, null, @project)
-			@documentUpdaterHandler.updateProjectStructure = sinon.stub().callsArg(6)
+			@documentUpdaterHandler.updateProjectStructure = sinon.stub().yields()
 
 
 		it "should should send the old and new project structure to the doc updater", (done) ->
 		it "should should send the old and new project structure to the doc updater", (done) ->
 			@ProjectEntityHandler.renameEntity project_id, @entity_id, @entityType, @newName, userId, =>
 			@ProjectEntityHandler.renameEntity project_id, @entity_id, @entityType, @newName, userId, =>
 				@documentUpdaterHandler.updateProjectStructure
 				@documentUpdaterHandler.updateProjectStructure
-					.calledWith(project_id, userId, @oldDocs, @newDocs, @oldFiles, @newFiles)
+					.calledWith(project_id, userId, {@oldDocs, @newDocs, @oldFiles, @newFiles})
 					.should.equal true
 					.should.equal true
 				done()
 				done()