navy
Version:
Quick and powerful development environments using Docker and Docker Compose
71 lines (69 loc) • 2.27 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _chai = require("chai");
var _sinon = _interopRequireDefault(require("sinon"));
var _middleware = require("../middleware");
/* eslint-env mocha */
function makeNavy({
driver,
registered = []
} = {}) {
return {
name: 'env',
normalisedName: 'env',
getDriver: _sinon.default.stub().resolves(driver),
ensurePluginsLoaded: _sinon.default.stub().resolves(),
getNavyFile: _sinon.default.stub().resolves(null),
externalIP: _sinon.default.stub().resolves('127.0.0.1'),
_registeredMiddleware: registered
};
}
function makeDriver() {
return {
getConfig: _sinon.default.stub().resolves({
services: {}
}),
writeConfig: _sinon.default.stub().resolves()
};
}
describe('navy/middleware', function () {
describe('middlewareRunner', function () {
it('should be a no-op when the navy has no driver', async function () {
const navy = makeNavy({
driver: null
});
await (0, _middleware.middlewareRunner)(navy, {
services: {}
});
(0, _chai.expect)(navy.ensurePluginsLoaded.called).to.equal(false);
});
it('should ensure plugins are loaded before running middleware', async function () {
const driver = makeDriver();
const navy = makeNavy({
driver
});
await (0, _middleware.middlewareRunner)(navy, {
services: {}
});
(0, _chai.expect)(navy.ensurePluginsLoaded.calledOnce).to.equal(true);
});
it('should pipe the driver config through default + registered middleware and write the result', async function () {
const driver = makeDriver();
const tagged = _sinon.default.stub().callsFake(async config => ({
...config,
_tagged: true
}));
const navy = makeNavy({
driver,
registered: [tagged]
});
await (0, _middleware.middlewareRunner)(navy, {
services: {}
});
(0, _chai.expect)(tagged.calledOnce).to.equal(true);
(0, _chai.expect)(driver.writeConfig.calledOnce).to.equal(true);
const written = driver.writeConfig.firstCall.args[0];
(0, _chai.expect)(written).to.have.property('_tagged', true);
});
});
});