From 5a258fcd289fb6a75c0ec5b585841cc09075c7b6 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 28 Sep 2022 13:34:28 +0200 Subject: [PATCH] Add MessengerStopBackup function --- .../Functions/MessengerStopBackup.swift | 26 +++++++++ .../Messenger/Messenger.swift | 7 ++- .../Functions/MessengerStopBackupTests.swift | 53 +++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift new file mode 100644 index 00000000..f5471166 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift @@ -0,0 +1,26 @@ +import Bindings +import XCTestDynamicOverlay + +public struct MessengerStopBackup { + public var run: () throws -> Void + + public func callAsFunction() throws { + try run() + } +} + +extension MessengerStopBackup { + public static func live(_ env: MessengerEnvironment) -> MessengerStopBackup { + MessengerStopBackup { + guard let backup = env.backup() else { return } + try backup.stop() + env.backup.set(nil) + } + } +} + +extension MessengerStopBackup { + public static let unimplemented = MessengerStopBackup( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 9e373e0b..bc1c8bde 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -31,6 +31,7 @@ public struct Messenger { public var sendMessage: MessengerSendMessage public var registerBackupCallback: MessengerRegisterBackupCallback public var isBackupRunning: MessengerIsBackupRunning + public var stopBackup: MessengerStopBackup } extension Messenger { @@ -65,7 +66,8 @@ extension Messenger { verifyContact: .live(env), sendMessage: .live(env), registerBackupCallback: .live(env), - isBackupRunning: .live(env) + isBackupRunning: .live(env), + stopBackup: .live(env) ) } } @@ -101,6 +103,7 @@ extension Messenger { verifyContact: .unimplemented, sendMessage: .unimplemented, registerBackupCallback: .unimplemented, - isBackupRunning: .unimplemented + isBackupRunning: .unimplemented, + stopBackup: .unimplemented ) } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift new file mode 100644 index 00000000..306b6c2d --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift @@ -0,0 +1,53 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerStopBackupTests: XCTestCase { + func testStop() throws { + var didStopBackup = 0 + var didSetBackup: [Backup?] = [] + + var env: MessengerEnvironment = .unimplemented + env.backup.get = { + var backup: Backup = .unimplemented + backup.stop.run = { didStopBackup += 1 } + return backup + } + env.backup.set = { backup in + didSetBackup.append(backup) + } + let stop: MessengerStopBackup = .live(env) + + try stop() + + XCTAssertEqual(didStopBackup, 1) + XCTAssertEqual(didSetBackup.count, 1) + XCTAssertNil(didSetBackup.first as? Backup) + } + + func testStopFailure() { + struct Failure: Error, Equatable {} + let failure = Failure() + + var env: MessengerEnvironment = .unimplemented + env.backup.get = { + var backup: Backup = .unimplemented + backup.stop.run = { throw failure } + return backup + } + let stop: MessengerStopBackup = .live(env) + + XCTAssertThrowsError(try stop()) { error in + XCTAssertNoDifference(error as NSError, failure as NSError) + } + } + + func testStopWithoutBackup() throws { + var env: MessengerEnvironment = .unimplemented + env.backup.get = { nil } + let stop: MessengerStopBackup = .live(env) + + try stop() + } +} -- GitLab