55// Created by opfic on 6/11/26.
66//
77
8+ // swiftlint:disable file_length
9+
810import Testing
911import ComposableArchitecture
1012import Foundation
@@ -87,38 +89,51 @@ struct AccountFeatureTests {
8789 )
8890 let linkSpy = LinkAuthProviderUseCaseSpy ( )
8991 linkSpy. shouldSuspend = true
90- let driver = AccountTestDriver (
91- fetchUseCase: fetchSpy,
92- linkUseCase: linkSpy,
93- configureDependencies: {
94- $0. continuousClock = clock
95- }
96- )
97-
98- driver. linkWithProvider ( . github)
99-
100- await waitUntil {
101- linkSpy. providers == [ . github]
92+ let target = LoadingFeature . Target. default
93+ let store = TestStore ( initialState: AccountFeature . State ( ) ) {
94+ AccountFeature ( )
95+ } withDependencies: {
96+ $0. fetchAuthProvidersUseCase = fetchSpy
97+ $0. linkAuthProviderUseCase = linkSpy
98+ $0. unlinkAuthProviderUseCase = UnlinkAuthProviderUseCaseSpy ( )
99+ $0. continuousClock = clock
102100 }
103-
104- #expect( !driver. isLoading)
101+ await store. send ( . linkWithProvider( . github) ) {
102+ $0. activeLoadingProvider = . github
103+ }
104+ await store. receive ( \. loading. begin) {
105+ $0. loading. delayedCountByTarget [ target] = 1
106+ $0. loading. scheduledDelayedTargets = [ target]
107+ }
108+ #expect( linkSpy. providers == [ . github] )
109+ #expect( !store. state. isLoading)
105110
106111 await clock. advance ( by: . milliseconds( 300 ) )
107-
108- await waitUntil {
109- driver. isLoading
112+ await store. receive ( \. loading. delayedLoadingDidBecomeVisible, target) {
113+ $0. loading. scheduledDelayedTargets = [ ]
114+ $0. loading. visibleDelayedTargets = [ target]
115+ $0. loading. visibleTargets = [ target]
116+ $0. loading. isLoading = true
110117 }
111118
112- #expect( driver . isLoading)
113- #expect( driver . activeLoadingProvider == . github)
119+ #expect( store . state . isLoading)
120+ #expect( store . state . activeLoadingProvider == . github)
114121
115122 linkSpy. resume ( )
116-
117- await waitUntil {
118- !driver. isLoading && fetchSpy. executeCallCount == 1
123+ await store. receive ( \. setProviders) {
124+ $0. currentProvider = . google
125+ $0. connectedProviders = [ . github]
126+ $0. disconnectedProviders = [ . apple]
127+ }
128+ await store. receive ( \. loading. end) {
129+ $0. loading. delayedCountByTarget [ target] = 0
130+ $0. loading. visibleDelayedTargets = [ ]
131+ $0. loading. visibleTargets = [ ]
132+ $0. loading. isLoading = false
133+ $0. activeLoadingProvider = nil
119134 }
120135
121- #expect( !driver . isLoading)
136+ #expect( !store . state . isLoading)
122137 }
123138
124139 @Test ( " 인증 제공자 조회에 실패하면 공통 에러 알림을 표시한다 " )
@@ -253,19 +268,14 @@ private struct AccountTestDriver {
253268 feature. state. isLoading
254269 }
255270
256- var activeLoadingProvider : AuthProvider ? {
257- feature. state. activeLoadingProvider
258- }
259-
260271 var alert : AlertState < Never > ? {
261272 feature. state. alert
262273 }
263274
264275 init (
265276 fetchUseCase: FetchAuthProvidersUseCase = FetchAuthProvidersUseCaseSpy ( ) ,
266277 linkUseCase: LinkAuthProviderUseCase = LinkAuthProviderUseCaseSpy ( ) ,
267- unlinkUseCase: UnlinkAuthProviderUseCase = UnlinkAuthProviderUseCaseSpy ( ) ,
268- configureDependencies: ( ( inout DependencyValues ) -> Void ) ? = nil
278+ unlinkUseCase: UnlinkAuthProviderUseCase = UnlinkAuthProviderUseCaseSpy ( )
269279 ) {
270280 feature = Store ( initialState: AccountFeature . State ( ) ) {
271281 AccountFeature ( )
@@ -274,7 +284,6 @@ private struct AccountTestDriver {
274284 $0. linkAuthProviderUseCase = linkUseCase
275285 $0. unlinkAuthProviderUseCase = unlinkUseCase
276286 $0. continuousClock = ContinuousClock ( )
277- configureDependencies ? ( & $0)
278287 }
279288 }
280289
0 commit comments