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