From f01aa47c42a205b7dfa6e315ed0a73c0b13b286a Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Tue, 26 Jul 2022 16:54:16 +0100
Subject: [PATCH] Add EventReport model

---
 .../ElixxirDAppsSDK/Models/EventReport.swift  | 37 +++++++++++++++++++
 .../Models/EventReportTests.swift             | 35 ++++++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 Sources/ElixxirDAppsSDK/Models/EventReport.swift
 create mode 100644 Tests/ElixxirDAppsSDKTests/Models/EventReportTests.swift

diff --git a/Sources/ElixxirDAppsSDK/Models/EventReport.swift b/Sources/ElixxirDAppsSDK/Models/EventReport.swift
new file mode 100644
index 00000000..9802daa0
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Models/EventReport.swift
@@ -0,0 +1,37 @@
+import Foundation
+
+public struct EventReport: Equatable {
+  public init(
+    priority: Int,
+    category: String,
+    eventType: String,
+    details: String
+  ) {
+    self.priority = priority
+    self.category = category
+    self.eventType = eventType
+    self.details = details
+  }
+
+  public var priority: Int
+  public var category: String
+  public var eventType: String
+  public var details: String
+}
+
+extension EventReport: Codable {
+  enum CodingKeys: String, CodingKey {
+    case priority = "Priority"
+    case category = "Category"
+    case eventType = "EventType"
+    case details = "Details"
+  }
+
+  public static func decode(_ data: Data) throws -> EventReport {
+    try JSONDecoder().decode(Self.self, from: data)
+  }
+
+  public func encode() throws -> Data {
+    try JSONEncoder().encode(self)
+  }
+}
diff --git a/Tests/ElixxirDAppsSDKTests/Models/EventReportTests.swift b/Tests/ElixxirDAppsSDKTests/Models/EventReportTests.swift
new file mode 100644
index 00000000..5c73f8da
--- /dev/null
+++ b/Tests/ElixxirDAppsSDKTests/Models/EventReportTests.swift
@@ -0,0 +1,35 @@
+import CustomDump
+import XCTest
+@testable import ElixxirDAppsSDK
+
+final class EventReportTests: XCTestCase {
+  func testCoding() throws {
+    let priority: Int = 1
+    let category = "Test Events"
+    let eventType = "Ping"
+    let details = "This is an example of an event report"
+    let jsonString = """
+    {
+      "Priority": \(priority),
+      "Category": "\(category)",
+      "EventType": "\(eventType)",
+      "Details": "\(details)"
+    }
+    """
+    let jsonData = jsonString.data(using: .utf8)!
+
+    let report = try EventReport.decode(jsonData)
+
+    XCTAssertNoDifference(report, EventReport(
+      priority: priority,
+      category: category,
+      eventType: eventType,
+      details: details
+    ))
+
+    let encodedReport = try report.encode()
+    let decodedReport = try EventReport.decode(encodedReport)
+
+    XCTAssertNoDifference(decodedReport, report)
+  }
+}
-- 
GitLab