UNPKG

4.83 kBJavaScriptView Raw
1/* global it describe */
2const assert = require('assert');
3const { setPrecisionOr, parseOr, jsonOr, intOr, floatOr } = require('../conversions');
4const { identity } = require('../logic');
5
6describe('Conversions', function() {
7 describe('#jsonOr()', function() {
8 it('should return default value if empty', function() {
9 assert.strictEqual(jsonOr(0, null), 0);
10 assert.strictEqual(jsonOr(0)(''), 0);
11 assert.strictEqual(jsonOr(0)(undefined), 0);
12 assert.strictEqual(jsonOr(1, 0), 1);
13 assert.strictEqual(jsonOr(0)('asdffsda'), 0);
14 assert.deepStrictEqual(jsonOr(0)('{a:b}'), 0);
15 });
16 it('should return empty object if empty object passed', function() {
17 assert.deepStrictEqual(jsonOr(0)('{}'), {});
18 assert.deepStrictEqual(jsonOr(0)('{"a":{"b":1}}'), { a: { b: 1 } });
19 });
20 it('should return function returned value if passed a function', function() {
21 assert.strictEqual(jsonOr(x => 3)(null), 3);
22 });
23 it('should return same value if identity is passed as default value', function() {
24 assert.strictEqual(jsonOr(identity)(null), null);
25 });
26 });
27 describe('#floatOr()', function() {
28 it('should return default value if empty', function() {
29 assert.strictEqual(floatOr(0)(null), 0);
30 assert.strictEqual(floatOr(0)(undefined), 0);
31 assert.strictEqual(floatOr(0)('xxxx'), 0);
32 assert.strictEqual(floatOr(0)('x3x'), 0);
33 assert.strictEqual(floatOr(1)(0), 0);
34 });
35 it('should return value if is a float', function() {
36 assert.strictEqual(floatOr(0)(1.1), 1.1);
37 assert.strictEqual(floatOr(0)('1.1'), 1.1);
38 assert.strictEqual(floatOr(0)('1.123456789'), 1.123456789);
39 });
40 it('should return function returned value if passed a function', function() {
41 assert.strictEqual(floatOr(x => 3)(null), 3);
42 });
43 it('should return same value if identity is passed as default value', function() {
44 assert.strictEqual(floatOr(identity)(null), null);
45 });
46 });
47 describe('#intOr()', function() {
48 it('should return default value if empty', function() {
49 assert.strictEqual(intOr(0)(null), 0);
50 assert.strictEqual(intOr(0)(undefined), 0);
51 assert.strictEqual(intOr(0)('xxxx'), 0);
52 assert.strictEqual(intOr(0)('x3x'), 0);
53 assert.strictEqual(intOr(1)(0), 0);
54 });
55 it('should return value if is a int', function() {
56 assert.strictEqual(intOr(0)(1), 1);
57 assert.strictEqual(intOr(0)('1'), 1);
58 });
59 it('should return an int if passed a float', function() {
60 assert.strictEqual(intOr(0)(1.1), 1);
61 assert.strictEqual(intOr(0)('1.9'), 1);
62 });
63 it('should return function returned value if passed a function', function() {
64 assert.strictEqual(intOr(x => 3)(null), 3);
65 });
66 it('should return same value if identity is passed as default value', function() {
67 assert.strictEqual(intOr(identity)(null), null);
68 });
69 });
70 describe('#setPrecision()', function() {
71 it('should return with no decimals if 0 passed', function() {
72 assert.strictEqual(setPrecisionOr(0, identity)(1.3), 1);
73 });
74 it('should return with no decimals if wrong precision passed', function() {
75 assert.strictEqual(setPrecisionOr(null, identity, 1.3), 1);
76 assert.strictEqual(setPrecisionOr(undefined, identity, 1.3), 1);
77 assert.strictEqual(setPrecisionOr('', identity, 1.3), 1);
78 });
79 it('should return treat precision as integer', function() {
80 assert.strictEqual(setPrecisionOr(2.5, identity, 1.12345), 1.12);
81 });
82 it('should return the exact decimals passed', function() {
83 assert.strictEqual(setPrecisionOr(2, identity, 1.12345), 1.12);
84 });
85 it('should return decimals rounded', function() {
86 assert.strictEqual(setPrecisionOr(3, identity, 1.12345), 1.123);
87 assert.strictEqual(setPrecisionOr(4, identity, 1.12345), 1.1235);
88 });
89 it('should return default value on bad input', function() {
90 assert.strictEqual(setPrecisionOr(3, 33, null), 33);
91 assert.strictEqual(setPrecisionOr(3, 33, undefined), 33);
92 assert.strictEqual(setPrecisionOr(3, 33, 'jasdlfsj'), 33);
93 });
94 it('should return accept a function as failover', function() {
95 assert.strictEqual(setPrecisionOr(3, () => 33, null), 33);
96 });
97 });
98 describe('#parseOr()', function() {
99 it('should return default value if parser throws an exception', function() {
100 assert.strictEqual(
101 parseOr(
102 x => {
103 throw Error('whatever');
104 },
105 () => true
106 )(33)(1),
107 33
108 );
109 });
110 it('should return value if identity passes as a parser', function() {
111 assert.strictEqual(parseOr(identity, () => true)(33)(1), 1);
112 assert.strictEqual(parseOr(identity, () => true)(33)(0), 0);
113 });
114 });
115});