pscbonline-ios/PSCBOnlineTests/Serializable/PKPaymentToken+Serializable...

110 lines
2.7 KiB
Swift
Raw Normal View History

2024-07-08 15:20:00 +03:00
//
// PKPaymentToken+SerializableTests.swift
// PSCB-OOS-iOSTests
//
// Created by Antonov Ilia on 22.10.2020.
//
#if canImport(PassKit)
import Foundation
import PassKit
import XCTest
@testable import PSCBOnline
final class PKPaymentTokenSerializableTests: XCTestCase {
// MARK: - Test .serializeToJSON()
func testPaymentTokenSerialization() {
// given:
let token = MockPaymentToken.createToken()
// when:
let json = token.serializeToJSON()
print("JSON: >>")
print(json)
// then:
XCTAssertEqual(json["transactionIdentifier"], "2C7B4FD8-7D1B-49D4-8AB5-AFE3CC79265A")
// and:
let method = json["paymentMethod"]
let network = (method as! [String: AnyHashable])["network"] ?? "N/A" as AnyHashable
XCTAssertEqual(network, "Visa" as AnyHashable)
}
// MARK: - Test .serializeToData()
func testSerializeToData() {
// given:
let token = MockPaymentToken.createToken()
// expect:
XCTAssertNoThrow(try token.serializeToData())
}
// MARK: - Test .serializeToString()
func testSerializeToString() {
// given:
let token = MockPaymentToken.createToken()
// expect:
XCTAssertNoThrow(try token.serializeToString())
// when:
let json = try! token.serializeToString()
// debug:
print("JSON: >>")
print(json)
}
// MARK: - Test PKPaymentToken.toCryptogramString()
func testToCryptogramString() {
// given:
let token = MockPaymentToken.createToken()
// expect:
XCTAssertNoThrow(try token.toCryptogramString())
// when:
let string = try! token.toCryptogramString()
// debug:
print("Cryptogram String: >> \(string)")
// then:
XCTAssertFalse(string.isEmpty)
// when:
let data = Data(base64Encoded: string, options: Data.Base64DecodingOptions(rawValue: 0))!
// debug:
print("Decoded >>")
print(String(data: data, encoding: .utf8)!)
// and:
let decoder = JSONDecoder()
let output = try! decoder.decode(PaymentTokenResult.self, from: data)
// then:
XCTAssertEqual(output.version, "EC_v1")
XCTAssertEqual(output.signature, "....")
}
}
internal struct PaymentTokenResult: Decodable {
let data: String
let version: String
let signature: String
}
internal struct PaymentMethodResult: Decodable {
let displayName: String
let network: String
let type: String
}
#endif