From efab68e6b285b7b95ec2e411b8f0d7d1c0a21b9a Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 29 Nov 2016 17:13:16 +0000 Subject: [PATCH] Add in guards on bad data from web API --- .../app/coffee/PersistenceManager.coffee | 4 ++++ .../PersistenceManager/getDocTests.coffee | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/services/document-updater/app/coffee/PersistenceManager.coffee b/services/document-updater/app/coffee/PersistenceManager.coffee index 27585c8290..8be268a6e8 100644 --- a/services/document-updater/app/coffee/PersistenceManager.coffee +++ b/services/document-updater/app/coffee/PersistenceManager.coffee @@ -35,6 +35,10 @@ module.exports = PersistenceManager = body = JSON.parse body catch e return callback(e) + if !body.lines? + return callback(new Error("web API response had no doc lines")) + if !body.version? or not body.version instanceof Number + return callback(new Error("web API response had no valid doc version")) return callback null, body.lines, body.version else if res.statusCode == 404 return callback(new Errors.NotFoundError("doc not not found: #{url}")) diff --git a/services/document-updater/test/unit/coffee/PersistenceManager/getDocTests.coffee b/services/document-updater/test/unit/coffee/PersistenceManager/getDocTests.coffee index 03ea59cd90..d4f44afa46 100644 --- a/services/document-updater/test/unit/coffee/PersistenceManager/getDocTests.coffee +++ b/services/document-updater/test/unit/coffee/PersistenceManager/getDocTests.coffee @@ -84,5 +84,21 @@ describe "PersistenceManager.getDoc", -> it "should time the execution", -> @Metrics.Timer::done.called.should.equal true - + + describe "when request returns an doc without lines", -> + beforeEach -> + @request.callsArgWith(1, null, {statusCode: 200}, JSON.stringify(version: @version)) + @PersistenceManager.getDoc(@project_id, @doc_id, @callback) + + it "should return and error", -> + @callback.calledWith(new Error("web API response had no doc lines")).should.equal true + + describe "when request returns an doc without a version", -> + beforeEach -> + @request.callsArgWith(1, null, {statusCode: 200}, JSON.stringify(lines: @lines)) + @PersistenceManager.getDoc(@project_id, @doc_id, @callback) + + it "should return and error", -> + @callback.calledWith(new Error("web API response had no valid doc version")).should.equal true +