@@ -19,13 +19,129 @@ describe('Redux enhancer', () => {
1919 expect ( window . store ) . toBeA ( 'object' ) ;
2020 } ) ;
2121 expect ( message . type ) . toBe ( 'INIT_INSTANCE' ) ;
22+ expect ( window . store . getState ( ) ) . toBe ( 0 ) ;
2223 } ) ;
2324
24- it ( 'should perform actions' , ( ) => {
25- expect ( window . store . getState ( ) ) . toBe ( 0 ) ;
26- window . store . dispatch ( { type : 'INCREMENT' } ) ;
27- expect ( window . store . getState ( ) ) . toBe ( 1 ) ;
28- window . store . dispatch ( { type : 'INCREMENT' } ) ;
25+ it ( 'should start monitoring' , async ( ) => {
26+ let message = await listenMessage ( ( ) => {
27+ window . postMessage ( { type : 'START' , source : '@devtools-extension' } , '*' ) ;
28+ } ) ;
29+ expect ( message . type ) . toBe ( 'START' ) ;
30+
31+ message = await listenMessage ( ) ;
32+ expect ( message . type ) . toBe ( 'STATE' ) ;
33+ expect ( message . payload . actionsById [ 0 ] . action . type ) . toBe ( '@@INIT' ) ;
34+ expect ( message . payload . computedStates [ 0 ] . state ) . toBe ( 0 ) ;
35+ } ) ;
36+
37+ it ( 'should perform actions' , async ( ) => {
38+ let message = await listenMessage ( ( ) => {
39+ window . store . dispatch ( { type : 'INCREMENT' } ) ;
40+ expect ( window . store . getState ( ) ) . toBe ( 1 ) ;
41+ } ) ;
42+ expect ( message . type ) . toBe ( 'ACTION' ) ;
43+ expect ( message . action . action . type ) . toBe ( 'INCREMENT' ) ;
44+ expect ( message . payload ) . toBe ( 1 ) ;
45+
46+ message = await listenMessage ( ( ) => {
47+ window . store . dispatch ( { type : 'INCREMENT' } ) ;
48+ expect ( window . store . getState ( ) ) . toBe ( 2 ) ;
49+ } ) ;
50+ expect ( message . type ) . toBe ( 'ACTION' ) ;
51+ expect ( message . action . action . type ) . toBe ( 'INCREMENT' ) ;
52+ expect ( message . payload ) . toBe ( 2 ) ;
53+ } ) ;
54+
55+ it ( 'should dispatch actions remotely' , async ( ) => {
56+ let message = await listenMessage ( ( ) => {
57+ window . postMessage ( {
58+ type : 'ACTION' ,
59+ payload : { type : 'INCREMENT' } ,
60+ source : '@devtools-extension'
61+ } , '*' ) ;
62+ } ) ;
63+ expect ( message . type ) . toBe ( 'ACTION' ) ;
64+
65+ message = await listenMessage ( ) ;
66+ expect ( message . type ) . toBe ( 'ACTION' ) ;
67+ expect ( message . action . action . type ) . toBe ( 'INCREMENT' ) ;
68+ expect ( message . payload ) . toBe ( 3 ) ;
69+ } ) ;
70+
71+ it ( 'should cancel (toggle) action' , async ( ) => {
72+ let message = await listenMessage ( ( ) => {
73+ window . postMessage ( {
74+ type : 'DISPATCH' ,
75+ payload : { type : 'TOGGLE_ACTION' , id : 1 } ,
76+ source : '@devtools-extension'
77+ } , '*' ) ;
78+ } ) ;
79+ expect ( message . type ) . toBe ( 'DISPATCH' ) ;
80+
81+ message = await listenMessage ( ) ;
82+ expect ( message . type ) . toBe ( 'STATE' ) ;
83+ expect ( message . payload . computedStates [ message . payload . computedStates . length - 1 ] . state ) . toBe ( 2 ) ;
84+ expect ( window . store . getState ( ) ) . toBe ( 2 ) ;
85+
86+ message = await listenMessage ( ( ) => {
87+ window . postMessage ( {
88+ type : 'DISPATCH' ,
89+ payload : { type : 'TOGGLE_ACTION' , id : 1 } ,
90+ source : '@devtools-extension'
91+ } , '*' ) ;
92+ } ) ;
93+ expect ( message . type ) . toBe ( 'DISPATCH' ) ;
94+
95+ message = await listenMessage ( ) ;
96+ expect ( message . type ) . toBe ( 'STATE' ) ;
97+ expect ( window . store . getState ( ) ) . toBe ( 3 ) ;
98+ } ) ;
99+
100+ it ( 'should move back and forward (time travel)' , async ( ) => {
101+ let message = await listenMessage ( ( ) => {
102+ window . postMessage ( {
103+ type : 'DISPATCH' ,
104+ payload : { type : 'JUMP_TO_STATE' , index : 2 } ,
105+ source : '@devtools-extension'
106+ } , '*' ) ;
107+ } ) ;
108+ expect ( message . type ) . toBe ( 'DISPATCH' ) ;
109+ expect ( window . store . getState ( ) ) . toBe ( 2 ) ;
110+
111+ message = await listenMessage ( ( ) => {
112+ window . postMessage ( {
113+ type : 'DISPATCH' ,
114+ payload : { type : 'JUMP_TO_STATE' , index : 3 } ,
115+ source : '@devtools-extension'
116+ } , '*' ) ;
117+ } ) ;
118+ expect ( message . type ) . toBe ( 'DISPATCH' ) ;
119+ expect ( window . store . getState ( ) ) . toBe ( 3 ) ;
120+ } ) ;
121+
122+ it ( 'should import state history' , async ( ) => {
123+ let message = await listenMessage ( ( ) => {
124+ window . postMessage ( {
125+ type : 'IMPORT' ,
126+ state : JSON . stringify ( {
127+ monitorState : { } ,
128+ actionsById : {
129+ '0' : { type : 'PERFORM_ACTION' , action : { type : '@@INIT' } } ,
130+ '1' : { type : 'PERFORM_ACTION' , action : { type : 'INCREMENT' } } ,
131+ '2' : { type : 'PERFORM_ACTION' , action : { type : 'INCREMENT' } }
132+ } ,
133+ nextActionId : 3 ,
134+ stagedActionIds : [ 0 , 1 , 2 ] ,
135+ skippedActionIds : [ ] ,
136+ currentStateIndex : 2 ,
137+ computedStates : [ { state : 0 } , { state : 1 } , { state : 2 } ]
138+ } ) ,
139+ source : '@devtools-extension'
140+ } , '*' ) ;
141+ } ) ;
142+ expect ( message . type ) . toBe ( 'IMPORT' ) ;
143+ message = await listenMessage ( ) ;
144+ expect ( message . type ) . toBe ( 'STATE' ) ;
29145 expect ( window . store . getState ( ) ) . toBe ( 2 ) ;
30146 } ) ;
31147
0 commit comments