navy
Version:
Quick and powerful development environments using Docker and Docker Compose
75 lines (73 loc) • 3.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _chai = require("chai");
var _sinon = _interopRequireDefault(require("sinon"));
var _filesystem = _interopRequireDefault(require("../config-providers/filesystem"));
var _npm = _interopRequireDefault(require("../config-providers/npm"));
var _configProvider = require("../config-provider");
/* eslint-env mocha */
describe('config-provider', function () {
let sandbox;
beforeEach(function () {
sandbox = _sinon.default.createSandbox();
});
afterEach(function () {
sandbox.restore();
});
describe('resolveConfigProviderFromName', function () {
it('should return the FileSystem provider for "filesystem"', function () {
(0, _chai.expect)((0, _configProvider.resolveConfigProviderFromName)('filesystem')).to.equal(_filesystem.default);
});
it('should return the NPM provider for "npm"', function () {
(0, _chai.expect)((0, _configProvider.resolveConfigProviderFromName)('npm')).to.equal(_npm.default);
});
it('should return null for unknown provider names', function () {
(0, _chai.expect)((0, _configProvider.resolveConfigProviderFromName)('git')).to.equal(null);
});
});
describe('getImportCommandLineOptions', function () {
it('should return the concatenation of every provider\'s importCliOptions', function () {
const options = (0, _configProvider.getImportCommandLineOptions)();
(0, _chai.expect)(options).to.be.an('array');
(0, _chai.expect)(options).to.eql([..._npm.default.importCliOptions, ..._filesystem.default.importCliOptions]);
});
});
describe('getImportOptionsForCLI', function () {
it('should return options from the first provider that returns a non-null value', async function () {
const npmStub = sandbox.stub(_npm.default, 'getImportOptionsForCLI').resolves(null);
const fsResult = {
configProvider: 'filesystem'
};
const fsStub = sandbox.stub(_filesystem.default, 'getImportOptionsForCLI').resolves(fsResult);
const result = await (0, _configProvider.getImportOptionsForCLI)({
path: '/tmp'
});
(0, _chai.expect)(result).to.equal(fsResult);
(0, _chai.expect)(npmStub.calledOnce).to.equal(true);
(0, _chai.expect)(fsStub.calledOnce).to.equal(true);
});
it('should not call subsequent providers once one returns options', async function () {
const npmResult = {
configProvider: 'npm'
};
const npmStub = sandbox.stub(_npm.default, 'getImportOptionsForCLI').resolves(npmResult);
const fsStub = sandbox.stub(_filesystem.default, 'getImportOptionsForCLI').resolves(null);
const result = await (0, _configProvider.getImportOptionsForCLI)({});
(0, _chai.expect)(result).to.equal(npmResult);
(0, _chai.expect)(npmStub.calledOnce).to.equal(true);
(0, _chai.expect)(fsStub.called).to.equal(false);
});
it('should throw an invariant violation when no provider matches', async function () {
sandbox.stub(_npm.default, 'getImportOptionsForCLI').resolves(null);
sandbox.stub(_filesystem.default, 'getImportOptionsForCLI').resolves(null);
let caught;
try {
await (0, _configProvider.getImportOptionsForCLI)({});
} catch (err) {
caught = err;
}
(0, _chai.expect)(caught).to.be.an('error');
(0, _chai.expect)(caught.message).to.match(/CLI_IMPORT_RESOLVE_OPTIONS_ERR/);
});
});
});