diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterBackupCallback.swift new file mode 100644 index 0000000000000000000000000000000000000000..f7c9a251072b04f28f7c12f527e42be7174dce15 --- /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 ea85852c6752e30af60987264851d57af910e811..030aefb5c6df1b60686148bd2ba451c6f4edb017 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 641a8062d3f9ae136192af38b2814fe14cafccb9..f6f9a8263cf735031f3e6eaa42a3adf7d4413c0c 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 0000000000000000000000000000000000000000..44e7e21c2bbac9badafd94370a595fea209da2f9 --- /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) + } +}