From 69339aeb9daa2b815e23ed9c1053e630d4f8e82a Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 2 Aug 2021 10:25:03 +0100 Subject: [PATCH] return the origin of peeked docs --- services/docstore/app/js/HttpController.js | 1 + .../js/GettingDocsFromArchiveTest.js | 57 ++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/services/docstore/app/js/HttpController.js b/services/docstore/app/js/HttpController.js index 909836066b..7e901c4357 100644 --- a/services/docstore/app/js/HttpController.js +++ b/services/docstore/app/js/HttpController.js @@ -55,6 +55,7 @@ module.exports = HttpController = { if (doc == null) { return res.sendStatus(404) } else { + res.setHeader('x-doc-status', doc.inS3 ? 'archived' : 'active') return res.json(HttpController._buildDocView(doc)) } }) diff --git a/services/docstore/test/acceptance/js/GettingDocsFromArchiveTest.js b/services/docstore/test/acceptance/js/GettingDocsFromArchiveTest.js index 714721e079..2bf2605bec 100644 --- a/services/docstore/test/acceptance/js/GettingDocsFromArchiveTest.js +++ b/services/docstore/test/acceptance/js/GettingDocsFromArchiveTest.js @@ -41,7 +41,7 @@ describe('Getting A Doc from Archive', function () { await storage.createBucket(`${Settings.docstore.bucket}-deleted`) }) - describe('archiving a single doc', function () { + describe('for an archived doc', function () { before(function (done) { this.project_id = ObjectId() this.timeout(1000 * 30) @@ -81,13 +81,66 @@ describe('Getting A Doc from Archive', function () { done() }) - it('should get the doc lines and version', function (done) { + it('should return the doc lines and version from persistent storage', function (done) { return DocstoreClient.peekDoc( this.project_id, this.doc._id, {}, (error, res, doc) => { res.statusCode.should.equal(200) + res.headers['x-doc-status'].should.equal('archived') + doc.lines.should.deep.equal(this.doc.lines) + doc.version.should.equal(this.doc.version) + doc.ranges.should.deep.equal(this.doc.ranges) + return done() + } + ) + }) + + it('should return the doc lines and version from persistent storage on subsequent requests', function (done) { + return DocstoreClient.peekDoc( + this.project_id, + this.doc._id, + {}, + (error, res, doc) => { + res.statusCode.should.equal(200) + res.headers['x-doc-status'].should.equal('archived') + doc.lines.should.deep.equal(this.doc.lines) + doc.version.should.equal(this.doc.version) + doc.ranges.should.deep.equal(this.doc.ranges) + return done() + } + ) + }) + + describe('for an non-archived doc', function () { + before(function (done) { + this.project_id = ObjectId() + this.timeout(1000 * 30) + this.doc = { + _id: ObjectId(), + lines: ['foo', 'bar'], + ranges: {}, + version: 2, + } + DocstoreClient.createDoc( + this.project_id, + this.doc._id, + this.doc.lines, + this.doc.version, + this.doc.ranges, + done + ) + }) + + it('should return the doc lines and version from mongo', function (done) { + return DocstoreClient.peekDoc( + this.project_id, + this.doc._id, + {}, + (error, res, doc) => { + res.statusCode.should.equal(200) + res.headers['x-doc-status'].should.equal('active') doc.lines.should.deep.equal(this.doc.lines) doc.version.should.equal(this.doc.version) doc.ranges.should.deep.equal(this.doc.ranges)