Skip to content

Commit 095f007

Browse files
@W-20161958: [MSDK 13.1][Android] Cannot login GUS using Welcome endpoint (loginActivity_startBrowserCustomTabAuthorization Tests)
1 parent c896421 commit 095f007

3 files changed

Lines changed: 103 additions & 13 deletions

File tree

libs/SalesforceSDK/src/com/salesforce/androidsdk/ui/LoginActivity.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,21 +1079,27 @@ open class LoginActivity : FragmentActivity() {
10791079
* Starts a browser custom tab for the OAuth authorization URL according to
10801080
* the authentication configuration. The activity only takes action when
10811081
* browser-based authentication requires a browser custom tab to be started.
1082-
* @param sdkManager The Salesforce SDK Manager with the selected login
1083-
* server's authentication configuration
10841082
* @param authorizationUrl The selected login server's OAuth authorization
10851083
* URL
10861084
* @param activityResultLauncher The activity result launcher to use when
1087-
* browser-based authentication requires a browser custom tab.
1085+
* browser-based authentication requires a browser custom tab
1086+
* @param isBrowserLoginEnabled Indicates if browser-based authentication is
1087+
* enabled
1088+
* @param isUsingFrontDoorBridge Indicates if a UI bridge API front door
1089+
* bridge URL is in use
1090+
* @param singleServerCustomTabActivity Indicates single server custom
1091+
* browser tab authentication is active
10881092
*/
10891093
@VisibleForTesting
10901094
internal open fun startBrowserCustomTabAuthorization(
1091-
sdkManager: SalesforceSDKManager,
10921095
authorizationUrl: String,
10931096
activityResultLauncher: ActivityResultLauncher<Intent>,
1097+
isBrowserLoginEnabled: Boolean = SalesforceSDKManager.getInstance().isBrowserLoginEnabled,
1098+
isUsingFrontDoorBridge: Boolean = viewModel.isUsingFrontDoorBridge,
1099+
singleServerCustomTabActivity: Boolean = viewModel.singleServerCustomTabActivity,
10941100
) {
10951101
// Load the authorization URL in a browser custom tab if required and do nothing otherwise as the view model will load it in the web view.
1096-
if ((viewModel.singleServerCustomTabActivity || sdkManager.isBrowserLoginEnabled) && !viewModel.isUsingFrontDoorBridge /* UI front-door bridge bypasses the need for browser custom tab */) {
1102+
if ((singleServerCustomTabActivity || isBrowserLoginEnabled) && !isUsingFrontDoorBridge /* UI front-door bridge bypasses the need for browser custom tab */) {
10971103
loadLoginPageInCustomTab(authorizationUrl, activityResultLauncher)
10981104
}
10991105
}
@@ -1575,9 +1581,9 @@ open class LoginActivity : FragmentActivity() {
15751581
}
15761582

15771583
activity.startBrowserCustomTabAuthorization(
1578-
sdkManager = SalesforceSDKManager.getInstance(),
15791584
authorizationUrl = value,
1580-
activityResultLauncher = activity.customTabLauncher ?: return
1585+
activityResultLauncher = activity.customTabLauncher ?: return,
1586+
isBrowserLoginEnabled = SalesforceSDKManager.getInstance().isBrowserLoginEnabled,
15811587
)
15821588
}
15831589
}

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

