@@ -44,12 +44,135 @@ describe('Api.prototype.open : ', () => {
44
44
const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
45
45
Object . assign ( obj , {
46
46
_addTab : jest . fn ( ( ) => ( { id : '2' } ) ) ,
47
- _getOnChangePromise : jest . fn ( ( ) => Promise ) ,
47
+ _getFlushEffectsPromise : jest . fn ( ( ) => Promise ) ,
48
48
_open : jest . fn ( ( ) => { } )
49
49
} ) ;
50
50
obj . open ( { id : '2' } ) ;
51
51
expect ( obj . _addTab . mock . calls . length === 1 ) . toBe ( true ) ;
52
- expect ( obj . _addTab ) . toHaveBeenCalledBefore ( obj . _getOnChangePromise ) ;
53
- expect ( obj . _getOnChangePromise ) . toHaveBeenCalledBefore ( obj . _open ) ;
52
+ expect ( obj . _addTab ) . toHaveBeenCalledBefore ( obj . _getFlushEffectsPromise ) ;
53
+ expect ( obj . _getFlushEffectsPromise ) . toHaveBeenCalledBefore ( obj . _open ) ;
54
+ } ) ;
55
+ } ) ;
56
+ describe ( 'Api.prototype.close : ' , ( ) => {
57
+ test ( 'it throws an error if is called with undefined id parameter' , ( ) => {
58
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
59
+ expect . assertions ( 2 ) ;
60
+ try {
61
+ obj . close ( ) ;
62
+ } catch ( er ) {
63
+ expect ( 1 === 1 ) . toBe ( true ) ;
64
+ }
65
+ try {
66
+ obj . close ( undefined ) ;
67
+ } catch ( er ) {
68
+ expect ( 1 === 1 ) . toBe ( true ) ;
69
+ }
70
+ } ) ;
71
+ test ( 'it should call select function internally if switch parameter was true and tab was already opended and selected' , ( ) => {
72
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
73
+ expect . assertions ( 3 ) ;
74
+ Object . assign ( obj , {
75
+ __close : jest . fn ( ( ) => { return Promise . resolve ( { currentData : { } , instance : { } } ) } ) ,
76
+ select : jest . fn ( ( ) => Promise ) ,
77
+ isOpen : jest . fn ( ( ) => true ) ,
78
+ stateRef : { openTabIDs : [ '1' , '2' ] , selectedTabID : '2' } ,
79
+ _findTabIdForSwitching : jest . fn ( ( ) => '1' ) ,
80
+ isSelected : jest . fn ( ( ) => true )
81
+ } ) ;
82
+ return obj . close ( '2' , true ) . then ( result => {
83
+ expect ( result . hasOwnProperty ( 'currentData' ) && result . hasOwnProperty ( 'instance' ) ) . toBe ( true ) ;
84
+ expect ( obj . __close . mock . calls . length === 1 ) . toBe ( true ) ;
85
+ expect ( obj . select ) . toHaveBeenCalledBefore ( obj . __close ) ;
86
+ } ) ;
87
+ } ) ;
88
+ test ( 'switch parameter default value is true' , ( ) => {
89
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
90
+ expect . assertions ( 3 ) ;
91
+ Object . assign ( obj , {
92
+ __close : jest . fn ( ( ) => { return Promise . resolve ( { currentData : { } , instance : { } } ) } ) ,
93
+ select : jest . fn ( ( ) => Promise ) ,
94
+ isOpen : jest . fn ( ( ) => true ) ,
95
+ stateRef : { openTabIDs : [ '1' , '2' ] , selectedTabID : '2' } ,
96
+ _findTabIdForSwitching : jest . fn ( ( ) => '1' ) ,
97
+ isSelected : jest . fn ( ( ) => true )
98
+ } ) ;
99
+ return obj . close ( '2' ) . then ( result => {
100
+ expect ( result . hasOwnProperty ( 'currentData' ) && result . hasOwnProperty ( 'instance' ) ) . toBe ( true ) ;
101
+ expect ( obj . __close . mock . calls . length === 1 ) . toBe ( true ) ;
102
+ expect ( obj . select ) . toHaveBeenCalledBefore ( obj . __close ) ;
103
+ } ) ;
104
+ } ) ;
105
+ test ( 'it should not call select function internally if switch parameter was false' , ( ) => {
106
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
107
+ expect . assertions ( 3 ) ;
108
+ Object . assign ( obj , {
109
+ __close : jest . fn ( ( ) => { return Promise . resolve ( { currentData : { } , instance : { } } ) } ) ,
110
+ select : jest . fn ( ( ) => Promise ) ,
111
+ isOpen : jest . fn ( ( ) => true ) ,
112
+ stateRef : { openTabIDs : [ '1' , '2' ] , selectedTabID : '2' } ,
113
+ _findTabIdForSwitching : jest . fn ( ( ) => '1' ) ,
114
+ isSelected : jest . fn ( ( ) => true )
115
+ } ) ;
116
+ return obj . close ( '2' , false ) . then ( result => {
117
+ expect ( result . hasOwnProperty ( 'currentData' ) && result . hasOwnProperty ( 'instance' ) ) . toBe ( true ) ;
118
+ expect ( obj . __close . mock . calls . length === 1 ) . toBe ( true ) ;
119
+ expect ( obj . select . mock . calls . length === 0 ) . toBe ( true ) ;
120
+ } ) ;
121
+ } ) ;
122
+ test ( 'it should not call select function internally if tab was not opened' , ( ) => {
123
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
124
+ expect . assertions ( 3 ) ;
125
+ Object . assign ( obj , {
126
+ __close : jest . fn ( ( ) => { return Promise . resolve ( { currentData : { } , instance : { } } ) } ) ,
127
+ select : jest . fn ( ( ) => Promise ) ,
128
+ isOpen : jest . fn ( ( ) => false ) ,
129
+ stateRef : { openTabIDs : [ '1' , '2' ] , selectedTabID : '2' } ,
130
+ _findTabIdForSwitching : jest . fn ( ( ) => '1' ) ,
131
+ isSelected : jest . fn ( ( ) => true )
132
+ } ) ;
133
+ return obj . close ( '2' , true ) . then ( result => {
134
+ expect ( result . hasOwnProperty ( 'currentData' ) && result . hasOwnProperty ( 'instance' ) ) . toBe ( true ) ;
135
+ expect ( obj . __close . mock . calls . length === 1 ) . toBe ( true ) ;
136
+ expect ( obj . select . mock . calls . length === 0 ) . toBe ( true ) ;
137
+ } ) ;
138
+ } ) ;
139
+ test ( 'it should not call select function internally if tab was not selected' , ( ) => {
140
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
141
+ expect . assertions ( 3 ) ;
142
+ Object . assign ( obj , {
143
+ __close : jest . fn ( ( ) => { return Promise . resolve ( { currentData : { } , instance : { } } ) } ) ,
144
+ select : jest . fn ( ( ) => Promise ) ,
145
+ isOpen : jest . fn ( ( ) => true ) ,
146
+ stateRef : { openTabIDs : [ '1' , '2' ] , selectedTabID : '2' } ,
147
+ _findTabIdForSwitching : jest . fn ( ( ) => '1' ) ,
148
+ isSelected : jest . fn ( ( ) => false )
149
+ } ) ;
150
+ return obj . close ( '2' , true ) . then ( result => {
151
+ expect ( result . hasOwnProperty ( 'currentData' ) && result . hasOwnProperty ( 'instance' ) ) . toBe ( true ) ;
152
+ expect ( obj . __close . mock . calls . length === 1 ) . toBe ( true ) ;
153
+ expect ( obj . select . mock . calls . length === 0 ) . toBe ( true ) ;
154
+ } ) ;
155
+ } ) ;
156
+ test ( 'eventHandlerFactory method calls close function with switching=true if beforeClose callback returned true' , ( ) => {
157
+ const obj = new ( apiConstructor ) ( getDeps , { options : { } } ) ;
158
+ const id = '1' ;
159
+ const e = {
160
+ target : {
161
+ className : 'rc-dyn-tabs-close'
162
+ }
163
+ } ;
164
+ const parentElement = {
165
+ className : 'rc-dyn-tabs-tab' ,
166
+ lastChild : e . target
167
+ } ;
168
+ e . target . parentElement = parentElement ;
169
+ Object . assign ( obj , {
170
+ close : jest . fn ( ( ) => Promise ) ,
171
+ beforeClose : jest . fn ( ( ) => true ) ,
172
+ } ) ;
173
+ obj . eventHandlerFactory ( { id, e } ) ;
174
+ expect ( obj . close . mock . calls . length === 1 ) . toBe ( true ) ;
175
+ expect ( obj . close . mock . calls [ 0 ] [ 0 ] === id ) . toBe ( true ) ;
176
+ expect ( obj . close . mock . calls [ 0 ] [ 1 ] === true ) . toBe ( true ) ;
54
177
} ) ;
55
178
} ) ;
0 commit comments