UNPKG

@auttam/easycli

Version:

A quick and easy way of creating cli for your npm package.

186 lines (185 loc) 7.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const option_config_1 = require("../../lib/config/option-config"); const config_error_1 = require("../../lib/errors/config-error"); const expect = require('chai').expect; describe('Option Configuration Tests', () => { describe('constructor()', () => { it('throws exception on empty name', () => { expect(() => new option_config_1.Option({ name: '' })).to.throw(config_error_1.ConfigurationError); }); it('uses name as-is', () => { var option = new option_config_1.Option({ name: 'myOption' }); expect(option.name).to.equal('myOption'); }); it('uses name as property name in camelCased form', () => { expect((new option_config_1.Option({ name: 'my-option' })).propName).to.equal('myOption'); expect((new option_config_1.Option({ name: '1My-#option-two' })).propName).to.equal('1My#optionTwo'); }); it('uses property name as-is if supplied', () => { expect((new option_config_1.Option({ name: 'my-option', propName: 'Test100' })).propName).to.equal('Test100'); }); it('copies fields from config object', () => { var option = new option_config_1.Option({ name: 'my-Option', acceptOnly: ['a'], help: 'help', aliases: ['m2'], value: 'val1' }); expect(option).to.eql({ name: 'my-Option', acceptOnly: ['a'], help: 'help', aliases: ['m2'], value: 'val1', propName: 'myOption' }); }); it('removes duplicates from aliases', () => { var option = new option_config_1.Option({ name: 'myOption', aliases: ['a', 'a', 'b'] }); expect(option.aliases).to.eql(['a', 'b']); }); it('removes alias from aliases that matches name', () => { var option = new option_config_1.Option({ name: 'myOption', aliases: ['a', 'a', 'myOption', 'b'] }); expect(option.aliases).to.eql(['a', 'b']); }); it('removes duplicates from accepted values', () => { var option = new option_config_1.Option({ name: 'myOption', aliases: ['a', 'a', 'b'], acceptOnly: ['v1', 'v2', 'v1'] }); expect(option.aliases).to.eql(['a', 'b']); expect(option.acceptOnly).to.eql(['v1', 'v2']); }); }); describe('merge()', () => { it('does not change name', () => { var option = new option_config_1.Option({ name: 'myOption' }); option.merge({ name: 'myOption2' }); expect(option.name).to.equal('myOption'); }); it('does change property name', () => { var option = new option_config_1.Option({ name: 'my-option' }); expect(option.name).to.equal('my-option'); expect(option.propName).to.equal('myOption'); option.merge({ name: 'myOption2', propName: 'test' }); expect(option.name).to.equal('my-option'); expect(option.propName).to.equal('test'); }); it('does not replace fields with empty value', () => { var option = new option_config_1.Option({ name: 'my-option', acceptOnly: ['a'], help: 'help', aliases: ['m2'], value: 'val1' }); option.merge({ name: 'myOption2', acceptOnly: [], value: '', aliases: [], help: '' }); expect(option).to.eql({ name: 'my-option', acceptOnly: ['a'], help: 'help', aliases: ['m2'], value: 'val1', propName: 'myOption' }); }); }); }); describe('Option Collection Tests', () => { var collection; beforeEach(function () { collection = new option_config_1.OptionCollection(); }); describe('add()', () => { it('adds new config', () => { var config = { name: 'n', help: 'option-n' }; collection.add(config); var got = collection.get('n'); expect(got).to.include(config); }); it('updates existing config', () => { var config = { name: 'n', help: 'help2' }; collection.add(config); var got = collection.get('n'); expect(got).to.include(config); }); it('removes alias when it matches the option name', function () { collection.add({ name: "option-name", aliases: ["option-name"] }); collection.add({ name: "option-name2", aliases: ["option-name2", "o", "option-name2"] }); expect(collection.get("option-name").aliases).to.be.an('array').that.is.empty; expect(collection.get("option-name").propName).to.equal('optionName'); expect(collection.get("option-name2").aliases).to.be.an('array').that.not.includes("option-name2"); expect(collection.get("option-name2").aliases).to.be.an('array').that.includes("o"); }); it('throws error for an option that has alias that is already used', function () { collection.add({ name: "option1", aliases: ["a"] }); expect(() => collection.add({ name: "option", aliases: ["a"] })).to.throw(config_error_1.ConfigurationError); }); it('merges options with same names', () => { collection.add({ name: 'my-option' }); collection.add({ name: 'my-option', propName: 'op1' }); expect(collection.get('my-option')).to.include({ propName: 'op1' }); }); it('throws error for two options with same property names', () => { collection.add({ name: 'my-option', propName: 'op1' }); expect(() => { collection.add({ name: 'my-option2', propName: 'op1' }); }).to.throw(config_error_1.ConfigurationError); }); }); describe('addList()', () => { it('throws error for an option in the list with empty names', function () { expect(() => collection.addList([{ name: "" }])).to.throw(config_error_1.ConfigurationError); }); it('throws error for an option that has alias that is already used', function () { collection.add({ name: "option1", aliases: ["a"] }); expect(() => collection.addList([{ name: "option", aliases: ["a"] }])).to.throw(config_error_1.ConfigurationError); }); it('merges options with same names', () => { collection.add({ name: 'my-option' }); collection.add({ name: 'my-option', propName: 'op1' }); collection.addList([{ name: 'my-option', help: 'help' }, { name: 'option2' }]); expect(collection.get('my-option')).to.include({ propName: 'op1', help: 'help' }); }); }); });