From dd582d1b2ef764f39bb2afb3881200496ab69c59 Mon Sep 17 00:00:00 2001 From: Hayden Faulds Date: Thu, 15 Feb 2018 15:20:14 +0000 Subject: [PATCH] type-check ProjectGetter.getProject and getProjectWithoutLock arguments --- .../ProjectEntityMongoUpdateHandler.coffee | 2 +- .../Features/Project/ProjectGetter.coffee | 24 +++++++++++++++---- .../coffee/ProjectStructureTests.coffee | 8 +++---- .../acceptance/coffee/TpdsUpdateTests.coffee | 4 ++-- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectEntityMongoUpdateHandler.coffee b/services/web/app/coffee/Features/Project/ProjectEntityMongoUpdateHandler.coffee index d1e75de5de..3f9f661ece 100644 --- a/services/web/app/coffee/Features/Project/ProjectEntityMongoUpdateHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectEntityMongoUpdateHandler.coffee @@ -37,7 +37,7 @@ module.exports = ProjectEntityMongoUpdateHandler = self = self._putElement project, folder_id, doc, "doc", callback 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? logger.err project_id:project_id, err:err, "error getting project for add file" return callback(err) diff --git a/services/web/app/coffee/Features/Project/ProjectGetter.coffee b/services/web/app/coffee/Features/Project/ProjectGetter.coffee index edbd7ab844..685ac43e09 100644 --- a/services/web/app/coffee/Features/Project/ProjectGetter.coffee +++ b/services/web/app/coffee/Features/Project/ProjectGetter.coffee @@ -23,11 +23,18 @@ module.exports = ProjectGetter = excludes["rootFolder#{Array(i).join(".folders")}.fileRefs"] = 0 ProjectGetter.getProject project_id, excludes, callback - getProject: (project_id, projection, callback = (error, project) ->) -> + getProject: (project_id, projection, callback) -> 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' lockKey = ProjectEntityMongoUpdateHandler.getProjectMongoLockKey project_id LockManager.runWithLock lockKey, @@ -36,9 +43,16 @@ module.exports = ProjectGetter = else 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 + projection = {} + + if typeof(projection) != "object" + return callback(new Error("projection is not an object")) if typeof project_id == "string" query = _id: ObjectId(project_id) diff --git a/services/web/test/acceptance/coffee/ProjectStructureTests.coffee b/services/web/test/acceptance/coffee/ProjectStructureTests.coffee index 6a303f3fc7..7e9801176b 100644 --- a/services/web/test/acceptance/coffee/ProjectStructureTests.coffee +++ b/services/web/test/acceptance/coffee/ProjectStructureTests.coffee @@ -80,13 +80,13 @@ describe "ProjectStructureChanges", -> before (done) -> MockDocUpdaterApi.clearProjectStructureUpdates() - ProjectGetter.getProject @example_project_id, (error, projects) => + ProjectGetter.getProject @example_project_id, (error, project) => throw error if error? @owner.request.post { uri: "project/#{@example_project_id}/doc", json: name: 'new.tex' - parent_folder_id: projects[0].rootFolder[0]._id + parent_folder_id: project.rootFolder[0]._id }, (error, res, body) => throw error if error? if res.statusCode < 200 || res.statusCode >= 300 @@ -137,9 +137,9 @@ describe "ProjectStructureChanges", -> describe "uploading a file", -> before (done) -> - ProjectGetter.getProject @example_project_id, (error, projects) => + ProjectGetter.getProject @example_project_id, (error, project) => throw error if error? - @root_folder_id = projects[0].rootFolder[0]._id.toString() + @root_folder_id = project.rootFolder[0]._id.toString() done() beforeEach () -> diff --git a/services/web/test/acceptance/coffee/TpdsUpdateTests.coffee b/services/web/test/acceptance/coffee/TpdsUpdateTests.coffee index 201d2fc3f5..3f300a55c3 100644 --- a/services/web/test/acceptance/coffee/TpdsUpdateTests.coffee +++ b/services/web/test/acceptance/coffee/TpdsUpdateTests.coffee @@ -28,10 +28,10 @@ describe "TpdsUpdateTests", -> done() it "should have deleted the file", (done) -> - ProjectGetter.getProject @project_id, (error, [project]) -> + ProjectGetter.getProject @project_id, (error, project) -> throw error if error? projectFolder = project.rootFolder[0] for doc in projectFolder.docs if doc.name == "main.tex" throw new Error("expected main.tex to have been deleted") - done() \ No newline at end of file + done()