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+ } ) ;
0 commit comments