Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,29 @@

class CardScannerControllerTests: XCTestCase {

var sut: CardScannerController!
var mockPresenter: UIViewController!
private var mockCardScanner: CardScannerProviderSpy!

override func setUpWithError() throws {
mockPresenter = UIViewController()
mockCardScanner = CardScannerProviderSpy()

sut = CardScannerController(
// This test requires AdyenCardScanner framework to be imported for the test target
func test_scannerIsAvailable() {
let mockPresenter = UIViewController()
let mockCardScanner = CardScannerProviderSpy()
let sut = CardScannerController(
presenter: mockPresenter,
availabilityProvider: CardScannerAvailalabilityMock(),
cardScannerProvider: mockCardScanner
)

let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = mockPresenter
window.makeKeyAndVisible()
}

override func tearDownWithError() throws {
sut = nil
mockPresenter = nil
mockCardScanner = nil
}

// This test requires AdyenCardScanner framework to be imported for the test target
func test_scannerIsAvailable() {

XCTAssertTrue(sut.isScannerAvailable)
}

func test_openCardScanner_withTitle_presentsCorrectTitle() throws {
let mockPresenter = UIViewController()
let mockCardScanner = CardScannerProviderSpy()
let sut = CardScannerController(
presenter: mockPresenter,
availabilityProvider: CardScannerAvailalabilityMock(),
cardScannerProvider: mockCardScanner
)
setupRootViewController(mockPresenter)

let expectation = XCTestExpectation(description: "Card scanner should complete the flow")
sut.onScanComplete = { result in
expectation.fulfill()
Expand All @@ -60,14 +52,32 @@
}

func testHandleCardScanningCancelation() throws {
let mockPresenter = UIViewController()
let mockCardScanner = CardScannerProviderSpy()
let sut = CardScannerController(
presenter: mockPresenter,
availabilityProvider: CardScannerAvailalabilityMock(),
cardScannerProvider: mockCardScanner
)
setupRootViewController(mockPresenter)

sut.openCardScanner()

sut.handleCardScanningCancelationWithCompletion {
XCTAssertNil(self.mockPresenter.presentedViewController)
XCTAssertNil(mockPresenter.presentedViewController)
}
}

func test_controller_returnsScannedCardValue() {
let mockPresenter = UIViewController()
let mockCardScanner = CardScannerProviderSpy()
let sut = CardScannerController(
presenter: mockPresenter,
availabilityProvider: CardScannerAvailalabilityMock(),
cardScannerProvider: mockCardScanner
)
setupRootViewController(mockPresenter)

// Given
let expectation = XCTestExpectation(description: "Card scanner should complete the flow")

Expand All @@ -91,6 +101,14 @@
}

func test_controller_returnsSimplifiedScannerError() {
let mockPresenter = UIViewController()
let mockCardScanner = CardScannerProviderSpy()
let sut = CardScannerController(
presenter: mockPresenter,
availabilityProvider: CardScannerAvailalabilityMock(),
cardScannerProvider: mockCardScanner
)

// Given
let expectation = XCTestExpectation(description: "Card scanner should complete the flow")
let mockError = AdyenCardScanner.CardScannerError(kind: .authorizationDenied)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,9 @@ import XCTest
let config = CashAppPayConfiguration(redirectURL: URL(string: "test")!, showsStorePaymentMethodField: true, style: componentStyle)
let sut = CashAppPayComponent(paymentMethod: paymentMethod, context: context, configuration: config)

sut.viewController.loadViewIfNeeded()

setupRootViewController(sut.viewController)
wait(for: .milliseconds(300))

let storeDetailsItemView: FormToggleItemView? = sut.viewController.view.findView(with: "AdyenCashAppPay.CashAppPayComponent.storeDetailsItem")
let storeDetailsItemTitleLabel: UILabel? = sut.viewController.view.findView(with: "AdyenCashAppPay.CashAppPayComponent.storeDetailsItem.titleLabel")

Expand All @@ -120,8 +121,9 @@ import XCTest
let config = CashAppPayConfiguration(redirectURL: URL(string: "test")!, showsStorePaymentMethodField: true)
let sut = CashAppPayComponent(paymentMethod: paymentMethod, context: context, configuration: config)

sut.viewController.loadViewIfNeeded()

setupRootViewController(sut.viewController)
wait(for: .milliseconds(300))

let storeDetailsToggleView: UIView? = sut.viewController.view.findView(with: "AdyenCashAppPay.CashAppPayComponent.storeDetailsItem")

XCTAssertNotNil(storeDetailsToggleView)
Expand All @@ -132,8 +134,9 @@ import XCTest
let config = CashAppPayConfiguration(redirectURL: URL(string: "test")!, showsStorePaymentMethodField: false)
let sut = CashAppPayComponent(paymentMethod: paymentMethod, context: context, configuration: config)

sut.viewController.loadViewIfNeeded()

setupRootViewController(sut.viewController)
wait(for: .milliseconds(300))

let storeDetailsToggleView: UIView? = sut.viewController.view.findView(with: "AdyenCashAppPay.CashAppPayComponent.storeDetailsItem")

XCTAssertNil(storeDetailsToggleView)
Expand All @@ -143,8 +146,12 @@ import XCTest
let config = CashAppPayConfiguration(redirectURL: URL(string: "test")!, showsStorePaymentMethodField: true)
let sut = CashAppPayComponent(paymentMethod: paymentMethod, context: context, configuration: config)

sut.viewController.loadViewIfNeeded()
setupRootViewController(sut.viewController)
wait(for: .milliseconds(300))

setupRootViewController(sut.viewController)
wait(for: .milliseconds(300))

XCTAssertFalse(sut.cashAppPayButton.showsActivityIndicator)
sut.cashAppPayButton.showsActivityIndicator = true
sut.stopLoadingIfNeeded()
Expand Down Expand Up @@ -201,8 +208,8 @@ import XCTest

let delegate = PaymentComponentDelegateMock()
sut.delegate = delegate
sut.viewController.loadViewIfNeeded()

setupRootViewController(sut.viewController)
let delegateExpectation = expectation(description: "PaymentComponentDelegate must be called when submit button is clicked.")
let finalizationExpectation = expectation(description: "Component should finalize.")
delegate.onDidSubmit = { data, component in
Expand All @@ -221,6 +228,8 @@ import XCTest
delegateExpectation.fulfill()
}

wait(for: .milliseconds(300))

sut.submitApprovedRequest(with: [oneTimeGrant], profile: .init(id: "testId", cashtag: "testtag"))

waitForExpectations(timeout: 10, handler: nil)
Expand All @@ -232,8 +241,8 @@ import XCTest

let delegate = PaymentComponentDelegateMock()
sut.delegate = delegate
sut.viewController.loadViewIfNeeded()

setupRootViewController(sut.viewController)
let delegateExpectation = expectation(description: "PaymentComponentDelegate must be called when submit button is clicked.")
let finalizationExpectation = expectation(description: "Component should finalize.")
delegate.onDidSubmit = { data, component in
Expand All @@ -252,6 +261,8 @@ import XCTest
delegateExpectation.fulfill()
}

wait(for: .milliseconds(300))

sut.submitApprovedRequest(with: [oneTimeGrant, onFileGrant], profile: .init(id: "testId", cashtag: "testtag"))

waitForExpectations(timeout: 10, handler: nil)
Expand All @@ -265,7 +276,7 @@ import XCTest
context: context,
configuration: configuration
)
sut.viewController.loadViewIfNeeded()
setupRootViewController(sut.viewController)

let paymentDelegateMock = PaymentComponentDelegateMock()
sut.delegate = paymentDelegateMock
Expand Down Expand Up @@ -298,7 +309,7 @@ import XCTest
configuration: config
)

sut.viewController.loadViewIfNeeded()
setupRootViewController(sut.viewController)

let paymentDelegateMock = PaymentComponentDelegateMock()
sut.delegate = paymentDelegateMock
Expand Down Expand Up @@ -448,7 +459,7 @@ import XCTest
context: context,
configuration: configuration
)
sut.viewController.loadViewIfNeeded()
setupRootViewController(sut.viewController)

let formViewController = try XCTUnwrap((sut.viewController as? SecuredViewController<FormViewController>)?.childViewController)
let expectedResult = formViewController.validate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ extension XCTestCase {
extension DispatchTimeInterval {

/// .milliseconds(30)
static var aMoment: Self { .milliseconds(300) }
static var aMoment: Self { .milliseconds(30) }
}

extension XCTestCase {
Expand Down
Loading