110 lines
2.7 KiB
Swift
110 lines
2.7 KiB
Swift
//
|
|
// 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
|