add options to ingestBody
[squeep-api-dingus] / test / lib / dingus.js
index 23b7e8c4a834fad503664b0c9bb0d3ab00bee7e4..356974fee0f48342dd80cfd710ccbd91bb64b210 100644 (file)
@@ -269,7 +269,7 @@ describe('Dingus', function () {
       };
       ctx = {};
     });
-    it('collects body without writing', function () {
+    it('collects response without writing', function () {
       Dingus.setHeadHandler(req, res, ctx);
       res.write(Buffer.from('foo'));
       res.write('baz');
@@ -277,6 +277,16 @@ describe('Dingus', function () {
       res.end('quux');
       assert(!origWrite.called);
       assert(origEnd.called);
+      assert.deepStrictEqual(ctx.responseBody, undefined);
+    });
+    it('collects response without writing, persists written data', function () {
+      Dingus.setHeadHandler(req, res, ctx, true);
+      res.write(Buffer.from('foo'));
+      res.write('baz');
+      res.write();
+      res.end('quux');
+      assert(!origWrite.called);
+      assert(origEnd.called);
       assert.deepStrictEqual(ctx.responseBody, Buffer.from('foobazquux'));
     });
     it('ignores non-head method', function () {
@@ -528,7 +538,7 @@ describe('Dingus', function () {
   }); // bodyData
 
   describe('ingestBody', function () {
-    it('covers', async function () {
+    it('ingests json', async function () {
       const req = {};
       const res = {};
       const ctx = {};
@@ -536,6 +546,30 @@ describe('Dingus', function () {
       sinon.stub(Dingus, 'getRequestContentType').returns(Enum.ContentType.ApplicationJson);
       await dingus.ingestBody(req, res, ctx);
       assert.deepStrictEqual(ctx.parsedBody, { foo: 'bar' });
+      assert.deepStrictEqual(ctx.rawBody, undefined);
+    });
+    it('persists rawBody', async function () {
+      const req = {};
+      const res = {};
+      const ctx = {};
+      const body = '{"foo":"bar"}';
+      sinon.stub(dingus, 'bodyData').resolves(body);
+      sinon.stub(Dingus, 'getRequestContentType').returns(Enum.ContentType.ApplicationJson);
+      await dingus.ingestBody(req, res, ctx, { persistRawBody: true });
+      assert.deepStrictEqual(ctx.parsedBody, { foo: 'bar' });
+      assert.deepStrictEqual(ctx.rawBody, body);
+    });
+    it('skips parsing empty body', async function () {
+      const req = {};
+      const res = {};
+      const ctx = {};
+      const body = '';
+      sinon.stub(dingus, 'bodyData').resolves(body);
+      sinon.stub(Dingus, 'getRequestContentType').returns(Enum.ContentType.ApplicationJson);
+      sinon.spy(dingus, 'parseBody');
+      await dingus.ingestBody(req, res, ctx, { parseEmptyBody: false });
+      assert.deepStrictEqual(ctx.parsedBody, undefined);
+      assert(dingus.parseBody.notCalled);
     });
   }); // ingestBody