From de0f0d9acab203ab476dcf4f73c74f36cc57bfaf Mon Sep 17 00:00:00 2001 From: David Chin Date: Tue, 18 Apr 2017 14:37:19 +1000 Subject: [PATCH] test(common): Improve coverage for utility functions --- src/common/utils/capitalize.js | 12 ---------- src/common/utils/includes.js | 1 - src/common/utils/index.js | 29 +++++++------------------ src/common/utils/is-nil.js | 1 - src/common/utils/is-object.js | 5 +---- src/common/utils/omit-nil.js | 1 - src/common/utils/omit-property.js | 1 - src/common/utils/to-number.js | 1 - src/common/utils/to-snake-case.js | 3 +-- src/common/utils/to-string.js | 1 - test/common/utils/includes.spec.js | 23 ++++++++++++++++++++ test/common/utils/is-nil.spec.js | 8 +++---- test/common/utils/omit-property.spec.js | 11 ++++++++-- test/common/utils/to-number.spec.js | 11 ++++++++++ test/common/utils/to-snake-case.spec.js | 17 +++++++++++++++ test/common/utils/to-string.spec.js | 15 +++++++++++++ 16 files changed, 89 insertions(+), 51 deletions(-) delete mode 100644 src/common/utils/capitalize.js create mode 100644 test/common/utils/includes.spec.js create mode 100644 test/common/utils/to-number.spec.js create mode 100644 test/common/utils/to-snake-case.spec.js create mode 100644 test/common/utils/to-string.spec.js diff --git a/src/common/utils/capitalize.js b/src/common/utils/capitalize.js deleted file mode 100644 index c9db698f..00000000 --- a/src/common/utils/capitalize.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Capitalize - * @param {string} string - * @returns {string} - */ -export default function capitalize(string) { - if (!string) { - return string; - } - - return string.charAt(0).toUpperCase() + string.slice(1); -} diff --git a/src/common/utils/includes.js b/src/common/utils/includes.js index b0a8e09b..c531b6ad 100644 --- a/src/common/utils/includes.js +++ b/src/common/utils/includes.js @@ -1,5 +1,4 @@ /** - * Includes item * @param {array|string} items * @param {array|string} item * @returns {boolean} diff --git a/src/common/utils/index.js b/src/common/utils/index.js index 20e22c39..f3d4eae0 100644 --- a/src/common/utils/index.js +++ b/src/common/utils/index.js @@ -1,21 +1,8 @@ -import capitalize from './capitalize'; -import includes from './includes'; -import isNil from './is-nil'; -import isObject from './is-object'; -import omitNil from './omit-nil'; -import omitProperty from './omit-property'; -import toNumber from './to-number'; -import toSnakeCase from './to-snake-case'; -import toString from './to-string'; - -export { - capitalize, - includes, - isNil, - isObject, - omitNil, - omitProperty, - toNumber, - toSnakeCase, - toString, -}; +export { default as includes } from './includes'; +export { default as isNil } from './is-nil'; +export { default as isObject } from './is-object'; +export { default as omitNil } from './omit-nil'; +export { default as omitProperty } from './omit-property'; +export { default as toNumber } from './to-number'; +export { default as toSnakeCase } from './to-snake-case'; +export { default as toString } from './to-string'; diff --git a/src/common/utils/is-nil.js b/src/common/utils/is-nil.js index 2527c50f..ee9d930d 100644 --- a/src/common/utils/is-nil.js +++ b/src/common/utils/is-nil.js @@ -1,5 +1,4 @@ /** - * Is nil * @param {*} value * @returns {boolean} */ diff --git a/src/common/utils/is-object.js b/src/common/utils/is-object.js index add88f2c..b82919ab 100644 --- a/src/common/utils/is-object.js +++ b/src/common/utils/is-object.js @@ -1,10 +1,7 @@ /** - * Is object * @param {*} value * @returns {boolean} */ export default function isObject(value) { - const type = typeof value; - - return value !== null && (type === 'object' || type === 'function'); + return value !== null && typeof value === 'object' && !Array.isArray(value); } diff --git a/src/common/utils/omit-nil.js b/src/common/utils/omit-nil.js index a99938c6..efb61bab 100644 --- a/src/common/utils/omit-nil.js +++ b/src/common/utils/omit-nil.js @@ -2,7 +2,6 @@ import isNil from './is-nil'; import omitProperty from './omit-property'; /** - * Omit nil * @param {Object} object * @returns {Object} */ diff --git a/src/common/utils/omit-property.js b/src/common/utils/omit-property.js index 8982e3fe..820d3202 100644 --- a/src/common/utils/omit-property.js +++ b/src/common/utils/omit-property.js @@ -1,7 +1,6 @@ import isObject from './is-object'; /** - * Omit property * @param {Object} object * @param {Function} predicateFn * @returns {Object} diff --git a/src/common/utils/to-number.js b/src/common/utils/to-number.js index e989695b..92f5632c 100644 --- a/src/common/utils/to-number.js +++ b/src/common/utils/to-number.js @@ -1,5 +1,4 @@ /** - * To number * @param {*} value * @returns {number} */ diff --git a/src/common/utils/to-snake-case.js b/src/common/utils/to-snake-case.js index 2134473f..702e4cbf 100644 --- a/src/common/utils/to-snake-case.js +++ b/src/common/utils/to-snake-case.js @@ -1,10 +1,9 @@ /** - * To snake case * @param {string} string * @returns {string} */ export default function toSnakeCase(string) { - if (!string) { + if (typeof string !== 'string') { return string; } diff --git a/src/common/utils/to-string.js b/src/common/utils/to-string.js index 8688a92b..2a927e65 100644 --- a/src/common/utils/to-string.js +++ b/src/common/utils/to-string.js @@ -1,5 +1,4 @@ /** - * To string * @param {*} value * @returns {string} */ diff --git a/test/common/utils/includes.spec.js b/test/common/utils/includes.spec.js new file mode 100644 index 00000000..9cb1bc58 --- /dev/null +++ b/test/common/utils/includes.spec.js @@ -0,0 +1,23 @@ +import includes from '../../../src/common/utils/includes'; + +describe('includes', () => { + it('returns true if the array contains the item', () => { + expect(includes([1, 2, 3], 2)).toEqual(true); + }); + + it('returns false if the array does not contain the item', () => { + expect(includes([1, 2, 3], 4)).toEqual(false); + }); + + it('returns true if the string contains the substring', () => { + expect(includes('hello world', 'lo')).toEqual(true); + }); + + it('returns false if the string does not contain the substring', () => { + expect(includes('hello world', 'la')).toEqual(false); + }); + + it('returns false if the parameter is not a string or array', () => { + expect(includes({ la: 'la' }, 'la')).toEqual(false); + }); +}); diff --git a/test/common/utils/is-nil.spec.js b/test/common/utils/is-nil.spec.js index 85223731..7e6e075d 100644 --- a/test/common/utils/is-nil.spec.js +++ b/test/common/utils/is-nil.spec.js @@ -1,19 +1,19 @@ import isNil from '../../../src/common/utils/is-nil'; describe('isNil', () => { - it('should return true if value is null', () => { + it('returns true if the input value is null', () => { expect(isNil(null)).toBeTruthy(); }); - it('should return true if value is undefined', () => { + it('returns true if the input value is undefined', () => { expect(isNil(undefined)).toBeTruthy(); }); - it('should return false if value is empty', () => { + it('returns false if the input value is empty', () => { expect(isNil('')).toBeFalsy(); }); - it('should return false if value is not empty', () => { + it('returns false if the input value is not empty', () => { expect(isNil('foobar')).toBeFalsy(); }); }); diff --git a/test/common/utils/omit-property.spec.js b/test/common/utils/omit-property.spec.js index b2fbc3a3..d6b0228d 100644 --- a/test/common/utils/omit-property.spec.js +++ b/test/common/utils/omit-property.spec.js @@ -1,15 +1,22 @@ import omitProperty from '../../../src/common/utils/omit-property'; describe('omitProperty', () => { - it('should omit property if matching predicate', () => { + it('omits the property if its key matches the predicate', () => { const output = omitProperty({ a: 'a', b: 'b' }, value => value === 'b'); expect(output).toEqual({ a: 'a' }); }); - it('should not omit property if matching predicate', () => { + it('does not omit the property if its key does not match the predicate', () => { const output = omitProperty({ a: 'a', b: 'b' }, value => value === 'c'); expect(output).toEqual({ a: 'a', b: 'b' }); }); + + it('returns the parameter if it is not an object', () => { + const input = ['a', 'b']; + const output = omitProperty(input, value => value === 'b'); + + expect(output).toEqual(input); + }); }); diff --git a/test/common/utils/to-number.spec.js b/test/common/utils/to-number.spec.js new file mode 100644 index 00000000..0bb8cf14 --- /dev/null +++ b/test/common/utils/to-number.spec.js @@ -0,0 +1,11 @@ +import toNumber from '../../../src/common/utils/to-number'; + +describe('toNumber', () => { + it('converts the number-like string into a number', () => { + expect(toNumber('1.5')).toEqual(1.5); + }); + + it('returns 0 if the parameter is not a number-like string', () => { + expect(toNumber('foobar')).toEqual(0); + }); +}); diff --git a/test/common/utils/to-snake-case.spec.js b/test/common/utils/to-snake-case.spec.js new file mode 100644 index 00000000..1d618ddb --- /dev/null +++ b/test/common/utils/to-snake-case.spec.js @@ -0,0 +1,17 @@ +import toSnakeCase from '../../../src/common/utils/to-snake-case'; + +describe('toSnakeCase', () => { + it('converts a string written in camel case into snake case', () => { + expect(toSnakeCase('toSnakeCase')).toEqual('to_snake_case'); + }); + + it('converts a regular string into snake case', () => { + expect(toSnakeCase('To snake case')).toEqual('to_snake_case'); + }); + + it('returns the parameter if it is not a string', () => { + const input = { message: 'To snake case' }; + + expect(toSnakeCase(input)).toEqual(input); + }); +}); diff --git a/test/common/utils/to-string.spec.js b/test/common/utils/to-string.spec.js new file mode 100644 index 00000000..2bf0bbe6 --- /dev/null +++ b/test/common/utils/to-string.spec.js @@ -0,0 +1,15 @@ +import toString from '../../../src/common/utils/to-string'; + +describe('toString', () => { + it('converts the number into a string', () => { + expect(toString(1)).toEqual('1'); + }); + + it('returns the parameter if it is already a string', () => { + expect(toString('foobar')).toEqual('foobar'); + }); + + it('returns a blank string if the parameter is an object', () => { + expect(toString({ foobar: 'foobar' })).toEqual(''); + }); +});