node-query/test/helpers_test.js

159 lines
4.0 KiB
JavaScript

/* eslint-env node, mocha */
'use strict';
const chai = require('chai');
const assert = chai.assert;
const expect = chai.expect;
let Helpers = require('../lib/Helpers');
suite('Helper Module Tests -', () => {
suite('Type-checking methods -', () => {
suite('Object wrappers are listed as their native type', () => {
test('Boolean Wrapper returns \'boolean\' not \'object\'', () => {
let item = Boolean(true);
expect(Helpers.type(item)).to.deep.equal('boolean');
});
test('Number Wrapper returns \'number\' not \'object\'', () => {
let item = Number(4867);
expect(Helpers.type(item)).to.deep.equal('number');
});
test('String Wrapper returns \'string\' not \'object\'', () => {
let item = String('Foo');
expect(Helpers.type(item)).to.deep.equal('string');
});
});
suite('is..Method methods exist -', () => {
let types = [
'Null',
'Undefined',
'Object',
'Array',
'String',
'Number',
'Boolean',
'Function',
'RegExp',
'NaN',
'Infinite'
];
types.forEach(type => {
test(`is${type} method exists`, () => {
assert.ok(Helpers[`is${type}`]);
});
});
});
suite('isScalar -', () => {
let trueCases = {
'Strings are scalar': 'foo',
'Booleans are scalar': true,
'Numbers are scalar': 545
};
Object.keys(trueCases).forEach(desc => {
test(desc, () => {
expect(Helpers.isScalar(trueCases[desc])).to.be.true;
});
});
let falseCases = {
'Arrays are not scalar': [],
'Objects are not scalar': []
};
Object.keys(falseCases).forEach(desc => {
test(desc, () => {
expect(Helpers.isScalar(falseCases[desc])).to.be.false;
});
});
});
suite('isInfinity -', () => {
test('The type of 1/0 is infinity', () => {
expect(Helpers.type(1 / 0)).to.equal('infinity');
});
test('isInfinity is the same as isInfinite', () => {
expect(Helpers.isInfinite(1 / 0)).to.be.true;
});
});
suite('isNaN -', () => {
test('The type of 0 / 0 is NaN', () => {
expect(Helpers.type(0 / 0)).to.equal('nan');
});
test('isNaN method agrees with type', () => {
expect(Helpers.isNaN(0 / 0)).to.be.true;
});
});
});
suite('Other helper methods -', () => {
suite('stringTrim -', () => {
test('stringTrim method works as expected', () => {
let orig = [' x y ', 'z ', ' q'];
let ret = ['x y', 'z', 'q'];
expect(orig.map(Helpers.stringTrim)).to.be.deep.equal(ret);
});
});
suite('arrayPluck -', () => {
let orig = [
{
foo: 1
}, {
foo: 2,
bar: 10
}, {
foo: 3,
bar: 15
}
];
test('Finding members in all objects', () => {
expect(Helpers.arrayPluck(orig, 'foo')).to.be.deep.equal([1, 2, 3]);
});
test('Some members are missing in some objects', () => {
expect(Helpers.arrayPluck(orig, 'bar')).to.be.deep.equal([10, 15]);
});
test('Empty case', () => {
expect(Helpers.arrayPluck([], 'apple')).to.be.deep.equal([]);
});
});
suite('regexInArray -', () => {
let orig = ['apple', ' string ', 6, 4, 7];
let cases = [
{
'Dollar sign is not in any of the array items': /\$/,
'None of the numbers in the array match /5/': /5/
}, {
'\' string \' matches /^ ?string/': /^ ?string/,
'\'apple\' matches /APPLE/i': /APPLE/i
}
];
[0, 1].forEach(i => {
let boolCase = cases[i];
Object.keys(boolCase).forEach(desc => {
test(desc, () => {
if (i) {
expect(Helpers.regexInArray(orig, boolCase[desc])).to.be.true;
} else {
expect(Helpers.regexInArray(orig, boolCase[desc])).to.be.false;
}
});
});
});
test('First argument is not an array', () => {
expect(Helpers.regexInArray(5, /5/)).to.be.false;
});
test('Array is empty', () => {
expect(Helpers.regexInArray([], /.*/)).to.be.false;
});
});
suite('upperCaseFirst -', () => {
test('Capitalizes only the first letter of the string', () => {
expect(Helpers.upperCaseFirst('foobar')).to.equal('Foobar');
expect(Helpers.upperCaseFirst('FOOBAR')).to.equal('FOOBAR');
});
});
});
});