X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=test%2Flib%2Fdingus.js;h=8913436980c22cd5ad076af0dd39f2f722625381;hb=97be4c0841f2615651c6cd6fb466aada47773cc4;hp=f374ba7d75b042f9bbc99a786c5f4b80016c934b;hpb=552223cf6566d87e95a49175e80440fbe47a25b9;p=squeep-api-dingus diff --git a/test/lib/dingus.js b/test/lib/dingus.js index f374ba7..8913436 100644 --- a/test/lib/dingus.js +++ b/test/lib/dingus.js @@ -7,15 +7,19 @@ const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-requi const fs = require('fs'); const Dingus = require('../../lib/dingus'); -const { DingusError } = require('../../lib/errors'); +const { DingusError, RouterNoMethodError } = require('../../lib/errors'); const Enum = require('../../lib/enum'); const noExpectedException = 'did not get expected exception'; +const _nop = () => {}; +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; @@ -355,6 +359,7 @@ describe('Dingus', function () { sinon.spy(dingus, 'handlerNotFound'); sinon.spy(dingus, 'handlerBadRequest'); sinon.spy(dingus, 'handlerInternalServerError'); + sinon.spy(Dingus, 'setHeadHandler'); stubHandler = sinon.stub(); }); afterEach(function () { @@ -460,6 +465,40 @@ describe('Dingus', function () { assert.strictEqual(stubHandler.args[0][3], 'foo'); assert.strictEqual(stubHandler.args[0][4], 'bar'); }); + describe('intrinsic HEAD handling', function () { + it('covers no intrinsic HEAD handling', async function () { + dingus.intrinsicHeadMethod = false; + dingus.on('GET', '/', stubHandler); + req.method = 'HEAD'; + await dingus.dispatch(req, res, ctx); + assert(!stubHandler.called); + assert(dingus.handlerMethodNotAllowed.called); + }); + it('calls HEAD setup and GET handler', async function () { + dingus.on('GET', '/', stubHandler); + req.method = 'HEAD'; + await dingus.dispatch(req, res, ctx); + assert(Dingus.setHeadHandler.called); + assert(stubHandler.called); + }); + it('covers no GET handler', async function () { + dingus.on('POST', '/', stubHandler); + req.method = 'HEAD'; + await dingus.dispatch(req, res, ctx); + assert(!stubHandler.called); + assert(dingus.handlerMethodNotAllowed.called); + }); + it('covers unexpected router error', async function () { + sinon.stub(dingus.router, 'lookup') + .onFirstCall().throws(new RouterNoMethodError()) + .onSecondCall().throws(new DingusError()) + ; + dingus.on('GET', '/', stubHandler); + req.method = 'HEAD'; + await dingus.dispatch(req, res, ctx); + assert(dingus.handlerInternalServerError.called); + }); + }); }); // dispatch describe('parseBody', function () { @@ -668,8 +707,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: ; rel="relation" @@ -678,8 +718,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