From b452ec9eb895e27be574680b89526ff99a024585 Mon Sep 17 00:00:00 2001 From: Till Hellmund Date: Thu, 20 Feb 2025 10:27:01 -0500 Subject: [PATCH] Add test rule to force native bank flow --- .../stripe/android/lpm/TestInstantDebits.kt | 10 ++++- .../stripe/android/lpm/TestLinkCardBrand.kt | 8 ++++ .../stripe/android/lpm/TestUSBankAccount.kt | 10 ++++- .../lpm/TestUsBankAccountInCustomerSheet.kt | 10 ++++- .../utils/ForceNativeBankFlowTestRule.kt | 45 +++++++++++++++++++ 5 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 paymentsheet-example/src/androidTest/java/com/stripe/android/utils/ForceNativeBankFlowTestRule.kt diff --git a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestInstantDebits.kt b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestInstantDebits.kt index 53b64316444..dd03241fb10 100644 --- a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestInstantDebits.kt +++ b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestInstantDebits.kt @@ -3,6 +3,7 @@ package com.stripe.android.lpm import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.isEnabled import androidx.compose.ui.test.onAllNodesWithTag +import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.stripe.android.BasePlaygroundTest import com.stripe.android.model.PaymentMethod @@ -21,11 +22,11 @@ import com.stripe.android.test.core.AuthorizeAction import com.stripe.android.test.core.DEFAULT_UI_TIMEOUT import com.stripe.android.test.core.TestParameters import com.stripe.android.test.core.ui.ComposeButton -import org.junit.Ignore +import com.stripe.android.utils.ForceNativeBankFlowTestRule +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -@Ignore("Tests currently failing, ignoring while we work on a fix so we can merge other PRs.") @RunWith(AndroidJUnit4::class) internal class TestInstantDebits : BasePlaygroundTest() { @@ -43,6 +44,11 @@ internal class TestInstantDebits : BasePlaygroundTest() { ).joinToString(",") } + @get:Rule + val forceNativeBankFlowTestRule = ForceNativeBankFlowTestRule( + context = ApplicationProvider.getApplicationContext() + ) + @Test fun testInstantDebitsSuccess() { val params = testParameters.copyPlaygroundSettings { diff --git a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestLinkCardBrand.kt b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestLinkCardBrand.kt index e20a811e347..dec9e255121 100644 --- a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestLinkCardBrand.kt +++ b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestLinkCardBrand.kt @@ -3,6 +3,7 @@ package com.stripe.android.lpm import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.isEnabled import androidx.compose.ui.test.onAllNodesWithTag +import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.stripe.android.BasePlaygroundTest import com.stripe.android.paymentsheet.example.playground.settings.AutomaticPaymentMethodsSettingsDefinition @@ -20,6 +21,8 @@ import com.stripe.android.test.core.AuthorizeAction import com.stripe.android.test.core.DEFAULT_UI_TIMEOUT import com.stripe.android.test.core.TestParameters import com.stripe.android.test.core.ui.ComposeButton +import com.stripe.android.utils.ForceNativeBankFlowTestRule +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -37,6 +40,11 @@ internal class TestLinkCardBrand : BasePlaygroundTest() { settings[SupportedPaymentMethodsSettingsDefinition] = "card" } + @get:Rule + val forceNativeBankFlowTestRule = ForceNativeBankFlowTestRule( + context = ApplicationProvider.getApplicationContext() + ) + @Test fun testLinkCardBrandSuccess() { val params = testParameters.copyPlaygroundSettings { diff --git a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUSBankAccount.kt b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUSBankAccount.kt index da0402be10f..3990eecf5a7 100644 --- a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUSBankAccount.kt +++ b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUSBankAccount.kt @@ -3,6 +3,7 @@ package com.stripe.android.lpm import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.isEnabled import androidx.compose.ui.test.onAllNodesWithTag +import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.stripe.android.BasePlaygroundTest import com.stripe.android.paymentsheet.example.playground.settings.Country @@ -19,11 +20,11 @@ import com.stripe.android.test.core.DEFAULT_UI_TIMEOUT import com.stripe.android.test.core.TestParameters import com.stripe.android.test.core.ui.ComposeButton import com.stripe.android.test.core.ui.PaymentSelection -import org.junit.Ignore +import com.stripe.android.utils.ForceNativeBankFlowTestRule +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -@Ignore("Tests currently failing, ignoring while we work on a fix so we can merge other PRs.") @RunWith(AndroidJUnit4::class) internal class TestUSBankAccount : BasePlaygroundTest() { private val testParameters = TestParameters.create( @@ -35,6 +36,11 @@ internal class TestUSBankAccount : BasePlaygroundTest() { settings[DelayedPaymentMethodsSettingsDefinition] = true } + @get:Rule + val forceNativeBankFlowTestRule = ForceNativeBankFlowTestRule( + context = ApplicationProvider.getApplicationContext() + ) + @Test fun testUSBankAccountSuccess() { testDriver.confirmUSBankAccount( diff --git a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUsBankAccountInCustomerSheet.kt b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUsBankAccountInCustomerSheet.kt index f248bded034..2ce68bc7bbe 100644 --- a/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUsBankAccountInCustomerSheet.kt +++ b/paymentsheet-example/src/androidTest/java/com/stripe/android/lpm/TestUsBankAccountInCustomerSheet.kt @@ -1,5 +1,6 @@ package com.stripe.android.lpm +import androidx.test.core.app.ApplicationProvider import com.stripe.android.BasePlaygroundTest import com.stripe.android.paymentsheet.example.playground.settings.Country import com.stripe.android.paymentsheet.example.playground.settings.CountrySettingsDefinition @@ -8,10 +9,10 @@ import com.stripe.android.paymentsheet.example.playground.settings.CustomerSheet import com.stripe.android.paymentsheet.example.playground.settings.PaymentMethodMode import com.stripe.android.test.core.AuthorizeAction import com.stripe.android.test.core.TestParameters -import org.junit.Ignore +import com.stripe.android.utils.ForceNativeBankFlowTestRule +import org.junit.Rule import org.junit.Test -@Ignore("Tests currently failing, ignoring while we work on a fix so we can merge other PRs.") internal class TestUsBankAccountInCustomerSheet : BasePlaygroundTest() { private val testParameters = TestParameters.create( paymentMethodCode = "us_bank_account", @@ -22,6 +23,11 @@ internal class TestUsBankAccountInCustomerSheet : BasePlaygroundTest() { settings[CustomerSheetPaymentMethodModeDefinition] = PaymentMethodMode.SetupIntent } + @get:Rule + val forceNativeBankFlowTestRule = ForceNativeBankFlowTestRule( + context = ApplicationProvider.getApplicationContext() + ) + @Test fun testUSBankAccount() { testDriver.saveUsBankAccountInCustomerSheet( diff --git a/paymentsheet-example/src/androidTest/java/com/stripe/android/utils/ForceNativeBankFlowTestRule.kt b/paymentsheet-example/src/androidTest/java/com/stripe/android/utils/ForceNativeBankFlowTestRule.kt new file mode 100644 index 00000000000..a895612a16a --- /dev/null +++ b/paymentsheet-example/src/androidTest/java/com/stripe/android/utils/ForceNativeBankFlowTestRule.kt @@ -0,0 +1,45 @@ +package com.stripe.android.utils + +import android.content.Context +import androidx.core.content.edit +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import org.junit.rules.TestWatcher +import org.junit.runner.Description + +class ForceNativeBankFlowTestRule( + private val context: Context, +) : TestWatcher() { + + override fun starting(description: Description) { + super.starting(description) + forceNativeBankAuth(true) + } + + override fun finished(description: Description) { + forceNativeBankAuth(false) + super.finished(description) + } + + private fun forceNativeBankAuth(force: Boolean) { + val sharedPrefs = context.getSharedPreferences( + "FINANCIAL_CONNECTIONS_DEBUG", + Context.MODE_PRIVATE + ) + + val settings = sharedPrefs.getString("json", null) + val settingsJson = settings?.let { Json.decodeFromString(JsonObject.serializer(), it) } ?: JsonObject(emptyMap()) + val newSettings = settingsJson.toMutableMap().apply { + if (force) { + put("financial_connections_override_native", JsonPrimitive("native")) + } else { + remove("financial_connections_override_native") + } + } + + sharedPrefs.edit { + putString("json", JsonObject(newSettings).toString()) + } + } +}