Skip to content

Commit

Permalink
Respect attachDefaultsToPaymentMethod, hide bank tab accordingly
Browse files Browse the repository at this point in the history
  • Loading branch information
mats-stripe committed Oct 24, 2024
1 parent 06a5640 commit aaf0034
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,6 @@ extension STPPaymentMethodParams {
extension PaymentElementConfiguration {
var isEligibleForBankTab: Bool {
billingDetailsCollectionConfiguration.email != .never ||
defaultBillingDetails.email?.isEmpty == false
(defaultBillingDetails.email?.isEmpty == false && billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,26 @@ final class InstantDebitsPaymentMethodElement: ContainerElement {
}

var defaultName: String? {
configuration.defaultBillingDetails.name
guard configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod else { return nil }
return configuration.defaultBillingDetails.name
}

var email: String? {
emailElement?.text ?? defaultEmail
}

var defaultEmail: String? {
configuration.defaultBillingDetails.email
guard configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod else { return nil }
return configuration.defaultBillingDetails.email
}

var phone: String? {
phoneElement?.phoneNumber?.string(as: .e164) ?? defaultPhone
}

var defaultPhone: String? {
configuration.defaultBillingDetails.phone
guard configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod else { return nil }
return configuration.defaultBillingDetails.phone
}

var address: PaymentSheet.Address {
Expand All @@ -104,7 +107,8 @@ final class InstantDebitsPaymentMethodElement: ContainerElement {
}

var defaultAddress: PaymentSheet.Address? {
configuration.defaultBillingDetails.address
guard configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod else { return nil }
return configuration.defaultBillingDetails.address
}

var enableCTA: Bool {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1699,7 +1699,7 @@ class PaymentSheetFormFactoryTest: XCTestCase {
XCTAssertNil(instantDebitsSection.addressElement)
}

func testMakeInstantDebits_defaultValues() {
func testMakeInstantDebits_defaultValues_attachDefaultsOff() {
let defaultAddress = PaymentSheet.Address(
city: "San Francisco",
country: "CA",
Expand All @@ -1714,6 +1714,40 @@ class PaymentSheetFormFactoryTest: XCTestCase {
configuration.defaultBillingDetails.email = "[email protected]"
configuration.defaultBillingDetails.phone = "+12345678900"
configuration.defaultBillingDetails.address = defaultAddress
configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = false

let factory = PaymentSheetFormFactory(
intent: ._testPaymentIntent(paymentMethodTypes: [.card]),
elementsSession: ._testValue(paymentMethodTypes: ["card"]),
configuration: .paymentSheet(configuration),
paymentMethod: .stripe(.card)
)
guard let instantDebitsSection = factory.makeInstantDebits(countries: ["US"]) as? InstantDebitsPaymentMethodElement else {
return XCTFail("Expected InstantDebitsPaymentMethodElement from factory")
}

XCTAssertNil(instantDebitsSection.defaultName)
XCTAssertNil(instantDebitsSection.defaultEmail)
XCTAssertNil(instantDebitsSection.defaultPhone)
XCTAssertNil(instantDebitsSection.defaultAddress)
}

func testMakeInstantDebits_defaultValues_attachDefaultsOn() {
let defaultAddress = PaymentSheet.Address(
city: "San Francisco",
country: "CA",
line1: "510 Townsend St.",
line2: "Line 2",
postalCode: "94102",
state: "CA"
)

var configuration = PaymentSheet.Configuration()
configuration.defaultBillingDetails.name = "Foo Bar"
configuration.defaultBillingDetails.email = "[email protected]"
configuration.defaultBillingDetails.phone = "+12345678900"
configuration.defaultBillingDetails.address = defaultAddress
configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = true

let factory = PaymentSheetFormFactory(
intent: ._testPaymentIntent(paymentMethodTypes: [.card]),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,25 @@ class PaymentSheetPaymentMethodTypeTest: XCTestCase {
XCTAssertEqual(types, [.stripe(.card), .linkCardBrand])
}

func testPaymentMethodTypesLinkCardBrand_noDefaults() {
let intent = Intent._testPaymentIntent(paymentMethodTypes: [.card])
var configuration = PaymentSheet.Configuration()
configuration.billingDetailsCollectionConfiguration.email = .never
configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = false
configuration.defaultBillingDetails.email = nil
let types = PaymentSheet.PaymentMethodType.filteredPaymentMethodTypes(
from: intent,
elementsSession: ._testValue(
intent: intent,
linkMode: .linkCardBrand,
linkFundingSources: [.card, .bankAccount]
),
configuration: configuration
)
// This configuration should not show the bank tab.
XCTAssertEqual(types, [.stripe(.card)])
}

// MARK: Other

func testUnknownPMTypeIsUnsupported() {
Expand Down

0 comments on commit aaf0034

Please sign in to comment.