Skip to content

Commit 4dba38d

Browse files
committed
Revert "Extract details that need to be persisted (email, phone, etc.) into LinkSignupDetails, and put it on the IntentConfirmParams"
This reverts commit 937abdc.
1 parent 46cbd78 commit 4dba38d

File tree

10 files changed

+38
-49
lines changed

10 files changed

+38
-49
lines changed

Stripe/StripeiOSTests/LinkSignupViewModelTests.swift

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import StripeCoreTestUtils
1212
import XCTest
1313

1414
@testable@_spi(STP) import Stripe
15+
@testable@_spi(STP) import StripeCore
1516
@testable@_spi(STP) import StripePayments
1617
@testable@_spi(STP) import StripePaymentSheet
1718
import StripePaymentsTestUtils

StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Elements/InlineSignup/LinkInlineSignupElement.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import UIKit
1111

1212
// TODO: Refactor this to be a ContainerElement and contain its sub-elements.
1313
final class LinkInlineSignupElement: Element {
14-
1514
let collectsUserInput: Bool = true
1615

1716
let signupView: LinkInlineSignupView
@@ -56,11 +55,13 @@ final class LinkInlineSignupElement: Element {
5655
self.signupView = LinkInlineSignupView(viewModel: viewModel)
5756
self.signupView.delegate = self
5857
}
58+
5959
}
6060

6161
extension LinkInlineSignupElement: LinkInlineSignupViewDelegate {
6262

6363
func inlineSignupViewDidUpdate(_ view: LinkInlineSignupView) {
6464
delegate?.didUpdate(element: self)
6565
}
66+
6667
}

StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Services/LinkAccountService.swift

