From 2edf739af1f1d322c45fe31db195c7de0f48a5d2 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 17 Oct 2022 00:38:49 +0200 Subject: [PATCH] Add MessengerRegisterReceiveFileCallback function --- ...MessengerRegisterReceiveFileCallback.swift | 24 +++++++++++++ .../Messenger/Messenger.swift | 3 ++ ...ngerRegisterReceiveFileCallbackTests.swift | 34 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift new file mode 100644 index 00000000..42d56389 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift @@ -0,0 +1,24 @@ +import XCTestDynamicOverlay +import XXClient + +public struct MessengerRegisterReceiveFileCallback { + public var run: (ReceiveFileCallback) -> Cancellable + + public func callAsFunction(_ callback: ReceiveFileCallback) -> Cancellable { + run(callback) + } +} + +extension MessengerRegisterReceiveFileCallback { + public static func live(_ env: MessengerEnvironment) -> MessengerRegisterReceiveFileCallback { + MessengerRegisterReceiveFileCallback { callback in + env.receiveFileCallbacksRegistry.register(callback) + } + } +} + +extension MessengerRegisterReceiveFileCallback { + public static let unimplemented = MessengerRegisterReceiveFileCallback( + run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {}) + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 793daab0..d565ebb2 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -40,6 +40,7 @@ public struct Messenger { public var stopBackup: MessengerStopBackup public var setLogLevel: MessengerSetLogLevel public var startLogging: MessengerStartLogging + public var registerReceiveFileCallback: MessengerRegisterReceiveFileCallback public var startFileTransfer: MessengerStartFileTransfer public var sendFile: MessengerSendFile public var receiveFile: MessengerReceiveFile @@ -87,6 +88,7 @@ extension Messenger { stopBackup: .live(env), setLogLevel: .live(env), startLogging: .live(env), + registerReceiveFileCallback: .live(env), startFileTransfer: .live(env), sendFile: .live(env), receiveFile: .live(env) @@ -135,6 +137,7 @@ extension Messenger { stopBackup: .unimplemented, setLogLevel: .unimplemented, startLogging: .unimplemented, + registerReceiveFileCallback: .unimplemented, startFileTransfer: .unimplemented, sendFile: .unimplemented, receiveFile: .unimplemented diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift new file mode 100644 index 00000000..c30bb10a --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift @@ -0,0 +1,34 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerRegisterReceiveFileCallbackTests: XCTestCase { + func testRegisterCallback() { + var registeredCallbacks: [ReceiveFileCallback] = [] + var didHandleResult: [ReceiveFileCallback.Result] = [] + var didCancelRegisteredCallback = 0 + + var env: MessengerEnvironment = .unimplemented + env.receiveFileCallbacksRegistry.register = { callback in + registeredCallbacks.append(callback) + return Cancellable { didCancelRegisteredCallback += 1 } + } + let registerCallback: MessengerRegisterReceiveFileCallback = .live(env) + let cancellable = registerCallback(ReceiveFileCallback { result in + didHandleResult.append(result) + }) + + XCTAssertEqual(registeredCallbacks.count, 1) + + registeredCallbacks.forEach { callback in + callback.handle(.success(.stub(1))) + } + + XCTAssertNoDifference(didHandleResult, [.success(.stub(1))]) + + cancellable.cancel() + + XCTAssertEqual(didCancelRegisteredCallback, 1) + } +} -- GitLab