Skip to content

Commit f9c617b

Browse files
authored
Fetch saved payment methods in parallel with elements session load (for EKs) (#13151)
* prefetch payment methods * Expect prefetched PMs to be non null * send unexpected error event when prefetched pms are null * Add more test coverage * fix tests * fix even more tests * fix yet another test * clean up tests * Add comment about why we're only querying for sepa + us bank + card
1 parent a874c4a commit f9c617b

18 files changed

Lines changed: 274 additions & 40 deletions

File tree

payments-core/src/main/java/com/stripe/android/payments/core/analytics/ErrorReporter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,9 @@ interface ErrorReporter : FraudDetectionErrorReporter {
339339
),
340340
CARD_ART_PREFETCH_INVOKED_FOR_CONFIRMATION(
341341
partialEventName = "card_art_prefetch.invoked_for_confirmation"
342+
),
343+
PREFETCHED_PMS_NULL_FOR_EPHEMERAL_KEY(
344+
partialEventName = "payment_methods_prefetch.null_for_ephemeral_key"
342345
);
343346

344347
override val eventName: String

paymentsheet/src/androidTest/java/com/stripe/android/paymentelement/EmbeddedPaymentElementAnalyticsTest.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.test.espresso.Espresso
55
import com.google.common.truth.Truth.assertThat
66
import com.stripe.android.core.networking.AnalyticsRequest
77
import com.stripe.android.core.networking.ApiRequest
8+
import com.stripe.android.model.PaymentMethod
89
import com.stripe.android.networktesting.AdvancedFraudSignalsTestRule
910
import com.stripe.android.networktesting.NetworkRule
1011
import com.stripe.android.networktesting.RequestMatcher
@@ -288,10 +289,16 @@ internal class EmbeddedPaymentElementAnalyticsTest {
288289
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
289290
}
290291
networkRule.setupV1PaymentMethodsResponse(card1, card2)
292+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
293+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
291294

292295
validateAnalyticsRequest(eventName = "mc_load_started")
293296
validateAnalyticsRequest(eventName = "mc_load_succeeded")
294297
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
298+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
299+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
300+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
301+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
295302
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
296303
validateAnalyticsRequest(eventName = "mc_embedded_sheet_newpm_show")
297304
validateAnalyticsRequest(
@@ -360,10 +367,16 @@ internal class EmbeddedPaymentElementAnalyticsTest {
360367
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
361368
}
362369
networkRule.setupV1PaymentMethodsResponse(card1, card2)
370+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
371+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
363372

364373
validateAnalyticsRequest(eventName = "mc_load_started")
365374
validateAnalyticsRequest(eventName = "mc_load_succeeded")
366375
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
376+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
377+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
378+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
379+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
367380
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
368381
validateAnalyticsRequest(eventName = "mc_embedded_sheet_newpm_show")
369382
validateAnalyticsRequest(
@@ -414,10 +427,16 @@ internal class EmbeddedPaymentElementAnalyticsTest {
414427
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
415428
}
416429
networkRule.setupV1PaymentMethodsResponse(card1, card2)
430+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
431+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
417432

418433
validateAnalyticsRequest(eventName = "mc_load_started")
419434
validateAnalyticsRequest(eventName = "mc_load_succeeded")
420435
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
436+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
437+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
438+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
439+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
421440
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
422441
validateAnalyticsRequest(eventName = "mc_embedded_sheet_newpm_show")
423442
validateAnalyticsRequest(

paymentsheet/src/androidTest/java/com/stripe/android/paymentelement/EmbeddedPaymentElementImmediateActionRowSelectionTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.stripe.android.paymentelement
33
import androidx.test.espresso.Espresso
44
import app.cash.turbine.Turbine
55
import com.google.common.truth.Truth.assertThat
6+
import com.stripe.android.model.PaymentMethod
67
import com.stripe.android.networktesting.NetworkRule
78
import com.stripe.android.networktesting.RequestMatchers.host
89
import com.stripe.android.networktesting.RequestMatchers.method
@@ -447,6 +448,8 @@ internal class EmbeddedPaymentElementImmediateActionRowSelectionTest {
447448
}
448449
if (shouldSetupV1PaymentMethodsResponse) {
449450
networkRule.setupV1PaymentMethodsResponse(card1, card2)
451+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
452+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
450453
}
451454
testBlock(testContext)
452455
}

paymentsheet/src/androidTest/java/com/stripe/android/paymentelement/EmbeddedPaymentElementTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ internal class EmbeddedPaymentElementTest {
128128
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
129129
}
130130
networkRule.setupV1PaymentMethodsResponse(card1, card2)
131+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
132+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
131133

132134
testContext.configure {
133135
customer(PaymentSheet.CustomerConfiguration("cus_123", "ek_test"))
@@ -164,6 +166,8 @@ internal class EmbeddedPaymentElementTest {
164166
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
165167
}
166168
networkRule.setupV1PaymentMethodsResponse(card1)
169+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
170+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
167171

168172
testContext.configure {
169173
customer(PaymentSheet.CustomerConfiguration("cus_123", "ek_test"))
@@ -203,6 +207,8 @@ internal class EmbeddedPaymentElementTest {
203207
response.testBodyFromFile("elements-sessions-deferred_payment_intent_no_link.json")
204208
}
205209
networkRule.setupV1PaymentMethodsResponse(card1, card2)
210+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
211+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
206212

207213
testContext.configure {
208214
customer(PaymentSheet.CustomerConfiguration("cus_123", "ek_test"))

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/FlowControllerAnalyticsTest.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
55
import com.google.common.truth.Truth.assertThat
66
import com.stripe.android.core.networking.AnalyticsRequest
77
import com.stripe.android.core.networking.ApiRequest
8+
import com.stripe.android.model.PaymentMethod
89
import com.stripe.android.networktesting.AdvancedFraudSignalsTestRule
910
import com.stripe.android.networktesting.NetworkRule
1011
import com.stripe.android.networktesting.RequestMatcher
@@ -361,8 +362,14 @@ internal class FlowControllerAnalyticsTest {
361362
}
362363

363364
networkRule.setupV1PaymentMethodsResponse(card1, card2)
365+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
366+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
364367
validateAnalyticsRequest(eventName = "mc_load_started")
365368
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
369+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
370+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
371+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
372+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
366373
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
367374
validateAnalyticsRequest(eventName = "mc_load_succeeded")
368375
validateAnalyticsRequest(eventName = "mc_custom_sheet_savedpm_show")

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/FlowControllerTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.google.testing.junit.testparameterinjector.TestParameterInjector
2020
import com.stripe.android.PaymentConfiguration
2121
import com.stripe.android.googlepaylauncher.GooglePayAvailabilityClient
2222
import com.stripe.android.googlepaylauncher.GooglePayRepository
23+
import com.stripe.android.model.PaymentMethod
2324
import com.stripe.android.networktesting.RequestMatchers.bodyPart
2425
import com.stripe.android.networktesting.RequestMatchers.host
2526
import com.stripe.android.networktesting.RequestMatchers.method
@@ -47,6 +48,7 @@ import com.stripe.android.paymentsheet.verticalmode.TEST_TAG_MANAGE_SCREEN_SAVED
4748
import com.stripe.android.paymentsheet.verticalmode.TEST_TAG_PAYMENT_METHOD_VERTICAL_LAYOUT
4849
import com.stripe.android.paymentsheet.verticalmode.TEST_TAG_SAVED_PAYMENT_METHOD_ROW_BUTTON
4950
import com.stripe.android.paymentsheet.verticalmode.TEST_TAG_VIEW_MORE
51+
import com.stripe.paymentelementnetwork.setupV1PaymentMethodsResponse
5052
import okhttp3.mockwebserver.SocketPolicy
5153
import org.junit.After
5254
import org.junit.Rule
@@ -882,10 +884,14 @@ internal class FlowControllerTest {
882884
host("api.stripe.com"),
883885
method("GET"),
884886
path("/v1/payment_methods"),
887+
query("type", PaymentMethod.Type.Card.code)
885888
) { response ->
886889
response.testBodyFromFile("payment-methods-get-success.json")
887890
}
888891

892+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
893+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
894+
889895
testContext.configureFlowController {
890896
configureWithPaymentIntent(
891897
paymentIntentClientSecret = "pi_example_secret_example",
@@ -948,10 +954,14 @@ internal class FlowControllerTest {
948954
host("api.stripe.com"),
949955
method("GET"),
950956
path("/v1/payment_methods"),
957+
query("type", PaymentMethod.Type.Card.code)
951958
) { response ->
952959
response.testBodyFromFile("payment-methods-get-success.json")
953960
}
954961

962+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
963+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
964+
955965
testContext.configureFlowController {
956966
configureWithPaymentIntent(
957967
paymentIntentClientSecret = "pi_example_secret_example",

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/LinkTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.test.espresso.Espresso.closeSoftKeyboard
55
import com.google.testing.junit.testparameterinjector.TestParameter
66
import com.google.testing.junit.testparameterinjector.TestParameterInjector
77
import com.stripe.android.link.account.DefaultLinkStore
8+
import com.stripe.android.model.PaymentMethod
89
import com.stripe.android.networktesting.elementsSession
910
import com.stripe.android.networktesting.NetworkRule
1011
import com.stripe.android.networktesting.RequestMatcher
@@ -15,13 +16,15 @@ import com.stripe.android.networktesting.RequestMatchers.host
1516
import com.stripe.android.networktesting.RequestMatchers.method
1617
import com.stripe.android.networktesting.RequestMatchers.not
1718
import com.stripe.android.networktesting.RequestMatchers.path
19+
import com.stripe.android.networktesting.RequestMatchers.query
1820
import com.stripe.android.networktesting.ResponseReplacement
1921
import com.stripe.android.networktesting.testBodyFromFile
2022
import com.stripe.android.paymentsheet.utils.ProductIntegrationType
2123
import com.stripe.android.paymentsheet.utils.ProductIntegrationTypeProvider
2224
import com.stripe.android.paymentsheet.utils.TestRules
2325
import com.stripe.android.paymentsheet.utils.assertCompleted
2426
import com.stripe.android.paymentsheet.utils.runProductIntegrationTest
27+
import com.stripe.paymentelementnetwork.setupV1PaymentMethodsResponse
2528
import org.junit.Rule
2629
import org.junit.Test
2730
import org.junit.runner.RunWith
@@ -143,10 +146,14 @@ internal class LinkTest {
143146
host("api.stripe.com"),
144147
method("GET"),
145148
path("/v1/payment_methods"),
149+
query("type", PaymentMethod.Type.Card.code)
146150
) { response ->
147151
response.testBodyFromFile("payment-methods-get-success-empty.json")
148152
}
149153

154+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
155+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
156+
150157
networkRule.enqueue(
151158
method("POST"),
152159
path("/v1/consumers/sessions/lookup"),
@@ -424,10 +431,14 @@ internal class LinkTest {
424431
host("api.stripe.com"),
425432
method("GET"),
426433
path("/v1/payment_methods"),
434+
query("type", PaymentMethod.Type.Card.code)
427435
) { response ->
428436
response.testBodyFromFile("payment-methods-get-success-empty.json")
429437
}
430438

439+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
440+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
441+
431442
networkRule.enqueue(
432443
method("POST"),
433444
path("/v1/consumers/sessions/lookup"),

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/PaymentSheetAnalyticsTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.net.Uri
44
import androidx.test.ext.junit.runners.AndroidJUnit4
55
import com.stripe.android.core.networking.AnalyticsRequest
66
import com.stripe.android.core.networking.ApiRequest
7+
import com.stripe.android.model.PaymentMethod
78
import com.stripe.android.networktesting.AdvancedFraudSignalsTestRule
89
import com.stripe.android.networktesting.NetworkRule
910
import com.stripe.android.networktesting.RequestMatcher
@@ -331,9 +332,16 @@ internal class PaymentSheetAnalyticsTest {
331332
response.testBodyFromFile("elements-sessions-requires_cvc_recollection.json")
332333
}
333334
networkRule.setupV1PaymentMethodsResponse(card1, card2)
335+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
336+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
337+
334338
validateAnalyticsRequest(eventName = "mc_complete_init")
335339
validateAnalyticsRequest(eventName = "mc_load_started")
336340
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
341+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
342+
validateAnalyticsRequest(eventName = "stripe_android.retrieve_payment_methods")
343+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
344+
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
337345
validateAnalyticsRequest(eventName = "elements.customer_repository.get_saved_payment_methods_success")
338346
validateAnalyticsRequest(eventName = "mc_load_succeeded")
339347
validateAnalyticsRequest(eventName = "mc_complete_sheet_savedpm_show")

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/PaymentSheetConfirmationTokenTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.stripe.android.paymentsheet
22

3+
import com.stripe.android.model.PaymentMethod
34
import com.stripe.android.networktesting.RequestMatcher
45
import com.stripe.android.networktesting.RequestMatchers
56
import com.stripe.android.networktesting.RequestMatchers.bodyPart
67
import com.stripe.android.networktesting.RequestMatchers.hasBodyPart
8+
import com.stripe.android.networktesting.RequestMatchers.host
79
import com.stripe.android.networktesting.RequestMatchers.method
810
import com.stripe.android.networktesting.RequestMatchers.not
911
import com.stripe.android.networktesting.RequestMatchers.path
@@ -16,6 +18,7 @@ import com.stripe.android.paymentsheet.utils.PaymentSheetTestRunnerContext
1618
import com.stripe.android.paymentsheet.utils.TestRules
1719
import com.stripe.android.paymentsheet.utils.assertCompleted
1820
import com.stripe.android.paymentsheet.utils.runPaymentSheetTest
21+
import com.stripe.paymentelementnetwork.setupV1PaymentMethodsResponse
1922
import org.junit.Rule
2023
import org.junit.Test
2124

@@ -131,6 +134,9 @@ internal class PaymentSheetConfirmationTokenTest {
131134
) { response ->
132135
response.testBodyFromFile("payment-methods-get-success.json")
133136
}
137+
138+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
139+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
134140
}
135141

136142
testContext.presentPaymentSheet {

paymentsheet/src/androidTest/java/com/stripe/android/paymentsheet/PaymentSheetDeferredTest.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package com.stripe.android.paymentsheet
33
import com.google.common.truth.Truth.assertThat
44
import com.google.testing.junit.testparameterinjector.TestParameter
55
import com.google.testing.junit.testparameterinjector.TestParameterInjector
6+
import com.stripe.android.model.PaymentMethod
67
import com.stripe.android.networktesting.RequestMatchers.bodyPart
8+
import com.stripe.android.networktesting.RequestMatchers.host
79
import com.stripe.android.networktesting.RequestMatchers.method
810
import com.stripe.android.networktesting.RequestMatchers.not
911
import com.stripe.android.networktesting.RequestMatchers.path
@@ -18,6 +20,7 @@ import com.stripe.android.paymentsheet.utils.assertCompleted
1820
import com.stripe.android.paymentsheet.utils.expectNoResult
1921
import com.stripe.android.paymentsheet.utils.runMultiplePaymentSheetInstancesTest
2022
import com.stripe.android.paymentsheet.utils.runPaymentSheetTest
23+
import com.stripe.paymentelementnetwork.setupV1PaymentMethodsResponse
2124
import org.junit.Rule
2225
import org.junit.Test
2326
import org.junit.runner.RunWith
@@ -187,6 +190,9 @@ internal class PaymentSheetDeferredTest {
187190
response.testBodyFromFile("payment-methods-get-success.json")
188191
}
189192

193+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
194+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
195+
190196
testContext.presentPaymentSheet {
191197
presentWithIntentConfiguration(
192198
intentConfiguration = PaymentSheet.IntentConfiguration(
@@ -244,6 +250,9 @@ internal class PaymentSheetDeferredTest {
244250
response.testBodyFromFile("payment-methods-get-success-empty.json")
245251
}
246252

253+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
254+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
255+
247256
testContext.presentPaymentSheet {
248257
presentWithIntentConfiguration(
249258
intentConfiguration = PaymentSheet.IntentConfiguration(
@@ -326,6 +335,9 @@ internal class PaymentSheetDeferredTest {
326335
response.testBodyFromFile("payment-methods-get-success.json")
327336
}
328337

338+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
339+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
340+
329341
testContext.presentPaymentSheet {
330342
presentWithIntentConfiguration(
331343
intentConfiguration = PaymentSheet.IntentConfiguration(
@@ -386,6 +398,9 @@ internal class PaymentSheetDeferredTest {
386398
response.testBodyFromFile("payment-methods-get-success-empty.json")
387399
}
388400

401+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.USBankAccount.code)
402+
networkRule.setupV1PaymentMethodsResponse(type = PaymentMethod.Type.SepaDebit.code)
403+
389404
testContext.presentPaymentSheet {
390405
presentWithIntentConfiguration(
391406
intentConfiguration = PaymentSheet.IntentConfiguration(

0 commit comments

Comments
 (0)