@@ -140,4 +140,66 @@ describe('Test useFunnel react-navigation-native router', () => {
140
140
expect ( screen . queryByText ( 'B title : replace-test' ) ) . toBeNull ( ) ;
141
141
expect ( screen . queryByText ( 'A : Go B' ) ) . not . toBeNull ( ) ;
142
142
} ) ;
143
+
144
+ test ( 'The overlay should work even if there is no history' , async ( ) => {
145
+ function NoHistoryOverlayTest ( ) {
146
+ const funnel = useFunnel < {
147
+ A : { id ?: string } ;
148
+ Overlay : { } ;
149
+ } > ( {
150
+ id : 'first-history-overlay-test' ,
151
+ initial : {
152
+ step : 'A' ,
153
+ context : { } ,
154
+ } ,
155
+ } ) ;
156
+ return (
157
+ < funnel . Render
158
+ A = { ( { history } ) => (
159
+ < View >
160
+ < Button title = "A : Go Overlay" onPress = { ( ) => history . push ( 'Overlay' ) } />
161
+ </ View >
162
+ ) }
163
+ Overlay = { funnel . Render . overlay ( {
164
+ render ( { close } ) {
165
+ return (
166
+ < View >
167
+ < Text > Overlay : title</ Text >
168
+ < Button title = "Overlay : Close Overlay" onPress = { ( ) => close ( ) } />
169
+ </ View >
170
+ ) ;
171
+ } ,
172
+ } ) }
173
+ />
174
+ ) ;
175
+ }
176
+
177
+ const navigationRef = createNavigationContainerRef ( ) ;
178
+
179
+ render (
180
+ < NavigationContainer ref = { navigationRef } >
181
+ < Stack . Navigator >
182
+ < Stack . Screen name = "Home" component = { NoHistoryOverlayTest } />
183
+ </ Stack . Navigator >
184
+ </ NavigationContainer > ,
185
+ ) ;
186
+
187
+ const user = userEvent . setup ( ) ;
188
+
189
+ // The first screen is "A"
190
+ expect ( screen . queryByText ( 'A : Go Overlay' ) ) . not . toBeNull ( ) ;
191
+
192
+ // When the user presses the "A : Go Overlay" button
193
+ await user . press ( screen . getByText ( 'A : Go Overlay' ) ) ;
194
+
195
+ // The screen should be "Overlay"
196
+ expect ( screen . queryByText ( 'Overlay : title' ) ) . not . toBeNull ( ) ;
197
+
198
+ // When the user presses the "Overlay : Close Overlay" button
199
+ await user . press ( screen . getByText ( 'Overlay : Close Overlay' ) ) ;
200
+
201
+ // The screen should be "A", overlay is closed
202
+ expect ( screen . queryByText ( 'Overlay : title' ) ) . toBeNull ( ) ;
203
+ expect ( screen . queryByText ( 'A : Go Overlay' ) ) . not . toBeNull ( ) ;
204
+ } ) ;
143
205
} ) ;
0 commit comments