Skip to content

Commit

Permalink
Make tests buildable
Browse files Browse the repository at this point in the history
  • Loading branch information
robertdalmeida committed Feb 21, 2025
1 parent a5d113c commit 95ade4b
Show file tree
Hide file tree
Showing 7 changed files with 142 additions and 209 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

/// This is a wrapper class for the Objective C 3ds2 sdk.
/// This translates simple non specific sdk bound types such as
/// `FingerprintServiceParameters` & `ChallengeParameters` to sdk specific types and performs actions.
/// `FingerprintServiceParameters` & `ChallengeParameters` to sdk specific types and performs actions.
internal final class ThreeDSServiceLegacy: ThreeDSServiceable {
private var service: Adyen3DS2.ADYService?
private var transaction: Adyen3DS2.ADYTransaction?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ internal enum ThreeDSServiceChallengeError: Error {
case errorAndResultAreNil(errorPayload: String)
/// The challenge has been cancelled.
case cancelled(errorPayload: String)
/// The sdk faced an error performing the challenge.
/// The sdk faced an error performing the challenge.
case challengeError(errorPayload: String)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,33 @@ import Adyen3DS2
@_spi(AdyenInternal) @testable import AdyenActions
import Foundation

final class AnyADYServiceMock: AnyADYService {

func service(with parameters: ADYServiceParameters, appearanceConfiguration: ADYAppearanceConfiguration, completionHandler: @escaping (AnyADYService) -> Void) {
completionHandler(self)
final class ThreeDSServiceableMock: ThreeDSServiceable {
func resetTransaction() {}

typealias FingerprintResult = Result<any AnyAuthenticationRequestParameters, ThreeDSServiceFingerprintError>
var onPerformFingerprint: ((FingerprintServiceParameters, (FingerprintResult) -> Void) -> Void)?

func performFingerprint(
parameters: FingerprintServiceParameters,
completionHandler: @escaping (FingerprintResult) -> Void
) {
guard let onPerformFingerprint else {
fatalError("Need to provide a mock data if you are using this mock.")
}
onPerformFingerprint(parameters, completionHandler)
}

var authenticationRequestParameters: AnyAuthenticationRequestParameters?

var mockedTransaction: AnyADYTransaction?

func transaction(withMessageVersion: String) throws -> AnyADYTransaction {
if let mockedTransaction {
return mockedTransaction
} else if let parameters = authenticationRequestParameters {
return AnyADYTransactionMock(parameters: parameters)
} else {
fatalError()
typealias ChallengeResult = Result<any AnyChallengeResult, ThreeDSServiceChallengeError>
var onPerformChallenge: ((ChallengeParameters, (ChallengeResult) -> Void) -> Void)?

func performChallenge(
with parameters: ChallengeParameters,
completionHandler: @escaping (ChallengeResult) -> Void
) {
guard let onPerformChallenge else {
fatalError("Need to provide a mock data if you are using this mock.")
}
onPerformChallenge(parameters, completionHandler)
}
}

Expand All @@ -50,19 +59,3 @@ internal struct AnyChallengeResultMock: AnyChallengeResult {

var transactionStatus: String
}

final class AnyADYTransactionMock: AnyADYTransaction {

let authenticationParameters: AnyAuthenticationRequestParameters

init(parameters: AnyAuthenticationRequestParameters) {
self.authenticationParameters = parameters
}

var onPerformChallenge: ((ADYChallengeParameters, (AnyChallengeResult?, Error?) -> Void) -> Void)?

func performChallenge(with parameters: ADYChallengeParameters, completionHandler: @escaping (AnyChallengeResult?, Error?) -> Void) {
onPerformChallenge?(parameters, completionHandler)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {

func testFingerprintFlowSuccess() throws {

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let fingerprint = try ThreeDS2Component.Fingerprint(
authenticationRequestParameters: authenticationRequestParameters,
delegatedAuthenticationSDKOutput: nil,
Expand Down Expand Up @@ -119,8 +119,8 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {
let mockedDetails = ThreeDS2Details.completed(ThreeDSResult(payload: "payload"))
submitter.mockedResult = .success(.details(mockedDetails))

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let fingerprintAction = ThreeDS2FingerprintAction(
fingerprintToken: "Invalid-token",
Expand Down Expand Up @@ -149,25 +149,19 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {
}

func testChallengeFlowSuccess() throws {

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters

let transaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
transaction.onPerformChallenge = { params, completion in
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { params, completion in
XCTAssertEqual(params.threeDSRequestorAppURL, URL(string: "https://google.com"))
completion(AnyChallengeResultMock(sdkTransactionIdentifier: "sdkTxId", transactionStatus: "Y"), nil)
completion(.success(AnyChallengeResultMock(sdkTransactionIdentifier: "sdkTxId", transactionStatus: "Y")))
}
service.mockedTransaction = transaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
let analyticsProviderMock = AnalyticsProviderMock()
let sut = ThreeDS2ClassicActionHandler(
context: Dummy.context(with: analyticsProviderMock),
service: service
)
sut.threeDSRequestorAppURL = URL(string: "https://google.com")
sut.transaction = transaction
sut.handle(challengeAction) { challengeResult in
switch challengeResult {
case let .success(result):
Expand Down Expand Up @@ -207,18 +201,11 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {

func testChallengeFlowFailure() throws {

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let mockedTransaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
service.mockedTransaction = mockedTransaction

mockedTransaction.onPerformChallenge = { parameters, completion in
completion(nil, Dummy.error)
}
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { $1(.failure(.challengeError(errorPayload: ""))) }

let sut = ThreeDS2ClassicActionHandler(context: Dummy.context, service: service)
sut.transaction = mockedTransaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")

sut.handle(challengeAction) { result in
Expand Down Expand Up @@ -250,8 +237,7 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {
}

func testChallengeFlowMissingTransaction() throws {
let service = AnyADYServiceMock()

let service = ThreeDSServiceableMock()
let sut = ThreeDS2ClassicActionHandler(context: Dummy.context, service: service)

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
Expand All @@ -274,19 +260,12 @@ class ThreeDS2ClassicActionHandlerTests: XCTestCase {
}

func testInvalidChallengeToken() throws {

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let mockedTransaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
service.mockedTransaction = mockedTransaction

mockedTransaction.onPerformChallenge = { parameters, completion in
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { parameters, completion in
XCTFail()
}

let sut = ThreeDS2ClassicActionHandler(context: Dummy.context, service: service)
sut.transaction = mockedTransaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")

let challengeAction = ThreeDS2ChallengeAction(challengeToken: "Invalid-token", authorisationToken: "AuthToken", paymentData: "paymentData")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
let mockedDetails = ThreeDS2Details.completed(ThreeDSResult(payload: "payload"))
submitter.mockedResult = .success(.details(mockedDetails))

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let fingerprintAction = ThreeDS2FingerprintAction(
fingerprintToken: "Invalid-token",
Expand Down Expand Up @@ -117,15 +117,12 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {

func testChallengeFlowSuccess() throws {

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters

let transaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
transaction.onPerformChallenge = { params, completion in
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { params, completion in
XCTAssertEqual(params.threeDSRequestorAppURL, URL(string: "https://google.com"))
completion(AnyChallengeResultMock(sdkTransactionIdentifier: "sdkTxId", transactionStatus: "Y"), nil)
completion(.success(AnyChallengeResultMock(sdkTransactionIdentifier: "sdkTxId", transactionStatus: "Y")))
}
service.mockedTransaction = transaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
let analyticsProviderMock = AnalyticsProviderMock()
Expand All @@ -134,7 +131,6 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
service: service
)
sut.threeDSRequestorAppURL = URL(string: "https://google.com")
sut.transaction = transaction
sut.handle(challengeAction) { challengeResult in
switch challengeResult {
case let .success(result):
Expand Down Expand Up @@ -175,22 +171,16 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
func testChallengeFlowFailure() throws {
let submitter = AnyThreeDS2FingerprintSubmitterMock()

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let mockedTransaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
service.mockedTransaction = mockedTransaction

mockedTransaction.onPerformChallenge = { parameters, completion in
completion(nil, Dummy.error)
}
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { $1(.failure(.challengeError(errorPayload: ""))) }

let analyticsProviderMock = AnalyticsProviderMock()
let sut = ThreeDS2CompactActionHandler(
context: Dummy.context(with: analyticsProviderMock),
fingerprintSubmitter: submitter,
service: service
)
sut.transaction = mockedTransaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
sut.handle(challengeAction) { result in
Expand Down Expand Up @@ -233,13 +223,10 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
let submitter = AnyThreeDS2FingerprintSubmitterMock()
let mockedAction = ThreeDS2ChallengeAction(challengeToken: "Invalid-token", authorisationToken: "AuthToken", paymentData: "paymentData")

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let mockedTransaction = AnyADYTransactionMock(parameters: authenticationRequestParameters)
service.mockedTransaction = mockedTransaction

mockedTransaction.onPerformChallenge = { parameters, completion in
completion(nil, Dummy.error)
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }
service.onPerformChallenge = { parameters, completion in
completion(.failure(.challengeError(errorPayload: "")))
}

let analyticsProviderMock = AnalyticsProviderMock()
Expand All @@ -248,7 +235,6 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
fingerprintSubmitter: submitter,
service: service
)
sut.transaction = mockedTransaction

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
sut.handle(mockedAction) { result in
Expand Down Expand Up @@ -278,9 +264,7 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {

func testChallengeFlowMissingTransaction() throws {
let submitter = AnyThreeDS2FingerprintSubmitterMock()

let service = AnyADYServiceMock()

let service = ThreeDSServiceableMock()
let analyticsProviderMock = AnalyticsProviderMock()
let sut = ThreeDS2CompactActionHandler(
context: Dummy.context(with: analyticsProviderMock),
Expand Down Expand Up @@ -321,15 +305,19 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
let mockedDetails = ThreeDS2Details.completed(ThreeDSResult(payload: "payload"))
submitter.mockedResult = .success(.details(mockedDetails))

let service = AnyADYServiceMock()
service.authenticationRequestParameters = AuthenticationRequestParametersMock(
deviceInformation: "device_info",
sdkApplicationIdentifier: "sdkApplicationIdentifier",
sdkTransactionIdentifier: "sdkTransactionIdentifier",
sdkReferenceNumber: "sdkReferenceNumber",
sdkEphemeralPublicKey: "invalid-key",
messageVersion: "messageVersion"
)
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = {
$1(.success(
AuthenticationRequestParametersMock(
deviceInformation: "device_info",
sdkApplicationIdentifier: "sdkApplicationIdentifier",
sdkTransactionIdentifier: "sdkTransactionIdentifier",
sdkReferenceNumber: "sdkReferenceNumber",
sdkEphemeralPublicKey: "invalid-key",
messageVersion: "messageVersion"
))
)
}

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")

Expand Down Expand Up @@ -379,8 +367,8 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
let mockedDetails = ThreeDS2Details.completed(ThreeDSResult(payload: "payload"))
submitter.mockedResult = .success(.details(mockedDetails))

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
let analyticsProviderMock = AnalyticsProviderMock()
Expand Down Expand Up @@ -429,8 +417,8 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {
let redirectAction = RedirectAction(url: URL(string: "https://www.adyen.com")!, paymentData: "data")
submitter.mockedResult = .success(.action(.redirect(redirectAction)))

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
let sut = ThreeDS2CompactActionHandler(context: Dummy.context, fingerprintSubmitter: submitter, service: service)
Expand Down Expand Up @@ -462,8 +450,8 @@ class ThreeDS2CompactActionHandlerTests: XCTestCase {

submitter.mockedResult = .failure(Dummy.error)

let service = AnyADYServiceMock()
service.authenticationRequestParameters = authenticationRequestParameters
let service = ThreeDSServiceableMock()
service.onPerformFingerprint = { $1(.success(self.authenticationRequestParameters)) }

let resultExpectation = expectation(description: "Expect ThreeDS2ActionHandler completion closure to be called.")
let sut = ThreeDS2CompactActionHandler(context: Dummy.context, fingerprintSubmitter: submitter, service: service)
Expand Down
Loading

0 comments on commit 95ade4b

Please sign in to comment.