From ed1683a8de6607722dd0f05665ca309c33e5fd39 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 26 Jul 2022 17:24:10 +0100 Subject: [PATCH] Add ReceivedFile model --- .../ElixxirDAppsSDK/Models/ReceivedFile.swift | 45 +++++++++++++++++++ .../Models/ReceivedFileTests.swift | 40 +++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Models/ReceivedFile.swift create mode 100644 Tests/ElixxirDAppsSDKTests/Models/ReceivedFileTests.swift diff --git a/Sources/ElixxirDAppsSDK/Models/ReceivedFile.swift b/Sources/ElixxirDAppsSDK/Models/ReceivedFile.swift new file mode 100644 index 00000000..d5c12370 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Models/ReceivedFile.swift @@ -0,0 +1,45 @@ +import Foundation + +public struct ReceivedFile: Equatable { + public init( + transferId: Data, + senderId: Data, + preview: Data, + name: String, + type: String, + size: Int + ) { + self.transferId = transferId + self.senderId = senderId + self.preview = preview + self.name = name + self.type = type + self.size = size + } + + public var transferId: Data + public var senderId: Data + public var preview: Data + public var name: String + public var type: String + public var size: Int +} + +extension ReceivedFile: Codable { + enum CodingKeys: String, CodingKey { + case transferId = "TransferID" + case senderId = "SenderID" + case preview = "Preview" + case name = "Name" + case type = "Type" + case size = "Size" + } + + public static func decode(_ data: Data) throws -> Self { + try JSONDecoder().decode(Self.self, from: data) + } + + public func encode() throws -> Data { + try JSONEncoder().encode(self) + } +} diff --git a/Tests/ElixxirDAppsSDKTests/Models/ReceivedFileTests.swift b/Tests/ElixxirDAppsSDKTests/Models/ReceivedFileTests.swift new file mode 100644 index 00000000..2e82fef0 --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/Models/ReceivedFileTests.swift @@ -0,0 +1,40 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class ReceivedFileTests: XCTestCase { + func testCoding() throws { + let transferIdB64 = "B4Z9cwU18beRoGbk5xBjbcd5Ryi9ZUFA2UBvi8FOHWo=" + let senderIdB64 = "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD" + let previewB64 = "aXQncyBtZSBhIHByZXZpZXc=" + let name = "testfile.txt" + let type = "text file" + let size: Int = 2048 + let jsonString = """ + { + "TransferID": "\(transferIdB64)", + "SenderID": "\(senderIdB64)", + "Preview": "\(previewB64)", + "Name": "\(name)", + "Type": "\(type)", + "Size": \(size) + } + """ + let jsonData = jsonString.data(using: .utf8)! + let receivedFile = try ReceivedFile.decode(jsonData) + + XCTAssertNoDifference(receivedFile, ReceivedFile( + transferId: Data(base64Encoded: transferIdB64)!, + senderId: Data(base64Encoded: senderIdB64)!, + preview: Data(base64Encoded: previewB64)!, + name: name, + type: type, + size: size + )) + + let encodedReceivedFile = try receivedFile.encode() + let decodedReceivedFile = try ReceivedFile.decode(encodedReceivedFile) + + XCTAssertNoDifference(decodedReceivedFile, receivedFile) + } +} -- GitLab