Skip to content

Commit 7ac1de6

Browse files
authored
Fix FlowController bug with registered callbacks (#10374)
1 parent 8ff1609 commit 7ac1de6

File tree

3 files changed

+442
-3
lines changed

3 files changed

+442
-3
lines changed

paymentsheet/src/main/java/com/stripe/android/paymentsheet/PaymentSheet.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2202,7 +2202,7 @@ class PaymentSheet internal constructor(
22022202
}
22032203

22042204
private fun initializeCallbacks() {
2205-
setPaymentSheetCallbacks(
2205+
setFlowControllerCallbacks(
22062206
createIntentCallback = createIntentCallback,
22072207
externalPaymentMethodConfirmHandler = externalPaymentMethodConfirmHandler,
22082208
)

paymentsheet/src/test/java/com/stripe/android/paymentelement/embedded/content/EmbeddedPaymentElementInitializerTest.kt

+46-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import androidx.lifecycle.Lifecycle
44
import androidx.lifecycle.SavedStateHandle
55
import androidx.lifecycle.testing.TestLifecycleOwner
66
import com.google.common.truth.Truth.assertThat
7+
import com.stripe.android.paymentelement.callbacks.PaymentElementCallbackReferences
8+
import com.stripe.android.paymentelement.callbacks.PaymentElementCallbacks
79
import com.stripe.android.paymentelement.embedded.FakeEmbeddedSheetLauncher
810
import com.stripe.android.paymentsheet.analytics.FakeEventReporter
911
import com.stripe.android.testing.CoroutineTestRule
@@ -32,19 +34,57 @@ internal class EmbeddedPaymentElementInitializerTest {
3234
eventReporter.cannotProperlyReturnFromLinkAndOtherLPMsCalls.ensureAllEventsConsumed()
3335
}
3436

37+
@Test
38+
fun `when lifecycle is destroyed, should un-initialize callbacks`() {
39+
val owner = TestLifecycleOwner()
40+
val callbacks = PaymentElementCallbacks(
41+
createIntentCallback = { _, _ ->
42+
error("Not implemented")
43+
},
44+
externalPaymentMethodConfirmHandler = { _, _ ->
45+
error("Not implemented")
46+
}
47+
)
48+
49+
PaymentElementCallbackReferences[PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER] = callbacks
50+
51+
testScenario(owner, PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER) {
52+
lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
53+
54+
assertThat(PaymentElementCallbackReferences[PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER])
55+
.isEqualTo(callbacks)
56+
57+
lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
58+
59+
assertThat(PaymentElementCallbackReferences[PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER])
60+
.isEqualTo(callbacks)
61+
62+
lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
63+
64+
assertThat(PaymentElementCallbackReferences[PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER])
65+
.isEqualTo(callbacks)
66+
67+
lifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
68+
69+
assertThat(PaymentElementCallbackReferences[PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER])
70+
.isNotNull()
71+
}
72+
}
73+
3574
private fun testScenario(
75+
lifecycleOwner: TestLifecycleOwner = TestLifecycleOwner(),
76+
paymentElementCallbackIdentifier: String = PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER,
3677
block: suspend Scenario.() -> Unit,
3778
) = runTest {
3879
val contentHelper = FakeEmbeddedContentHelper()
39-
val lifecycleOwner = TestLifecycleOwner()
4080
val eventReporter = FakeEventReporter()
4181
val initializer = EmbeddedPaymentElementInitializer(
4282
sheetLauncher = FakeEmbeddedSheetLauncher(),
4383
contentHelper = contentHelper,
4484
lifecycleOwner = lifecycleOwner,
4585
savedStateHandle = SavedStateHandle(),
4686
eventReporter = eventReporter,
47-
paymentElementCallbackIdentifier = "EmbeddedPaymentElementTestIdentifier",
87+
paymentElementCallbackIdentifier = paymentElementCallbackIdentifier,
4888
)
4989
Scenario(
5090
initializer = initializer,
@@ -61,4 +101,8 @@ internal class EmbeddedPaymentElementInitializerTest {
61101
val lifecycleOwner: TestLifecycleOwner,
62102
val eventReporter: FakeEventReporter,
63103
)
104+
105+
private companion object {
106+
private const val PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER = "EmbeddedPaymentElementTestIdentifier"
107+
}
64108
}

0 commit comments

Comments
 (0)