Skip to content
Snippets Groups Projects
Commit 77ea7928 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add SingleUseResponseReport model

parent 0b4ffdb4
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
import Foundation
public struct SingleUseResponseReport: Equatable {
public init(
rounds: [Int],
payload: Data,
receptionId: ReceptionId,
error: String?
) {
self.rounds = rounds
self.payload = payload
self.receptionId = receptionId
self.error = error
}
public var rounds: [Int]
public var payload: Data
public var receptionId: ReceptionId
public var error: String?
}
extension SingleUseResponseReport {
public struct ReceptionId: Equatable {
public init(
ephId: [Int],
source: Data
) {
self.ephId = ephId
self.source = source
}
public var ephId: [Int]
public var source: Data
}
}
extension SingleUseResponseReport: Codable {
enum CodingKeys: String, CodingKey {
case rounds = "Rounds"
case payload = "Payload"
case receptionId = "ReceptionID"
case error = "Err"
}
public static func decode(_ data: Data) throws -> Self {
try JSONDecoder().decode(Self.self, from: data)
}
public func encode() throws -> Data {
try JSONEncoder().encode(self)
}
}
extension SingleUseResponseReport.ReceptionId: Codable {
enum CodingKeys: String, CodingKey {
case ephId = "EphId"
case source = "Source"
}
}
import CustomDump
import XCTest
@testable import ElixxirDAppsSDK
final class SingleUseResponseReportTests: XCTestCase {
func testCoding() throws {
let rounds: [Int] = [1, 5, 9]
let payloadB64 = "rSuPD35ELWwm5KTR9ViKIz/r1YGRgXIl5792SF8o8piZzN6sT4Liq4rUU/nfOPvQEjbfWNh/NYxdJ72VctDnWw=="
let receptionIdEphId: [Int] = [0, 0, 0, 0, 0, 0, 3, 89]
let receptionIdSourceB64 = "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD"
let jsonString = """
{
"Rounds": [\(rounds.map { "\($0)" }.joined(separator: ", "))],
"Payload": "\(payloadB64)",
"ReceptionID": {
"EphId": [\(receptionIdEphId.map { "\($0)" }.joined(separator: ", "))],
"Source": "\(receptionIdSourceB64)"
},
"Err": null
}
"""
let jsonData = jsonString.data(using: .utf8)!
let report = try SingleUseResponseReport.decode(jsonData)
XCTAssertNoDifference(report, SingleUseResponseReport(
rounds: rounds,
payload: Data(base64Encoded: payloadB64)!,
receptionId: .init(
ephId: receptionIdEphId,
source: Data(base64Encoded: receptionIdSourceB64)!
),
error: nil
))
let encodedReport = try report.encode()
let decodedReport = try SingleUseResponseReport.decode(encodedReport)
XCTAssertNoDifference(decodedReport, report)
}
func testDecodingReportWithError() throws {
let rounds: [Int] = [1, 5, 9]
let payloadB64 = "rSuPD35ELWwm5KTR9ViKIz/r1YGRgXIl5792SF8o8piZzN6sT4Liq4rUU/nfOPvQEjbfWNh/NYxdJ72VctDnWw=="
let receptionIdEphId: [Int] = [0, 0, 0, 0, 0, 0, 3, 89]
let receptionIdSourceB64 = "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD"
let error = "something went wrong"
let jsonString = """
{
"Rounds": [\(rounds.map { "\($0)" }.joined(separator: ", "))],
"Payload": "\(payloadB64)",
"ReceptionID": {
"EphId": [\(receptionIdEphId.map { "\($0)" }.joined(separator: ", "))],
"Source": "\(receptionIdSourceB64)"
},
"Err": "\(error)"
}
"""
let jsonData = jsonString.data(using: .utf8)!
let report = try SingleUseResponseReport.decode(jsonData)
XCTAssertNoDifference(report, SingleUseResponseReport(
rounds: rounds,
payload: Data(base64Encoded: payloadB64)!,
receptionId: .init(
ephId: receptionIdEphId,
source: Data(base64Encoded: receptionIdSourceB64)!
),
error: error
))
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment