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,53 @@ 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 }
101+ store. exhaustivity = . off( showSkippedAssertions: false )
103102
104- #expect( !driver. isLoading)
103+ await store. send ( . linkWithProvider( . github) ) {
104+ $0. activeLoadingProvider = . github
105+ }
106+ await store. receive ( \. loading. begin) {
107+ $0. loading. delayedCountByTarget [ target] = 1
108+ $0. loading. scheduledDelayedTargets = [ target]
109+ }
110+ #expect( linkSpy. providers == [ . github] )
111+ #expect( !store. state. isLoading)
105112
106113 await clock. advance ( by: . milliseconds( 300 ) )
107-
108- await waitUntil {
109- driver. isLoading
114+ await store. receive ( \. loading. delayedLoadingDidBecomeVisible, target) {
115+ $0. loading. scheduledDelayedTargets = [ ]
116+ $0. loading. visibleDelayedTargets = [ target]
117+ $0. loading. visibleTargets = [ target]
118+ $0. loading. isLoading = true
110119 }
111120
112- #expect( driver . isLoading)
113- #expect( driver . activeLoadingProvider == . github)
121+ #expect( store . state . isLoading)
122+ #expect( store . state . activeLoadingProvider == . github)
114123
115124 linkSpy. resume ( )
116-
117- await waitUntil {
118- !driver. isLoading && fetchSpy. executeCallCount == 1
125+ await store. receive ( \. setProviders) {
126+ $0. currentProvider = . google
127+ $0. connectedProviders = [ . github]
128+ $0. disconnectedProviders = [ . apple]
129+ }
130+ await store. receive ( \. loading. end) {
131+ $0. loading. delayedCountByTarget [ target] = 0
132+ $0. loading. visibleDelayedTargets = [ ]
133+ $0. loading. visibleTargets = [ ]
134+ $0. loading. isLoading = false
135+ $0. activeLoadingProvider = nil
119136 }
120137
121- #expect( !driver . isLoading)
138+ #expect( !store . state . isLoading)
122139 }
123140
124141 @Test ( " 인증 제공자 조회에 실패하면 공통 에러 알림을 표시한다 " )
@@ -253,19 +270,14 @@ private struct AccountTestDriver {
253270 feature. state. isLoading
254271 }
255272
256- var activeLoadingProvider : AuthProvider ? {
257- feature. state. activeLoadingProvider
258- }
259-
260273 var alert : AlertState < Never > ? {
261274 feature. state. alert
262275 }
263276
264277 init (
265278 fetchUseCase: FetchAuthProvidersUseCase = FetchAuthProvidersUseCaseSpy ( ) ,
266279 linkUseCase: LinkAuthProviderUseCase = LinkAuthProviderUseCaseSpy ( ) ,
267- unlinkUseCase: UnlinkAuthProviderUseCase = UnlinkAuthProviderUseCaseSpy ( ) ,
268- configureDependencies: ( ( inout DependencyValues ) -> Void ) ? = nil
280+ unlinkUseCase: UnlinkAuthProviderUseCase = UnlinkAuthProviderUseCaseSpy ( )
269281 ) {
270282 feature = Store ( initialState: AccountFeature . State ( ) ) {
271283 AccountFeature ( )
@@ -274,7 +286,6 @@ private struct AccountTestDriver {
274286 $0. linkAuthProviderUseCase = linkUseCase
275287 $0. unlinkAuthProviderUseCase = unlinkUseCase
276288 $0. continuousClock = ContinuousClock ( )
277- configureDependencies ? ( & $0)
278289 }
279290 }
280291
0 commit comments