@@ -24,6 +24,8 @@ protocol RootStateDriving {
2424 func didLogined( _ signIn: Bool ) async
2525 func presentTodoDetail( _ todoId: String ) async
2626 func dismissSheet( ) async
27+ func selectMainTab( _ tab: MainTab ) async
28+ func openWidgetRoute( _ tab: MainTab ) async
2729}
2830
2931struct RootStateSnapshot : Equatable {
@@ -32,6 +34,7 @@ struct RootStateSnapshot: Equatable {
3234 let isNetworkConnected : Bool
3335 let signIn : Bool ?
3436 let theme : SystemTheme
37+ let selectedMainTab : MainTab
3538}
3639
3740@MainActor
@@ -44,7 +47,8 @@ struct RootStoreTestAdapter: RootStateDriving {
4447 alertMessage: store. state. alert? . message. map { String ( state: $0) } ,
4548 isNetworkConnected: store. state. isNetworkConnected,
4649 signIn: store. state. signIn,
47- theme: store. state. theme
50+ theme: store. state. theme,
51+ selectedMainTab: store. state. selectedMainTab
4852 )
4953 }
5054 var sheetTodoId : String ? { store. state. sheet? . todoId }
@@ -107,6 +111,14 @@ struct RootStoreTestAdapter: RootStateDriving {
107111 await store. send ( . sheet( . dismiss) )
108112 }
109113
114+ func selectMainTab( _ tab: MainTab ) async {
115+ await store. send ( . binding( . set( \. selectedMainTab, tab) ) )
116+ }
117+
118+ func openWidgetRoute( _ tab: MainTab ) async {
119+ await store. send ( . view( . openWidgetRoute( tab) ) )
120+ }
121+
110122 private func drainReceivedActions( ) async {
111123 for _ in 0 ..< 8 {
112124 await store. skipReceivedActions ( strict: false )
@@ -125,7 +137,8 @@ func verifyNetworkDisconnectedAlert(adapter: some RootStateDriving) async {
125137 alertMessage: String ( localized: " root_network_disconnected_message " ) ,
126138 isNetworkConnected: false ,
127139 signIn: nil ,
128- theme: . automatic
140+ theme: . automatic,
141+ selectedMainTab: . home
129142 )
130143 )
131144}
@@ -142,7 +155,8 @@ func verifySetAlert(adapter: some RootStateDriving) async {
142155 alertMessage: nil ,
143156 isNetworkConnected: false ,
144157 signIn: nil ,
145- theme: . automatic
158+ theme: . automatic,
159+ selectedMainTab: . home
146160 )
147161 )
148162}
@@ -153,6 +167,7 @@ func verifyThemeUpdate(adapter: some RootStateDriving) async {
153167
154168 #expect( adapter. snapshot. theme == . dark)
155169 #expect( adapter. snapshot. alertTitle == nil )
170+ #expect( adapter. snapshot. selectedMainTab == . home)
156171}
157172
158173@MainActor
@@ -166,6 +181,7 @@ func verifyDidLoginedFalse(
166181 }
167182
168183 #expect( adapter. snapshot. signIn == false )
184+ #expect( adapter. snapshot. selectedMainTab == . home)
169185 #expect( trackAnalyticsEventUseCaseSpy. screenNames == [ " login " ] )
170186}
171187
@@ -174,9 +190,11 @@ func verifyDidLoginedTrue(
174190 adapter: some RootStateDriving ,
175191 trackAnalyticsEventUseCaseSpy: RootTrackAnalyticsEventUseCaseSpy
176192) async {
193+ await adapter. selectMainTab ( . today)
177194 await adapter. didLogined ( true )
178195
179196 #expect( adapter. snapshot. signIn == true )
197+ #expect( adapter. snapshot. selectedMainTab == . home)
180198 #expect( trackAnalyticsEventUseCaseSpy. screenNames. isEmpty)
181199}
182200
@@ -198,7 +216,8 @@ func verifyObservedInitialValues(adapter: some RootStateDriving) async {
198216 alertMessage: String ( localized: " root_network_disconnected_message " ) ,
199217 isNetworkConnected: false ,
200218 signIn: false ,
201- theme: . dark
219+ theme: . dark,
220+ selectedMainTab: . home
202221 )
203222 )
204223}
@@ -212,6 +231,16 @@ func verifyTodoDetailSheetPresentation(adapter: some RootStateDriving) async {
212231 #expect( adapter. sheetTodoId == nil )
213232}
214233
234+ @MainActor
235+ func verifyWidgetRouteOpensWhenSignedIn( adapter: some RootStateDriving ) async {
236+ await adapter. openWidgetRoute ( . today)
237+ #expect( adapter. snapshot. selectedMainTab == . home)
238+
239+ await adapter. didLogined ( true )
240+ await adapter. openWidgetRoute ( . today)
241+ #expect( adapter. snapshot. selectedMainTab == . today)
242+ }
243+
215244final class ObserveAuthSessionUseCaseSpy : ObserveAuthSessionUseCase {
216245 let subject : CurrentValueSubject < Bool , Never >
217246 private( set) var observeCallCount = 0
0 commit comments