Lines changed: 90 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ package com.salesforce.androidsdk.ui
2929
import android.content.Intent
3030
import android.net.Uri.parse
3131
import android.webkit.WebView
32+
import androidx.activity.result.ActivityResultLauncher
3233
import androidx.core.net.toUri
3334
import androidx.lifecycle.Lifecycle.State.RESUMED
3435
import androidx.lifecycle.Lifecycle.State.STARTED
@@ -40,6 +41,9 @@ import com.salesforce.androidsdk.config.LoginServerManager.PRODUCTION_LOGIN_URL
4041
import com.salesforce.androidsdk.config.LoginServerManager.WELCOME_LOGIN_URL
4142
import com.salesforce.androidsdk.ui.LoginActivity.Companion.EXTRA_KEY_LOGIN_HINT
4243
import com.salesforce.androidsdk.ui.LoginActivity.Companion.EXTRA_KEY_LOGIN_HOST
44+
import io.mockk.every
45+
import io.mockk.mockk
46+
import io.mockk.verify
4347
import org.junit.Assert.assertEquals
4448
import org.junit.Assert.assertFalse
4549
import org.junit.Assert.assertTrue
@@ -245,7 +249,7 @@ class LoginActivityScenarioTest {
245249
// region Salesforce Welcome Discovery
246250

247251
@Test
248-
fun loginActivity_startsWscDiscovery_onCreateWithSelectedServer() {
252+
fun loginActivity_startBrowserCustomTabAuthorization_launchesActivityResultLauncherWhenIsBrowserLoginEnabled() {
249253

250254
val activityScenario = launch<LoginActivity>(
251255
Intent(
@@ -256,11 +260,72 @@ class LoginActivityScenarioTest {
256260

257261
activityScenario.onActivity { activity ->
258262

259-
activity.viewModel.previousPendingLoginServer = PRODUCTION_LOGIN_URL
260-
assertTrue(activity.switchDefaultOrSalesforceWelcomeDiscoveryLogin(WELCOME_LOGIN_URL.toUri()))
263+
val sdkManager = mockk<SalesforceSDKManager>()
264+
every { sdkManager.isBrowserLoginEnabled } returns true
265+
val activityResultLauncher = mockk<ActivityResultLauncher<Intent>>()
261266

262-
activity.viewModel.previousPendingLoginServer = WELCOME_LOGIN_URL
263-
assertTrue(activity.switchDefaultOrSalesforceWelcomeDiscoveryLogin(PRODUCTION_LOGIN_URL.toUri()))
267+
activity.startBrowserCustomTabAuthorization(
268+
authorizationUrl = "_authorization_url_",
269+
activityResultLauncher = activityResultLauncher,
270+
isBrowserLoginEnabled = true,
271+
isUsingFrontDoorBridge = false,
272+
singleServerCustomTabActivity = false,
273+
)
274+
verify(exactly = 1) { activityResultLauncher.launch(any()) }
275+
}
276+
}
277+
278+
@Test
279+
fun loginActivity_startBrowserCustomTabAuthorization_launchesActivityResultLauncherWhenSingleServerCustomTabActivity() {
280+
281+
val activityScenario = launch<LoginActivity>(
282+
Intent(
283+
getApplicationContext(),
284+
LoginActivity::class.java
285+
)
286+
)
287+
288+
activityScenario.onActivity { activity ->
289+
290+
val sdkManager = mockk<SalesforceSDKManager>()
291+
every { sdkManager.isBrowserLoginEnabled } returns true
292+
val activityResultLauncher = mockk<ActivityResultLauncher<Intent>>()
293+
294+
activity.startBrowserCustomTabAuthorization(
295+
authorizationUrl = "_authorization_url_",
296+
activityResultLauncher = activityResultLauncher,
297+
isBrowserLoginEnabled = false,
298+
isUsingFrontDoorBridge = false,
299+
singleServerCustomTabActivity = true,
300+
)
301+
verify(exactly = 1) { activityResultLauncher.launch(any()) }
302+
}
303+
}
304+
305+
@Test
306+
fun loginActivity_startBrowserCustomTabAuthorization_returnsActivityResultLauncherWhenIsUsingFrontDoorBridge() {
307+
308+
val activityScenario = launch<LoginActivity>(
309+
Intent(
310+
getApplicationContext(),
311+
LoginActivity::class.java
312+
)
313+
)
314+
315+
activityScenario.onActivity { activity ->
316+
317+
val sdkManager = mockk<SalesforceSDKManager>()
318+
every { sdkManager.isBrowserLoginEnabled } returns true
319+
val activityResultLauncher = mockk<ActivityResultLauncher<Intent>>()
320+
321+
activity.startBrowserCustomTabAuthorization(
322+
authorizationUrl = "_authorization_url_",
323+
activityResultLauncher = activityResultLauncher,
324+
isBrowserLoginEnabled = true,
325+
isUsingFrontDoorBridge = true,
326+
singleServerCustomTabActivity = true,
327+
)
328+
verify(exactly = 0) { activityResultLauncher.launch(any()) }
264329
}
265330
}
266331

@@ -280,4 +345,24 @@ class LoginActivityScenarioTest {
280345
assertTrue(activity.displayWelcomeUnsupportedToastIfNeeded(false))
281346
}
282347
}
348+
349+
@Test
350+
fun loginActivity_startsWscDiscovery_onCreateWithSelectedServer() {
351+
352+
val activityScenario = launch<LoginActivity>(
353+
Intent(
354+
getApplicationContext(),
355+
LoginActivity::class.java
356+
)
357+
)
358+
359+
activityScenario.onActivity { activity ->
360+
361+
activity.viewModel.previousPendingLoginServer = PRODUCTION_LOGIN_URL
362+
assertTrue(activity.switchDefaultOrSalesforceWelcomeDiscoveryLogin(WELCOME_LOGIN_URL.toUri()))
363+
364+
activity.viewModel.previousPendingLoginServer = WELCOME_LOGIN_URL
365+
assertTrue(activity.switchDefaultOrSalesforceWelcomeDiscoveryLogin(PRODUCTION_LOGIN_URL.toUri()))
366+
}
367+
}
283368
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ class LoginActivityTest {
111111
observer.onChanged(exampleUrl)
112112
verify(exactly = -1) {
113113
activity.startBrowserCustomTabAuthorization(
114-
match { it == SalesforceSDKManager.getInstance() },
115114
match { it == exampleUrl },
116115
match { it == activityResultLauncher }
117116
)

0 commit comments

Comments
 (0)