cookies are now parsed and populated on ctx.cookie by deault
[squeep-api-dingus] / test / lib / dingus.js
index 9d471229d3a26ebde87ebfae9d53efbde46c9aaa..01094a7c8e94bc9647411b422d76f8339783a0cd 100644 (file)
@@ -12,10 +12,14 @@ const Enum = require('../../lib/enum');
 
 const noExpectedException = 'did not get expected exception';
 
+const _nop = () => undefined;
+const _logFn = (process.env['VERBOSE_TESTS'] && console.log) || _nop;
 const noLogger = {
-  debug: () => {},
-  error: () => {},
+  debug: _logFn,
+  error: _logFn,
 };
+sinon.spy(noLogger, 'debug');
+sinon.spy(noLogger, 'error');
 
 describe('Dingus', function () {
   let dingus;
@@ -176,6 +180,71 @@ describe('Dingus', function () {
     });
   }); // clientAddressContext
 
+  describe('ingestCookie', function () {
+    let req, res, ctx;
+    beforeEach(function () {
+      req = {
+        getHeader: sinon.stub(),
+      };
+      ctx = {};
+    });
+    it('covers no header', function () {
+      const expected = {};
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+    it('covers non variable', function () {
+      req.getHeader.returns('foo');
+      const expected = {
+        foo: null,
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+    it('parses cookies', function () {
+      req.getHeader.returns('foo=bar; baz="quux"');
+      const expected = {
+        foo: 'bar',
+        baz: 'quux',
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+    it('parses nulls', function () {
+      req.getHeader.returns('foo=; bar=');
+      const expected = {
+        foo: '',
+        bar: '',
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+    it('parses non-uri-encoded', function () {
+      req.getHeader.returns('foo%=%qux');
+      const expected = {
+        'foo%': '%qux',
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+    it('covers nameless cookie', function () {
+      req.getHeader.returns('=bar');
+      const expected = {
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+
+    });
+    it('covers duplicate cookie', function () {
+      req.getHeader.returns('foo=bar; foo="quux"');
+      const expected = {
+        foo: 'bar',
+      };
+      Dingus.ingestCookie(req, res, ctx);
+      assert.deepStrictEqual(ctx.cookie, expected);
+    });
+  }); // ingestCookie
+
   describe('getRequestContentType', function () {
     let req;
     beforeEach(function () {
@@ -703,8 +772,9 @@ describe('Dingus', function () {
     });
     it('covers no meta file', async function() {
       dingus._readFileInfo.resolves([null, null]);
-      await dingus._serveFileMetaHeaders(res, directory, fileName);
+      const result = await dingus._serveFileMetaHeaders(res, directory, fileName);
       assert(!res.setHeader.called);
+      assert.strictEqual(result, false);
     });
     it('adds extra headers', async function () {
       dingus._readFileInfo.resolves([{}, Buffer.from(`Link: <https://example.com/>; rel="relation"
@@ -713,8 +783,9 @@ X-Folded-Header: data
   the fold
 Content-Type: image/sgi
 `)]);
-      await dingus._serveFileMetaHeaders(res, directory, fileName);
+      const result = await dingus._serveFileMetaHeaders(res, directory, fileName);
       assert(res.setHeader.called);
+      assert.strictEqual(result, true);
     });
   }); // _serveFileMetaHeaders