diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerBackupParams.swift new file mode 100644 index 0000000000000000000000000000000000000000..f5ac71f04d82b27fd3585acfbfe89b4372034ac2 --- /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 087bc40d1d56ba95cfb00e0f3238b8c98eaf7bd9..dab59a2f899d6f5fda66de280839a44b14ca88c7 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 0000000000000000000000000000000000000000..e0af7129f1f82f9c5fbce7b67d2ea4c3ff05060e --- /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 + ) + } + } +}