swatchjs-utils
Version:
Utilities for SwatchJS, a framework for easily creating and exposing APIs as methods
115 lines (94 loc) • 3.5 kB
JavaScript
;
var _require = require('chai'),
expect = _require.expect;
var errors = require('../../../lib/errors');
var anyParsers = require('../../../lib/api/parsers/any');
var error = errors.ERROR_CODE_INVALID_OBJECT;
describe('parsers.any', function () {
describe('parseAny', function () {
it('should parse and return an arbitrary data value', function () {
function checkTargetObject(obj) {
var result = anyParsers.parseAny(obj);
expect(result).to.deep.equal(obj);
}
// Check that it properly parses objects with expected keys
var t1 = { id: 'test.id', key: 'something' };
checkTargetObject(t1);
var t2 = { id: ' some other item ', key: '-another-' };
checkTargetObject(t2);
var t3 = { id: 'user-id1', other: 100, key: 'extra' };
checkTargetObject(t3);
// Check that it allows booleans, numbers, strings, and arrays
checkTargetObject('a');
checkTargetObject(100);
checkTargetObject(true);
checkTargetObject(false);
checkTargetObject('false');
checkTargetObject([1, 2, 3]);
});
it('should throw an error parsing an empty value', function () {
// Check that it rejects false-y empty input values
expect(function () {
return anyParsers.parseAny(null);
}).to.throw(error);
expect(function () {
return anyParsers.parseAny(undefined);
}).to.throw(error);
// Check that it rejects complex object-like values
expect(function () {
return anyParsers.parseAny(Number('a'));
}).to.throw(error);
var fn = function fn() {
return 100;
};
expect(function () {
return anyParsers.parseAny(fn);
}).to.throw(error);
var regexp = new RegExp('\\w+');
expect(function () {
return anyParsers.parseAny(regexp);
}).to.throw(error);
});
});
describe('parseOptionalAny', function () {
it('should parse and return an arbitrary data value', function () {
function checkTargetObject(obj) {
var result = anyParsers.parseOptionalAny(obj);
expect(result).to.deep.equal(obj);
}
// Check that it properly parses objects with expected keys
var t1 = { id: 'test.id', key: 'something' };
checkTargetObject(t1);
var t2 = { id: ' some other item ', key: '-another-' };
checkTargetObject(t2);
var t3 = { id: 'user-id1', other: 100, key: 'extra' };
checkTargetObject(t3);
// Check that it allows false-y empty input values
expect(anyParsers.parseOptionalAny(null)).to.equal(undefined);
checkTargetObject(undefined);
// Check that it allows booleans, numbers, strings, and arrays
checkTargetObject('a');
checkTargetObject(100);
checkTargetObject(true);
checkTargetObject(false);
checkTargetObject('false');
checkTargetObject([1, 2, 3]);
});
it('should throw an error parsing an empty value', function () {
// Check that it rejects complex object-like values
expect(function () {
return anyParsers.parseOptionalAny(Number('a'));
}).to.throw(error);
var fn = function fn() {
return 100;
};
expect(function () {
return anyParsers.parseOptionalAny(fn);
}).to.throw(error);
var regexp = new RegExp('\\w+');
expect(function () {
return anyParsers.parseOptionalAny(regexp);
}).to.throw(error);
});
});
});