update dependencies and devDependencies, fix lint issues
[squeep-indie-auther] / test / src / common.js
1 'use strict';
2
3 const assert = require('assert');
4 const sinon = require('sinon');
5 const StubLogger = require('../stub-logger');
6 const common = require('../../src/common');
7
8 describe('Common', function () {
9
10 describe('camelfy', function () {
11 it('covers', function () {
12 const snake = 'snake_case';
13 const expected = 'snakeCase';
14 const result = common.camelfy(snake);
15 assert.strictEqual(result, expected);
16 });
17 it('covers edge-cases', function () {
18 const kebab = '-kebab-case-';
19 const expected = 'KebabCase';
20 const result = common.camelfy(kebab, '-');
21 assert.strictEqual(result, expected);
22 });
23 it('covers empty input', function () {
24 const empty = '';
25 const expected = undefined;
26 const result = common.camelfy(empty);
27 assert.strictEqual(result, expected);
28 });
29 it('covers un-camelfiable input', function () {
30 const bad = {};
31 const expected = undefined;
32 const result = common.camelfy(bad);
33 assert.strictEqual(result, expected);
34 });
35 }); // camelfy
36
37 describe('freezeDeep', function () {
38 it('freezes things', function () {
39 const obj = {
40 sub1: {
41 sub2: {
42 foo: 'blah',
43 },
44 },
45 };
46 const result = common.freezeDeep(obj);
47 assert(Object.isFrozen(result));
48 assert(Object.isFrozen(result.sub1));
49 assert(Object.isFrozen(result.sub1.sub2));
50 assert(Object.isFrozen(result.sub1.sub2.foo));
51 });
52 }); // freezeDeep
53
54 describe('logTruncate', function () {
55 it('returns short string', function () {
56 const str = 'this is a short string';
57 const result = common.logTruncate(str, 100);
58 assert.strictEqual(result, str);
59 });
60 it('truncates long string', function () {
61 const str = 'this is not really a very long string but it is long enough for this test';
62 const result = common.logTruncate(str, 10);
63 assert(result.length < str.length);
64 });
65 }); // logTruncate
66
67 describe('ensureArray', function () {
68 it('returns empty array for no data', function () {
69 const result = common.ensureArray();
70 assert.deepStrictEqual(result, []);
71 });
72 it('returns same array passed in', function () {
73 const expected = [1, 2, 3, 'foo'];
74 const result = common.ensureArray(expected);
75 assert.deepStrictEqual(result, expected);
76 });
77 it('returns array containing non-array data', function () {
78 const data = 'bar';
79 const result = common.ensureArray(data);
80 assert.deepStrictEqual(result, [data]);
81 });
82 }); // ensureArray
83
84 describe('validError', function () {
85 it('covers valid', function () {
86 const result = common.validError('error');
87 assert.strictEqual(result, true);
88 });
89 it('covers invalid', function () {
90 const result = common.validError('🐔');
91 assert.strictEqual(result, false);
92 });
93 it('covers empty', function () {
94 const result = common.validError();
95 assert.strictEqual(result, false);
96 });
97 }); // validError
98
99 describe('validScope', function () {
100 it('covers valid', function () {
101 const result = common.validScope('scope');
102 assert.strictEqual(result, true);
103 });
104 it('covers invalid', function () {
105 const result = common.validScope('🐔');
106 assert.strictEqual(result, false);
107 });
108 it('covers empty', function () {
109 const result = common.validScope();
110 assert.strictEqual(result, false);
111 });
112 }); // validScope
113
114 describe('newSecret', function () {
115 it('covers default', async function () {
116 const result = await common.newSecret();
117 assert(result.length);
118 });
119 it('covers specified', async function () {
120 const result = await common.newSecret(21);
121 assert(result.length);
122 });
123 }); // newSecret
124
125 describe('dateToEpoch', function () {
126 it('covers no supplied date', function () {
127 const nowMs = Date.now() / 1000;
128 const result = common.dateToEpoch();
129 const drift = Math.abs(result - nowMs);
130 assert(drift < 2000);
131 });
132 it('covers supplied date', function () {
133 const now = new Date();
134 const nowEpoch = Math.ceil(now / 1000);
135 const result = common.dateToEpoch(now);
136 assert.strictEqual(result, nowEpoch);
137 });
138 }); // dateToEpoch
139
140 describe('omit', function () {
141 it('covers', function () {
142 const obj = {
143 foo: true,
144 bar: 'bar',
145 baz: {
146 quux: false,
147 },
148 };
149 const omitted = ['bar', 'baz'];
150 const expected = {
151 foo: true,
152 };
153 const result = common.omit(obj, omitted);
154 assert.deepStrictEqual(result, expected);
155 });
156 }); // omit
157
158 describe('mysteryBoxLogger', function () {
159 let mbl, stubLogger;
160 beforeEach(function () {
161 stubLogger = new StubLogger();
162 stubLogger._reset();
163 mbl = common.mysteryBoxLogger(stubLogger, 'test:scope');
164 });
165 afterEach(function () {
166 sinon.restore();
167 });
168 it('covers', function () {
169 const stat = {
170 packageName: 'fake-mystery-box',
171 packageVersion: '0.0.0',
172 data: 'exists',
173 };
174 mbl(stat);
175 assert(stubLogger.debug.called);
176 });
177 }); // mysteryBoxLogger
178
179 }); // Common