From 712a6c512a392d7e7c76f32274c2910f4ffedcd4 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 28 Sep 2022 14:28:41 +0200 Subject: [PATCH] Add MessengerBackupParams function --- .../Functions/MessengerBackupParams.swift | 33 ++++++++++ .../Messenger/Messenger.swift | 3 + .../MessengerBackupParamsTests.swift | 62 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift new file mode 100644 index 00000000..f5ac71f0 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift @@ -0,0 +1,33 @@ +import Bindings +import XCTestDynamicOverlay + +public struct MessengerBackupParams { + public enum Error: Swift.Error, Equatable { + case notRunning + } + + public var run: (BackupParams) throws -> Void + + public func callAsFunction(_ params: BackupParams) throws { + try run(params) + } +} + +extension MessengerBackupParams { + public static func live(_ env: MessengerEnvironment) -> MessengerBackupParams { + MessengerBackupParams { params in + guard let backup = env.backup(), backup.isRunning() else { + throw Error.notRunning + } + let paramsData = try params.encode() + let paramsString = String(data: paramsData, encoding: .utf8)! + backup.addJSON(paramsString) + } + } +} + +extension MessengerBackupParams { + public static let unimplemented = MessengerBackupParams( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 087bc40d..dab59a2f 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -33,6 +33,7 @@ public struct Messenger { public var isBackupRunning: MessengerIsBackupRunning public var startBackup: MessengerStartBackup public var resumeBackup: MessengerResumeBackup + public var backupParams: MessengerBackupParams public var stopBackup: MessengerStopBackup } @@ -71,6 +72,7 @@ extension Messenger { isBackupRunning: .live(env), startBackup: .live(env), resumeBackup: .live(env), + backupParams: .live(env), stopBackup: .live(env) ) } @@ -110,6 +112,7 @@ extension Messenger { isBackupRunning: .unimplemented, startBackup: .unimplemented, resumeBackup: .unimplemented, + backupParams: .unimplemented, stopBackup: .unimplemented ) } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift new file mode 100644 index 00000000..e0af7129 --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerBackupParamsTests.swift @@ -0,0 +1,62 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerBackupParamsTests: XCTestCase { + func testBackupParams() throws { + var didAddJSON: [String] = [] + + var env: MessengerEnvironment = .unimplemented + env.backup.get = { + var backup: Backup = .unimplemented + backup.isRunning.run = { true } + backup.addJSON.run = { didAddJSON.append($0) } + return backup + } + let backup: MessengerBackupParams = .live(env) + let params = BackupParams( + username: "test-username", + email: "test-email", + phone: "test-phone" + ) + + try backup(params) + + XCTAssertNoDifference(didAddJSON, [ + String(data: try params.encode(), encoding: .utf8)! + ]) + } + + func testBackupParamsWhenNoBackup() { + var env: MessengerEnvironment = .unimplemented + env.backup.get = { nil } + let backup: MessengerBackupParams = .live(env) + let params = BackupParams(username: "test", email: nil, phone: nil) + + XCTAssertThrowsError(try backup(params)) { error in + XCTAssertNoDifference( + error as NSError, + MessengerBackupParams.Error.notRunning as NSError + ) + } + } + + func testBackupParamsWhenBackupNotRunning() { + var env: MessengerEnvironment = .unimplemented + env.backup.get = { + var backup: Backup = .unimplemented + backup.isRunning.run = { false } + return backup + } + let backup: MessengerBackupParams = .live(env) + let params = BackupParams(username: "test", email: nil, phone: nil) + + XCTAssertThrowsError(try backup(params)) { error in + XCTAssertNoDifference( + error as NSError, + MessengerBackupParams.Error.notRunning as NSError + ) + } + } +} -- GitLab