@@ -80,6 +80,46 @@ tape('dispatcher.wrapReducer', function (t) {
80
80
t . end ( )
81
81
} )
82
82
83
+ tape ( 'dispatcher({ verifyAsync })' , function ( t ) {
84
+ const
85
+ invalid = [ 'new' , 'yeah' ] , valid = [ 'what' , 'up' ] ,
86
+ verifyAsync = ( callback , action , getHistory ) => {
87
+ t . ok ( Array . isArray ( getHistory ( ) ) , 'getHistory() returns an array' )
88
+
89
+ setTimeout ( ( ) => {
90
+ // payloads containing 'e' are invalid
91
+ if ( action && action . payload && action . payload . indexOf ( 'e' ) !== - 1 ) {
92
+ t . ok ( invalid . includes ( action . payload ) , 'invalid action is invalid' )
93
+ callback ( false )
94
+ } else {
95
+ t . ok ( action . payload && valid . includes ( action . payload ) , 'valid action is valid' )
96
+ callback ( true )
97
+ }
98
+ } , 5 )
99
+ } ,
100
+ dispatcher = new Dispatcher ( { verifyAsync } ) ,
101
+ dispatch = spy ( ) ,
102
+ wrappedDispatch = dispatcher . wrapDispatch ( dispatch ) ,
103
+ getState = spy ( ( ) => [ ] ) // becomes getHistory, returns array
104
+
105
+ dispatcher . wrapGetState ( getState )
106
+
107
+ wrappedDispatch ( createAction ( invalid [ 0 ] ) )
108
+ wrappedDispatch ( createAction ( invalid [ 1 ] ) )
109
+ wrappedDispatch ( createAction ( valid [ 0 ] ) )
110
+ wrappedDispatch ( createAction ( valid [ 1 ] ) )
111
+
112
+ setTimeout ( ( ) => {
113
+ t . ok ( dispatch . calledTwice , 'called dispatch twice' )
114
+ // first call
115
+ t . equal ( dispatch . getCall ( 0 ) . args [ 0 ] . payload , valid [ 0 ] , 'called dispatch with valid action 1' )
116
+ // second call
117
+ t . equal ( dispatch . getCall ( 1 ) . args [ 0 ] . payload , valid [ 1 ] , 'called dispatch with valid action 2' )
118
+ t . equal ( getState . callCount , 4 , 'getState was called for each getHistory' )
119
+ t . end ( )
120
+ } , 20 )
121
+ } )
122
+
83
123
// dispatcher.applyUpdate - scuttlebutt super, eh
84
124
85
125
// dispatcher.history - scuttlebutt, history(sources) reduces getState of
@@ -89,5 +129,4 @@ tape('dispatcher.wrapReducer', function (t) {
89
129
// other internals)
90
130
91
131
// options.customDispatch (ensure signature)
92
- // options.isGossipType (copy wrapDispatch)
93
- // options.verifyAsync (ensure behaviour)
132
+ // options.isGossipType (copy wrapDispatch, can't be true for redux init)
0 commit comments