@auttam/easycli
Version:
A quick and easy way of creating cli for your npm package.
130 lines (129 loc) • 5.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const expect = require('chai').expect;
const collection_1 = require("../../lib/config/collection");
const config_error_1 = require("../../lib/errors/config-error");
class CollectionTest extends collection_1.Collection {
append(key, value) {
super.append(key, value);
}
hasKey(key) {
return super.hasKey(key);
}
get(key) {
return super.get(key);
}
find(target, propertyName) {
return super.find(target, propertyName);
}
validate(item) {
return true;
}
itemAdded(item) { }
verify() { }
}
describe('Collection Class Tests', function () {
var collection;
var testItem = { name: 'color', value: 'pink' };
beforeEach(function () {
collection = new CollectionTest();
});
describe('add()', function () {
it('allows only string as a key', function () {
expect(() => collection.append("key", testItem)).to.not.throw();
expect(() => collection.append(1, testItem)).to.throw(config_error_1.ConfigurationError);
});
it('allows symbol key', function () {
expect(() => collection.append(Symbol(), 'value')).to.not.throw(config_error_1.ConfigurationError);
});
it('throws error on adding duplicate key', function () {
collection.append('key', 'value');
expect(() => collection.append('key', 'value')).to.throw(config_error_1.ConfigurationError);
});
it('throws error on adding empty key', function () {
expect(() => collection.append('', 'value')).to.throw(config_error_1.ConfigurationError);
});
it('calls validate() before adding', function () {
var testObj = collection;
testObj.validate = function (item) {
throw "Test";
};
expect(() => testObj.append('key', 'value')).to.throw("Test");
});
it('adds item if validate() returns true', function () {
var testObj = collection;
testObj.validate = function (item) {
return true;
};
testObj.append('key', 'value');
expect(testObj.get('key')).to.be.equal("value");
});
it('does not add item if validate() returns false', function () {
var testObj = collection;
testObj.validate = function (item) {
return false;
};
testObj.append('key', 'value');
expect(testObj.get('key')).to.be.an("undefined");
});
it('adds item if validate() returns truthy value', function () {
var testObj = collection;
testObj.validate = function (item) {
return 'false';
};
testObj.append('key', 'value');
expect(collection.get('key')).to.be.equal("value");
});
});
describe('hasKey()', function () {
it('returns true if key is present', function () {
var symbol1 = Symbol();
collection.append(symbol1, 'value1');
collection.append('key', 'value');
expect(collection.hasKey('key')).to.be.equal(true);
expect(collection.hasKey(symbol1)).to.be.equal(true);
expect(collection.hasKey("undefined_key")).to.be.equal(false);
});
});
describe('get()', function () {
it('gets correct value for the key', function () {
collection.append('key1', 'value1');
collection.append('key2', 'value2');
expect(collection.get('key1')).to.be.equal('value1');
expect(collection.get('key2')).to.be.equal('value2');
});
it('gets correct value for the symbol key', function () {
var symbol1 = Symbol();
var symbol2 = Symbol();
collection.append(symbol1, 'value1');
collection.append('key2', 'value2');
collection.append(symbol2, 'value3');
expect(collection.get(symbol1)).to.be.equal('value1');
expect(collection.get('key2')).to.be.equal('value2');
expect(collection.get(symbol2)).to.be.equal('value3');
});
});
describe('findByProperty()', function () {
it('finds item by looking into each value and matching its property', function () {
collection.append('0', 1);
collection.append('1', {
size: 1,
name: 'alpha'
});
collection.append('2', {
size: 2,
name: 'beta'
});
collection.append('3', {
size: 3,
name: 'gamma'
});
expect(collection.find(3, 'size'))
.to.be.an('object')
.to.include({
size: 3,
name: 'gamma'
});
});
});
});