From 90d138212a3a14cdb7bba327ec29eb5645b2a467 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:27:49 +0200 Subject: [PATCH] Add Message codable model --- Sources/ElixxirDAppsSDK/Message.swift | 49 +++++++++++++++++++ Tests/ElixxirDAppsSDKTests/MessageTests.swift | 48 ++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Message.swift create mode 100644 Tests/ElixxirDAppsSDKTests/MessageTests.swift diff --git a/Sources/ElixxirDAppsSDK/Message.swift b/Sources/ElixxirDAppsSDK/Message.swift new file mode 100644 index 00000000..b6fc6c4c --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Message.swift @@ -0,0 +1,49 @@ +import Foundation + +public struct Message: Equatable { + public init( + messageType: Int, + id: Data, + payload: Data, + sender: Data, + recipientId: Data, + ephemeralId: Int, + timestamp: Int, + encrypted: Bool, + roundId: Int + ) { + self.messageType = messageType + self.id = id + self.payload = payload + self.sender = sender + self.recipientId = recipientId + self.ephemeralId = ephemeralId + self.timestamp = timestamp + self.encrypted = encrypted + self.roundId = roundId + } + + public var messageType: Int + public var id: Data + public var payload: Data + public var sender: Data + public var recipientId: Data + public var ephemeralId: Int + public var timestamp: Int + public var encrypted: Bool + public var roundId: Int +} + +extension Message: Codable { + enum CodingKeys: String, CodingKey { + case messageType = "MessageType" + case id = "ID" + case payload = "Payload" + case sender = "Sender" + case recipientId = "RecipientID" + case ephemeralId = "EphemeralID" + case timestamp = "Timestamp" + case encrypted = "Encrypted" + case roundId = "RoundId" + } +} diff --git a/Tests/ElixxirDAppsSDKTests/MessageTests.swift b/Tests/ElixxirDAppsSDKTests/MessageTests.swift new file mode 100644 index 00000000..c01a880f --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/MessageTests.swift @@ -0,0 +1,48 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class MessageTests: XCTestCase { + func testCoding() throws { + let id = secureRandomData(count: 32) + let payload = secureRandomData(count: 32) + let sender = secureRandomData(count: 32) + let recipientId = secureRandomData(count: 32) + let jsonString = """ + { + "MessageType": 1, + "ID": \(id.jsonEncodedBase64()), + "Payload": \(payload.jsonEncodedBase64()), + "Sender": \(sender.jsonEncodedBase64()), + "RecipientID": \(recipientId.jsonEncodedBase64()), + "EphemeralID": 17, + "Timestamp": 1653580439357351000, + "Encrypted": false, + "RoundId": 19 + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let message = try decoder.decode(Message.self, from: jsonData) + + XCTAssertNoDifference(message, Message( + messageType: 1, + id: id, + payload: payload, + sender: sender, + recipientId: recipientId, + ephemeralId: 17, + timestamp: 1_653_580_439_357_351_000, + encrypted: false, + roundId: 19 + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedMessage = try encoder.encode(message) + let decodedMessage = try decoder.decode(Message.self, from: encodedMessage) + + XCTAssertNoDifference(decodedMessage, message) + } +} -- GitLab