@@ -4,6 +4,8 @@ import androidx.lifecycle.Lifecycle
4
4
import androidx.lifecycle.SavedStateHandle
5
5
import androidx.lifecycle.testing.TestLifecycleOwner
6
6
import com.google.common.truth.Truth.assertThat
7
+ import com.stripe.android.paymentelement.callbacks.PaymentElementCallbackReferences
8
+ import com.stripe.android.paymentelement.callbacks.PaymentElementCallbacks
7
9
import com.stripe.android.paymentelement.embedded.FakeEmbeddedSheetLauncher
8
10
import com.stripe.android.paymentsheet.analytics.FakeEventReporter
9
11
import com.stripe.android.testing.CoroutineTestRule
@@ -32,19 +34,57 @@ internal class EmbeddedPaymentElementInitializerTest {
32
34
eventReporter.cannotProperlyReturnFromLinkAndOtherLPMsCalls.ensureAllEventsConsumed()
33
35
}
34
36
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
+
35
74
private fun testScenario (
75
+ lifecycleOwner : TestLifecycleOwner = TestLifecycleOwner (),
76
+ paymentElementCallbackIdentifier : String = PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER ,
36
77
block : suspend Scenario .() -> Unit ,
37
78
) = runTest {
38
79
val contentHelper = FakeEmbeddedContentHelper ()
39
- val lifecycleOwner = TestLifecycleOwner ()
40
80
val eventReporter = FakeEventReporter ()
41
81
val initializer = EmbeddedPaymentElementInitializer (
42
82
sheetLauncher = FakeEmbeddedSheetLauncher (),
43
83
contentHelper = contentHelper,
44
84
lifecycleOwner = lifecycleOwner,
45
85
savedStateHandle = SavedStateHandle (),
46
86
eventReporter = eventReporter,
47
- paymentElementCallbackIdentifier = " EmbeddedPaymentElementTestIdentifier " ,
87
+ paymentElementCallbackIdentifier = paymentElementCallbackIdentifier ,
48
88
)
49
89
Scenario (
50
90
initializer = initializer,
@@ -61,4 +101,8 @@ internal class EmbeddedPaymentElementInitializerTest {
61
101
val lifecycleOwner : TestLifecycleOwner ,
62
102
val eventReporter : FakeEventReporter ,
63
103
)
104
+
105
+ private companion object {
106
+ private const val PAYMENT_ELEMENT_CALLBACK_TEST_IDENTIFIER = " EmbeddedPaymentElementTestIdentifier"
107
+ }
64
108
}
0 commit comments