Skip to content

Commit 732a127

Browse files
@W-21933885: [MSDK Android] App Attestation Implementation (Fix TokenMigrationActivityTest tearDown By Using Real SDK Manager Reference)
1 parent 8975f32 commit 732a127

1 file changed

Lines changed: 13 additions & 14 deletions

File tree

libs/test/SalesforceSDKTest/src/com/salesforce/androidsdk/ui/TokenMigrationActivityTest.kt

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)