From 0f47f000e08722b6551b31cac3d8e09d14137332 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 28 Sep 2022 13:18:31 +0200 Subject: [PATCH] Add MessengerRegisterBackupCallback function --- .../MessengerRegisterBackupCallback.swift | 24 +++++++++++++ .../Messenger/Messenger.swift | 7 ++-- .../Messenger/MessengerEnvironment.swift | 3 ++ ...MessengerRegisterBackupCallbackTests.swift | 34 +++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterBackupCallbackTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift new file mode 100644 index 00000000..f7c9a251 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift @@ -0,0 +1,24 @@ +import XCTestDynamicOverlay +import XXClient + +public struct MessengerRegisterBackupCallback { + public var run: (UpdateBackupFunc) -> Cancellable + + public func callAsFunction(_ callback: UpdateBackupFunc) -> Cancellable { + run(callback) + } +} + +extension MessengerRegisterBackupCallback { + public static func live(_ env: MessengerEnvironment) -> MessengerRegisterBackupCallback { + MessengerRegisterBackupCallback { callback in + env.backupCallbacks.register(callback) + } + } +} + +extension MessengerRegisterBackupCallback { + public static let unimplemented = MessengerRegisterBackupCallback( + run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {}) + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index ea85852c..030aefb5 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -29,6 +29,7 @@ public struct Messenger { public var registerForNotifications: MessengerRegisterForNotifications public var verifyContact: MessengerVerifyContact public var sendMessage: MessengerSendMessage + public var registerBackupCallback: MessengerRegisterBackupCallback } extension Messenger { @@ -61,7 +62,8 @@ extension Messenger { lookupContacts: .live(env), registerForNotifications: .live(env), verifyContact: .live(env), - sendMessage: .live(env) + sendMessage: .live(env), + registerBackupCallback: .live(env) ) } } @@ -95,6 +97,7 @@ extension Messenger { lookupContacts: .unimplemented, registerForNotifications: .unimplemented, verifyContact: .unimplemented, - sendMessage: .unimplemented + sendMessage: .unimplemented, + registerBackupCallback: .unimplemented ) } diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index 641a8062..f6f9a826 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -4,6 +4,7 @@ import XCTestDynamicOverlay public struct MessengerEnvironment { public var authCallbacks: AuthCallbacksRegistry + public var backupCallbacks: BackupCallbacksRegistry public var cMix: Stored<CMix?> public var downloadNDF: DownloadAndVerifySignedNdf public var e2e: Stored<E2E?> @@ -45,6 +46,7 @@ extension MessengerEnvironment { public static func live() -> MessengerEnvironment { MessengerEnvironment( authCallbacks: .live(), + backupCallbacks: .live(), cMix: .inMemory(), downloadNDF: .live, e2e: .inMemory(), @@ -81,6 +83,7 @@ extension MessengerEnvironment { extension MessengerEnvironment { public static let unimplemented = MessengerEnvironment( authCallbacks: .unimplemented, + backupCallbacks: .unimplemented, cMix: .unimplemented(), downloadNDF: .unimplemented, e2e: .unimplemented(), diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterBackupCallbackTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterBackupCallbackTests.swift new file mode 100644 index 00000000..44e7e21c --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterBackupCallbackTests.swift @@ -0,0 +1,34 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerRegisterBackupCallbackTests: XCTestCase { + func testRegisterBackupCallback() { + var registeredCallbacks: [UpdateBackupFunc] = [] + var didHandleData: [Data] = [] + var didCancelRegisteredCallback = 0 + + var env: MessengerEnvironment = .unimplemented + env.backupCallbacks.register = { callback in + registeredCallbacks.append(callback) + return Cancellable { didCancelRegisteredCallback += 1 } + } + let registerBackupCallback: MessengerRegisterBackupCallback = .live(env) + let cancellable = registerBackupCallback(UpdateBackupFunc { data in + didHandleData.append(data) + }) + + XCTAssertEqual(registeredCallbacks.count, 1) + + registeredCallbacks.forEach { callback in + callback.handle("test".data(using: .utf8)!) + } + + XCTAssertNoDifference(didHandleData, ["test".data(using: .utf8)!]) + + cancellable.cancel() + + XCTAssertEqual(didCancelRegisteredCallback, 1) + } +} -- GitLab