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