-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ final class LinkAccountService: LinkAccountServiceProtocol {
4848
for: email,
4949
with: apiClient
5050
) { [apiClient] result in
51-
sleep(10)
5251
switch result {
5352
case .success(let lookupResponse):
5453
STPAnalyticsClient.sharedClient.logLinkAccountLookupComplete(lookupResult: lookupResponse.responseType)

StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/ViewModels/LinkInlineSignupViewModel.swift

+4-14
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,9 @@ protocol LinkInlineSignupViewModelDelegate: AnyObject {
1515
func signupViewModelDidUpdate(_ viewModel: LinkInlineSignupViewModel)
1616
}
1717

18-
struct LinkSignupDetails: Equatable {
19-
let account: PaymentSheetLinkAccount
20-
let phoneNumber: PhoneNumber
21-
let legalName: String?
22-
let consentAction: PaymentSheetLinkAccount.ConsentAction
23-
}
24-
2518
final class LinkInlineSignupViewModel {
2619
enum Action: Equatable {
27-
case signupAndPay(LinkSignupDetails)
20+
case signupAndPay(account: PaymentSheetLinkAccount, phoneNumber: PhoneNumber, legalName: String?)
2821
case continueWithoutLink
2922
}
3023

@@ -234,12 +227,9 @@ final class LinkInlineSignupViewModel {
234227
}
235228

236229
return .signupAndPay(
237-
.init(
238-
account: linkAccount,
239-
phoneNumber: phoneNumber,
240-
legalName: requiresNameCollection ? legalName : nil,
241-
consentAction: consentAction
242-
)
230+
account: linkAccount,
231+
phoneNumber: phoneNumber,
232+
legalName: requiresNameCollection ? legalName : nil
243233
)
244234
case .verified, .requiresVerification:
245235
// This should never happen: The session should only be verified as part of the signup request,

StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/IntentConfirmParams.swift

-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ final class IntentConfirmParams {
3434
/// If `true`, a mandate (e.g. "By continuing you authorize Foo Corp to use your payment details for recurring payments...") was displayed to the customer.
3535
var didDisplayMandate: Bool = false
3636

37-
/// Populated when Link signup is filled out in the form.
38-
var linkSignupDetails: LinkSignupDetails?
3937
var financialConnectionsLinkedBank: FinancialConnectionsLinkedBank?
4038
var instantDebitsLinkedBank: InstantDebitsLinkedBank?
4139

StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Link/PaymentSheet-LinkConfirmOption.swift

+8-10
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ extension PaymentSheet {
1818

1919
/// Signup for Link then pay.
2020
case signUp(
21-
details: LinkSignupDetails,
22-
// account: PaymentSheetLinkAccount,
23-
// phoneNumber: PhoneNumber,
24-
// consentAction: PaymentSheetLinkAccount.ConsentAction,
25-
// legalName: String?,
21+
account: PaymentSheetLinkAccount,
22+
phoneNumber: PhoneNumber,
23+
consentAction: PaymentSheetLinkAccount.ConsentAction,
24+
legalName: String?,
2625
intentConfirmParams: IntentConfirmParams
2726
)
2827

@@ -38,13 +37,12 @@ extension PaymentSheet {
3837

3938
extension PaymentSheet.LinkConfirmOption {
4039

41-
// TODO: Can we get rid of this? Can we remove details from the signup case assoc val?
4240
var account: PaymentSheetLinkAccount? {
4341
switch self {
4442
case .wallet:
4543
return nil
46-
case .signUp(let details, _):
47-
return details.account
44+
case .signUp(let account, _, _, _, _):
45+
return account
4846
case .withPaymentMethod:
4947
return nil
5048
}
@@ -54,7 +52,7 @@ extension PaymentSheet.LinkConfirmOption {
5452
switch self {
5553
case .wallet:
5654
return STPPaymentMethodType.link.displayName
57-
case .signUp(_, let intentConfirmParams):
55+
case .signUp(_, _, _, _, let intentConfirmParams):
5856
return intentConfirmParams.paymentMethodParams.paymentSheetLabel
5957
case .withPaymentMethod(let paymentMethod):
6058
return paymentMethod.paymentSheetLabel
@@ -65,7 +63,7 @@ extension PaymentSheet.LinkConfirmOption {
6563
switch self {
6664
case .wallet:
6765
return nil
68-
case .signUp(_, let intentConfirmParams):
66+
case .signUp(_, _, _, _, let intentConfirmParams):
6967
return intentConfirmParams.paymentMethodParams.billingDetails
7068
case .withPaymentMethod(let paymentMethod):
7169
return paymentMethod.billingDetails

StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheet+API.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -438,17 +438,17 @@ extension PaymentSheet {
438438
let linkController = PayWithLinkController(intent: intent, elementsSession: elementsSession, configuration: configuration)
439439
linkController.present(from: authenticationContext.authenticationPresentingViewController(),
440440
completion: completion)
441-
case let .signUp(details: details, intentConfirmParams: intentConfirmParams):
442-
details.account.signUp(with: details.phoneNumber, legalName: details.legalName, consentAction: details.consentAction) { result in
441+
case .signUp(let linkAccount, let phoneNumber, let consentAction, let legalName, let intentConfirmParams):
442+
linkAccount.signUp(with: phoneNumber, legalName: legalName, consentAction: consentAction) { result in
443443
UserDefaults.standard.markLinkAsUsed()
444444
switch result {
445445
case .success:
446446
STPAnalyticsClient.sharedClient.logLinkSignupComplete()
447-
createPaymentDetailsAndConfirm(details.account, intentConfirmParams.paymentMethodParams, intentConfirmParams.saveForFutureUseCheckboxState == .selected)
447+
createPaymentDetailsAndConfirm(linkAccount, intentConfirmParams.paymentMethodParams, intentConfirmParams.saveForFutureUseCheckboxState == .selected)
448448
case .failure(let error as NSError):
449449
STPAnalyticsClient.sharedClient.logLinkSignupFailure(error: error)
450450
// Attempt to confirm directly with params as a fallback.
451-
confirmWithPaymentMethodParams(intentConfirmParams.paymentMethodParams, details.account, intentConfirmParams.saveForFutureUseCheckboxState == .selected)
451+
confirmWithPaymentMethodParams(intentConfirmParams.paymentMethodParams, linkAccount, intentConfirmParams.saveForFutureUseCheckboxState == .selected)
452452
}
453453
}
454454
case .withPaymentMethod(let paymentMethod):

StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentMethodFormViewController.swift

+10-4
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,18 @@ class PaymentMethodFormViewController: UIViewController {
2828
params.setDefaultBillingDetailsIfNecessary(for: configuration)
2929

3030
if let params = form.updateParams(params: params) {
31-
// Hack: determine this is a Link signup by looking for the LinkInlineSignupElement
3231
if let linkInlineSignupElement = form.getAllUnwrappedSubElements().compactMap({ $0 as? LinkInlineSignupElement }).first {
3332
switch linkInlineSignupElement.action {
34-
case .signupAndPay(let signupDetails):
35-
params.linkSignupDetails = signupDetails // Hack: instead of this, the LinkInlineSignupElement should update its params with these details
36-
return .link(option: .signUp(details: signupDetails, intentConfirmParams: params))
33+
case .signupAndPay(let account, let phoneNumber, let legalName):
34+
return .link(
35+
option: .signUp(
36+
account: account,
37+
phoneNumber: phoneNumber,
38+
consentAction: linkInlineSignupElement.viewModel.consentAction,
39+
legalName: legalName,
40+
intentConfirmParams: params
41+
)
42+
)
3743
case .continueWithoutLink:
3844
return .new(confirmParams: params)
3945
case .none:

StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CardSectionElementTest.swift

+9-8
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
// Created by Yuki Tokuhiro on 10/2/24.
66
//
77

8+
import XCTest
89
@testable@_spi(STP) import StripeCore
910
@testable@_spi(STP) import StripePayments
1011
@testable@_spi(STP) import StripePaymentSheet
1112
@testable@_spi(STP) import StripePaymentsTestUtils
1213
@testable@_spi(STP) import StripePaymentsUI
1314
@testable@_spi(STP) import StripeUICore
14-
import XCTest
1515

1616
@MainActor
1717
final class CardSectionElementTest: XCTestCase {
@@ -46,18 +46,19 @@ final class CardSectionElementTest: XCTestCase {
4646
let checkbox = form.getCheckboxElement(startingWith: "Save payment details")!
4747
let linkInlineSignupElement: LinkInlineSignupElement = form.getElement()!
4848
let linkInlineView = linkInlineSignupElement.signupView
49-
49+
5050
XCTAssertNotNil(checkbox) // Checkbox should appear since this is a PI w/ customer
5151
form.getTextFieldElement("Card number")?.setText("4242424242424242")
5252
form.getTextFieldElement("MM / YY").setText("1232")
5353
form.getTextFieldElement("CVC").setText("123")
5454
form.getTextFieldElement("ZIP").setText("65432")
55-
55+
5656
XCTAssertEqual(form.getAllUnwrappedSubElements().count, 14)
57+
// XCTAssertNotNil(form.mandateString)
5758
// Simulate selecting checkbox
5859
checkbox.isSelected = true
5960
checkbox.didToggleCheckbox()
60-
61+
6162
// Set the email & phone number
6263
linkInlineView.emailElement.emailAddressElement.setText("\(UUID().uuidString)@foo.com")
6364
linkInlineView.phoneNumberElement.countryDropdownElement.setRawData("GB")
@@ -78,10 +79,10 @@ final class CardSectionElementTest: XCTestCase {
7879
// Ensure checkbox remains selected
7980
XCTAssertTrue(regeneratedForm.getCheckboxElement(startingWith: "Save payment details")!.isSelected)
8081
XCTAssertEqual(regeneratedIntentConfirmParams, intentConfirmParams)
81-
let regeneratedLinkInlineSignupElement: LinkInlineSignupElement = regeneratedForm.getElement()!
82-
let regeneratedLinkInlineView = regeneratedLinkInlineSignupElement.signupView
83-
XCTAssertEqual(regeneratedLinkInlineView.phoneNumberElement.phoneNumber, PhoneNumber(number: "1234567890", countryCode: "GB"))
84-
// print(linkInlineView2)
82+
let linkInlineSignupElement2: LinkInlineSignupElement = regeneratedForm.getElement()!
83+
let linkInlineView2 = linkInlineSignupElement2.signupView
84+
print(linkInlineView2)
85+
8586
}
8687
}
8788

StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/PaymentSheetLPMConfirmFlowTests.swift

-5
Original file line numberDiff line numberDiff line change
@@ -980,11 +980,6 @@ extension IntentConfirmParams: Equatable {
980980
return false
981981
}
982982

983-
if lhs.linkSignupDetails != rhs.linkSignupDetails {
984-
print("Link signup details not equal: \(lhs.linkSignupDetails.debugDescription) vs \(rhs.linkSignupDetails.debugDescription)")
985-
return false
986-
}
987-
988983
// Sanity check to make sure when we add new properties, we check them here
989984
let mirror = Mirror(reflecting: lhs)
990985
let propertyCount = mirror.children.count

0 commit comments

Comments
 (0)