Просмотр исходного кода

type-check ProjectGetter.getProject and getProjectWithoutLock arguments

Hayden Faulds 8 лет назад
Родитель
Сommit
dd582d1b2e

+ 1 - 1
services/web/app/coffee/Features/Project/ProjectEntityMongoUpdateHandler.coffee

@@ -37,7 +37,7 @@ module.exports = ProjectEntityMongoUpdateHandler = self =
 				self._putElement project, folder_id, doc, "doc", callback
 				self._putElement project, folder_id, doc, "doc", callback
 
 
 	addFile: wrapWithLock (project_id, folder_id, fileRef, callback = (error, result, project) ->)->
 	addFile: wrapWithLock (project_id, folder_id, fileRef, callback = (error, result, project) ->)->
-		ProjectGetter.getProjectWithoutLock  project_id, {rootFolder:true, name:true}, (err, project) ->
+		ProjectGetter.getProjectWithoutLock project_id, {rootFolder:true, name:true}, (err, project) ->
 			if err?
 			if err?
 				logger.err project_id:project_id, err:err, "error getting project for add file"
 				logger.err project_id:project_id, err:err, "error getting project for add file"
 				return callback(err)
 				return callback(err)

+ 19 - 5
services/web/app/coffee/Features/Project/ProjectGetter.coffee

@@ -23,11 +23,18 @@ module.exports = ProjectGetter =
 			excludes["rootFolder#{Array(i).join(".folders")}.fileRefs"] = 0
 			excludes["rootFolder#{Array(i).join(".folders")}.fileRefs"] = 0
 		ProjectGetter.getProject project_id, excludes, callback
 		ProjectGetter.getProject project_id, excludes, callback
 
 
-	getProject: (project_id, projection, callback = (error, project) ->) ->
+	getProject: (project_id, projection, callback) ->
 		if !project_id?
 		if !project_id?
-			return callback("no project_id provided")
+			return callback(new Error("no project_id provided"))
 
 
-		if projection?.rootFolder
+		if typeof(projection) == "function" && !callback?
+			callback = projection
+			projection = {}
+
+		if typeof(projection) != "object"
+			return callback(new Error("projection is not an object"))
+
+		if projection?.rootFolder || Object.keys(projection).length == 0
 			ProjectEntityMongoUpdateHandler = require './ProjectEntityMongoUpdateHandler'
 			ProjectEntityMongoUpdateHandler = require './ProjectEntityMongoUpdateHandler'
 			lockKey = ProjectEntityMongoUpdateHandler.getProjectMongoLockKey project_id
 			lockKey = ProjectEntityMongoUpdateHandler.getProjectMongoLockKey project_id
 			LockManager.runWithLock lockKey,
 			LockManager.runWithLock lockKey,
@@ -36,9 +43,16 @@ module.exports = ProjectGetter =
 		else
 		else
 			ProjectGetter.getProjectWithoutLock project_id, projection, callback
 			ProjectGetter.getProjectWithoutLock project_id, projection, callback
 
 
-	getProjectWithoutLock: (project_id, projection, callback = (error, project) ->) ->
-		if typeof(projection) == "function"
+	getProjectWithoutLock: (project_id, projection, callback) ->
+		if !project_id?
+			return callback(new Error("no project_id provided"))
+
+		if typeof(projection) == "function" && !callback?
 			callback = projection
 			callback = projection
+			projection = {}
+
+		if typeof(projection) != "object"
+			return callback(new Error("projection is not an object"))
 
 
 		if typeof project_id == "string"
 		if typeof project_id == "string"
 			query = _id: ObjectId(project_id)
 			query = _id: ObjectId(project_id)

+ 4 - 4
services/web/test/acceptance/coffee/ProjectStructureTests.coffee

@@ -80,13 +80,13 @@ describe "ProjectStructureChanges", ->
 		before (done) ->
 		before (done) ->
 			MockDocUpdaterApi.clearProjectStructureUpdates()
 			MockDocUpdaterApi.clearProjectStructureUpdates()
 
 
-			ProjectGetter.getProject @example_project_id, (error, projects) =>
+			ProjectGetter.getProject @example_project_id, (error, project) =>
 				throw error if error?
 				throw error if error?
 				@owner.request.post {
 				@owner.request.post {
 					uri: "project/#{@example_project_id}/doc",
 					uri: "project/#{@example_project_id}/doc",
 					json:
 					json:
 						name: 'new.tex'
 						name: 'new.tex'
-						parent_folder_id: projects[0].rootFolder[0]._id
+						parent_folder_id: project.rootFolder[0]._id
 				}, (error, res, body) =>
 				}, (error, res, body) =>
 					throw error if error?
 					throw error if error?
 					if res.statusCode < 200 || res.statusCode >= 300
 					if res.statusCode < 200 || res.statusCode >= 300
@@ -137,9 +137,9 @@ describe "ProjectStructureChanges", ->
 
 
 	describe "uploading a file", ->
 	describe "uploading a file", ->
 		before (done) ->
 		before (done) ->
-			ProjectGetter.getProject @example_project_id, (error, projects) =>
+			ProjectGetter.getProject @example_project_id, (error, project) =>
 				throw error if error?
 				throw error if error?
-				@root_folder_id = projects[0].rootFolder[0]._id.toString()
+				@root_folder_id = project.rootFolder[0]._id.toString()
 				done()
 				done()
 
 
 		beforeEach () ->
 		beforeEach () ->

+ 2 - 2
services/web/test/acceptance/coffee/TpdsUpdateTests.coffee

@@ -28,10 +28,10 @@ describe "TpdsUpdateTests", ->
 				done()
 				done()
 
 
 		it "should have deleted the file", (done) ->
 		it "should have deleted the file", (done) ->
-			ProjectGetter.getProject @project_id, (error, [project]) ->
+			ProjectGetter.getProject @project_id, (error, project) ->
 				throw error if error?
 				throw error if error?
 				projectFolder = project.rootFolder[0]
 				projectFolder = project.rootFolder[0]
 				for doc in projectFolder.docs
 				for doc in projectFolder.docs
 					if doc.name == "main.tex"
 					if doc.name == "main.tex"
 						throw new Error("expected main.tex to have been deleted")
 						throw new Error("expected main.tex to have been deleted")
-				done()
+				done()