@@ -80,6 +80,7 @@ class TokenMigrationActivityTest {
8080 private lateinit var mockRestClient: RestClient
8181 private lateinit var mockUser: UserAccount
8282 private lateinit var mockClientManager: com.salesforce.androidsdk.rest.ClientManager
83+ private lateinit var realSdkManager: SalesforceSDKManager
8384 private lateinit var savedFactory: ViewModelProvider .Factory
8485 private var savedAppAttestationClient: AppAttestationClient ? = null
8586
@@ -112,20 +113,20 @@ class TokenMigrationActivityTest {
112113 mockUserAccountManager.getUserFromOrgAndUserId(INVALID_ORG , INVALID_USER )
113114 } returns null
114115
115- // Get the REAL SalesforceSDKManager instance and save properties
116- val realSdkManager = SalesforceSDKManager .getInstance()
116+ // Get the REAL SalesforceSDKManager instance and save reference + properties
117+ realSdkManager = SalesforceSDKManager .getInstance()
117118 savedFactory = realSdkManager.loginViewModelFactory
118119 savedAppAttestationClient = realSdkManager.appAttestationClient
119120
121+ // CRITICAL: Set appAttestationClient to null on the REAL instance to prevent blocking network calls
122+ // This must be done before creating the spy to ensure the spy sees the null value
123+ realSdkManager.appAttestationClient = null
124+
120125 // Mock only the clientManager on the real instance using spyk
121126 val sdkManagerSpy = spyk(realSdkManager)
122127 every { sdkManagerSpy.clientManager } returns mockClientManager
123128 every { mockClientManager.peekRestClient(any<UserAccount >()) } returns mockRestClient
124129
125- // CRITICAL: Set appAttestationClient to null to prevent blocking network calls
126- // in LoginViewModel.getAuthorizationUrl() and OAuth2.makeTokenEndpointRequest()
127- every { sdkManagerSpy.appAttestationClient } returns null
128-
129130 // Replace getInstance() to return our spy instead of completely mocking the object
130131 mockkStatic(SalesforceSDKManager ::class )
131132 every { SalesforceSDKManager .getInstance() } returns sdkManagerSpy
@@ -143,14 +144,12 @@ class TokenMigrationActivityTest {
143144
144145 @After
145146 fun tearDown () {
146- // Restore the loginViewModelFactory and appAttestationClient on the real instance before unmocking
147- try {
148- val realSdkManager = SalesforceSDKManager .getInstance()
149- realSdkManager.loginViewModelFactory = savedFactory
150- realSdkManager.appAttestationClient = savedAppAttestationClient
151- } catch (e: Exception ) {
152- // If getInstance() is still mocked, this will fail - unmockkAll will clean it up
153- }
147+ // Restore the loginViewModelFactory and appAttestationClient on the REAL instance (not via getInstance())
148+ // This must be done before unmockkAll() so we have the reference
149+ realSdkManager.loginViewModelFactory = savedFactory
150+ realSdkManager.appAttestationClient = savedAppAttestationClient
151+
152+ // Clean up all mocks
154153 unmockkAll()
155154 }
156155
0 commit comments