Browse Source

return the origin of peeked docs

Brian Gough 5 years ago
parent
commit
69339aeb9d

+ 1 - 0
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))
       }
     })

+ 55 - 2
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)