Skip to content

Commit 68cfc80

Browse files
committed
Fixing test broken by recent changes / Adding tests checking WD feature flag in user agent
1 parent 20b609f commit 68cfc80

2 files changed

Lines changed: 85 additions & 3 deletions

File tree

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,20 +199,22 @@ open class LoginActivity : FragmentActivity() {
199199
webViewClient = this@LoginActivity.webViewClient
200200
webChromeClient = this@LoginActivity.webChromeClient
201201
setBackgroundColor(Color.Transparent.toArgb())
202+
this@LoginActivity.baseUserAgentString = settings.userAgentString ?: ""
202203
settings.apply {
203204
domStorageEnabled = true /* Salesforce Welcome Discovery requires this */
204205
@SuppressLint("SetJavaScriptEnabled")
205206
javaScriptEnabled = true
206207
userAgentString = format(
207208
"%s %s",
208209
SalesforceSDKManager.getInstance().userAgent,
209-
userAgentString ?: "",
210+
this@LoginActivity.baseUserAgentString
210211
)
211212
}
212213
}
213214
}
214215

215216
// Private variables
217+
private var baseUserAgentString = "";
216218
private var wasBackgrounded = false
217219
private var accountAuthenticatorResponse: AccountAuthenticatorResponse? = null
218220
private var accountAuthenticatorResult: Bundle? = null
@@ -914,7 +916,11 @@ open class LoginActivity : FragmentActivity() {
914916
}
915917

916918
// Re-apply user agent to WebView
917-
webView.settings.userAgentString = SalesforceSDKManager.getInstance().userAgent
919+
webView.settings.userAgentString = format(
920+
"%s %s",
921+
SalesforceSDKManager.getInstance().userAgent,
922+
baseUserAgentString
923+
)
918924

919925
// Apply the intent extras' Salesforce Welcome Login hint and host for use in the OAuth authorize URL, if applicable.
920926
applySalesforceWelcomeLoginHintAndHost(intent)
@@ -953,7 +959,7 @@ open class LoginActivity : FragmentActivity() {
953959
*/
954960
private fun isLoginWithWelcomeDiscovery(intent: Intent): Boolean {
955961
val isWelcomeDiscoveryUrl = intent.data?.let { isSalesforceWelcomeDiscoveryMobileUrl(it) } == true
956-
val hasLoginHint = intent.getStringExtra(EXTRA_KEY_LOGIN_HINT) != null
962+
val hasLoginHint = intent.getStringExtra(EXTRA_KEY_LOGIN_HOST) != null
957963
return isWelcomeDiscoveryUrl || hasLoginHint
958964
}
959965

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

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import androidx.lifecycle.Lifecycle.State.STARTED
3636
import androidx.test.core.app.ActivityScenario.launch
3737
import androidx.test.core.app.ApplicationProvider.getApplicationContext
3838
import androidx.test.ext.junit.runners.AndroidJUnit4
39+
import com.salesforce.androidsdk.app.Features
3940
import com.salesforce.androidsdk.app.SalesforceSDKManager
4041
import com.salesforce.androidsdk.config.LoginServerManager.PRODUCTION_LOGIN_URL
4142
import com.salesforce.androidsdk.config.LoginServerManager.WELCOME_LOGIN_URL
@@ -46,6 +47,7 @@ import io.mockk.mockk
4647
import io.mockk.verify
4748
import org.junit.Assert.assertEquals
4849
import org.junit.Assert.assertFalse
50+
import org.junit.Assert.assertNotNull
4951
import org.junit.Assert.assertTrue
5052
import org.junit.Test
5153
import org.junit.runner.RunWith
@@ -375,4 +377,78 @@ class LoginActivityScenarioTest {
375377
assertTrue(activity.switchDefaultOrSalesforceWelcomeDiscoveryLogin(PRODUCTION_LOGIN_URL.toUri()))
376378
}
377379
}
380+
381+
@Test
382+
fun userAgent_hasWelcomeDiscoveryFlag_withWelcomeDiscoveryLoginServer() {
383+
val uri = "https://welcome.salesforce.com/discovery?client_id=aaa&callback_url=bbb&client_version=ccc".toUri()
384+
385+
launch<LoginActivity>(
386+
Intent(
387+
getApplicationContext(),
388+
LoginActivity::class.java
389+
).apply {
390+
data = uri
391+
}).use { activityScenario ->
392+
393+
activityScenario.onActivity { activity ->
394+
val userAgentString = activity.webView.settings.userAgentString
395+
val featureFlags = extractFeatureFlags(userAgentString)
396+
assertTrue(
397+
"WD (Welcome Discovery) should be present in $userAgentString",
398+
featureFlags.contains(Features.FEATURE_WELCOME_DISCOVERY_LOGIN)
399+
)
400+
}
401+
}
402+
}
403+
404+
@Test
405+
fun userAgent_hasWelcomeDiscoveryFlag_withLoginHostHint() {
406+
launch<LoginActivity>(
407+
Intent(
408+
getApplicationContext(),
409+
LoginActivity::class.java
410+
).apply {
411+
putExtra(EXTRA_KEY_LOGIN_HOST, "mobilesdk.my.salesforce.com")
412+
}).use { activityScenario ->
413+
414+
activityScenario.onActivity { activity ->
415+
val userAgentString = activity.webView.settings.userAgentString
416+
val featureFlags = extractFeatureFlags(userAgentString)
417+
assertTrue(
418+
"WD (Welcome Discovery) should be present in $userAgentString",
419+
featureFlags.contains(Features.FEATURE_WELCOME_DISCOVERY_LOGIN)
420+
)
421+
}
422+
}
423+
}
424+
425+
@Test
426+
fun userAgent_doesNotHaveWelcomeDiscoveryFlag_withMyDomainLoginServer() {
427+
val uri = "https://mobilesdk.my.salesforce.com".toUri()
428+
429+
launch<LoginActivity>(
430+
Intent(
431+
getApplicationContext(),
432+
LoginActivity::class.java
433+
).apply {
434+
data = uri
435+
}).use { activityScenario ->
436+
437+
activityScenario.onActivity { activity ->
438+
val userAgentString = activity.webView.settings.userAgentString
439+
val featureFlags = extractFeatureFlags(userAgentString)
440+
assertFalse(
441+
"WD (Welcome Discovery) should NOT be present in $userAgentString",
442+
featureFlags.contains(Features.FEATURE_WELCOME_DISCOVERY_LOGIN)
443+
)
444+
}
445+
}
446+
}
447+
448+
fun extractFeatureFlags(userAgentString: String): List<String> {
449+
val ftrMatch = Regex("ftr_([^\\s]*)").find(userAgentString)
450+
assertNotNull("User agent should contain ftr_ field: $userAgentString", ftrMatch)
451+
val ftrValue = ftrMatch!!.groupValues[1]
452+
return ftrValue.split(".")
453+
}
378454
}

0 commit comments

Comments
 (0)