@@ -42,4 +42,43 @@ struct AuthStateTests {
4242 #expect( state. currentCredentials == nil )
4343 #expect( state. lastError == refreshError)
4444 }
45+
46+ @Test
47+ func checkStatusKeepsAuthenticatedStateWhenRefreshNetworkFails( ) async throws {
48+ let storage = MockTokenStorage ( )
49+ let service = AuthService ( storage: storage)
50+ let provider = MockAuthProvider ( id: " openai " , name: " OpenAI " )
51+ await service. register ( provider)
52+
53+ try await storage. save (
54+ credentials: Credentials (
55+ accessToken: " valid " ,
56+ refreshToken: " rt " ,
57+ expiresAt: Date ( ) . addingTimeInterval ( 3600 )
58+ ) ,
59+ for: " openai "
60+ )
61+
62+ let state = AuthState ( service: service, providerId: " openai " )
63+ await state. checkStatus ( )
64+ #expect( state. isAuthenticated)
65+ #expect( state. currentCredentials? . accessToken == " valid " )
66+
67+ let refreshError = AuthError . networkError ( " offline " )
68+ await provider. setShouldThrowOnRefresh ( refreshError)
69+ try await storage. save (
70+ credentials: Credentials (
71+ accessToken: " expired " ,
72+ refreshToken: " rt " ,
73+ expiresAt: Date ( ) . addingTimeInterval ( - 100 )
74+ ) ,
75+ for: " openai "
76+ )
77+
78+ await state. checkStatus ( )
79+
80+ #expect( state. isAuthenticated)
81+ #expect( state. currentCredentials? . accessToken == " valid " )
82+ #expect( state. lastError == refreshError)
83+ }
4584}
0 commit comments