Completed
Push — master ( 2cac81...71510a )
by Vitaly
01:30
created

test/applyMiddlewate.spec.js   A

Complexity

Total Complexity 15
Complexity/F 1

Size

Lines of Code 82
Function Count 15

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 0
wmc 15
c 1
b 0
f 1
nc 1
mnd 0
bc 6
fnc 15
dl 0
loc 82
rs 10
bpm 0.4
cpm 1
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A applyMiddlewate.spec.js ➔ ??? 0 3 1
1
import test from 'ava';
2
import sinon from 'sinon';
3
import applyMiddleware from '../src/applyMiddleware';
4
5
test('applyTo is required', t => {
6
    t.throws(() => applyMiddleware());
7
});
8
9
test('applyTo is not a function', t => {
10
    const applyTo = 'oops';
11
    t.throws(() => applyMiddleware(applyTo));
12
});
13
14
test('no middleware returns default params', t => {
15
    const applyTo = a => a;
16
    const spyApplyTo = sinon.spy(applyTo);
17
18
    t.deepEqual(applyMiddleware(spyApplyTo), {});
19
    t.true(spyApplyTo.calledOnce);
20
    t.true(spyApplyTo.calledWithExactly({}));
21
});
22
23
test('no functional middleware returns default params', t => {
24
    const applyTo = sinon.spy(a => a);
25
    const middlewares = [
26
        'test', undefined, {}, [], 123, null, NaN, /^/
27
    ];
28
29
    t.deepEqual(applyMiddleware(applyTo, middlewares), {});
30
    t.true(applyTo.calledOnce);
31
    t.true(applyTo.calledWithExactly({}));
32
});
33
34
test('one middleware', t => {
35
    const applyTo = sinon.spy(a => a);
36
    const middleware = sinon.spy(a => a);
37
38
    const options = { options: 'options' };
39
    const params = { params: 'params' };
40
    const resourceId = 'resourceId';
41
    const method = 'method';
42
43
    t.deepEqual(applyMiddleware(applyTo, [ middleware ], options, params, resourceId, method), params);
44
    t.true(applyTo.calledOnce);
45
    t.true(applyTo.calledWithExactly(params, options, params, resourceId, method));
46
    t.true(middleware.calledOnce);
47
48
    const middlewareSpyCall = middleware.getCall(0);
49
    t.true(middlewareSpyCall.args.length === 1);
50
    t.true(middlewareSpyCall.args[0] instanceof Function);
51
    t.falsy(middlewareSpyCall.thisValue);
52
    t.true(middlewareSpyCall.args[0].prototype === undefined);
53
});
54
55
test('multiple middlewares', t => {
56
    const applyTo = sinon.spy(a => a);
57
    const middleware1 = sinon.spy(a => a);
58
    const middleware2 = sinon.spy(a => a);
59
60
    const options = { options: 'options' };
61
    const params = { params: 'params' };
62
    const resourceId = 'resourceId';
63
    const method = 'method';
64
65
    t.deepEqual(applyMiddleware(applyTo, [ middleware1, middleware2 ], options, params, resourceId, method), params);
66
    t.true(applyTo.calledOnce);
67
    t.true(applyTo.calledWithExactly(params, options, params, resourceId, method, options, params, resourceId, method));
68
    t.true(middleware1.calledOnce);
69
    t.true(middleware2.calledOnce);
70
71
    const middleware1SpyCall = middleware1.getCall(0);
72
    t.true(middleware1SpyCall.args.length === 1);
73
    t.true(middleware1SpyCall.args[0] instanceof Function);
74
    t.falsy(middleware1SpyCall.thisValue);
75
    t.true(middleware1SpyCall.args[0].prototype === undefined);
76
77
    const middleware2SpyCall = middleware2.getCall(0);
78
    t.true(middleware2SpyCall.args.length === 1);
79
    t.true(middleware2SpyCall.args[0] instanceof Function);
80
    t.falsy(middleware2SpyCall.thisValue);
81
    t.true(middleware2SpyCall.args[0].prototype === undefined);
82
});