From 7113f386ae66fc4290bdbe078b710e4df801621c Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 26 Aug 2022 00:25:23 +0100 Subject: [PATCH] Add MessengerRegisterAuthCallbacks functor --- .../MessengerRegisterAuthCallbacks.swift | 24 +++++++++++++ .../Messenger/Messenger.swift | 3 ++ .../Messenger/MessengerEnvironment.swift | 3 ++ .../MessengerRegisterAuthCallbacksTests.swift | 36 +++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functors/MessengerRegisterAuthCallbacks.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterAuthCallbacksTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerRegisterAuthCallbacks.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerRegisterAuthCallbacks.swift new file mode 100644 index 00000000..ad184957 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerRegisterAuthCallbacks.swift @@ -0,0 +1,24 @@ +import XXClient +import XCTestDynamicOverlay + +public struct MessengerRegisterAuthCallbacks { + public var run: (AuthCallbacks) -> Cancellable + + public func callAsFunction(_ authCallbacks: AuthCallbacks) -> Cancellable { + run(authCallbacks) + } +} + +extension MessengerRegisterAuthCallbacks { + public static func live(_ env: MessengerEnvironment) -> MessengerRegisterAuthCallbacks { + MessengerRegisterAuthCallbacks { callback in + env.authCallbacks.register(callback) + } + } +} + +extension MessengerRegisterAuthCallbacks { + public static let unimplemented = MessengerRegisterAuthCallbacks( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 30d63efd..c9563fe8 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -8,6 +8,7 @@ public struct Messenger { public var create: MessengerCreate public var isLoaded: MessengerIsLoaded public var load: MessengerLoad + public var registerAuthCallbacks: MessengerRegisterAuthCallbacks public var start: MessengerStart public var isConnected: MessengerIsConnected public var connect: MessengerConnect @@ -29,6 +30,7 @@ extension Messenger { create: .live(env), isLoaded: .live(env), load: .live(env), + registerAuthCallbacks: .live(env), start: .live(env), isConnected: .live(env), connect: .live(env), @@ -51,6 +53,7 @@ extension Messenger { create: .unimplemented, isLoaded: .unimplemented, load: .unimplemented, + registerAuthCallbacks: .unimplemented, start: .unimplemented, isConnected: .unimplemented, connect: .unimplemented, diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index 6ac78b1e..ad94b5ce 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -3,6 +3,7 @@ import XXClient import XCTestDynamicOverlay public struct MessengerEnvironment { + public var authCallbacks: AuthCallbacksRegistry public var cMix: Stored<CMix?> public var downloadNDF: DownloadAndVerifySignedNdf public var e2e: Stored<E2E?> @@ -34,6 +35,7 @@ extension MessengerEnvironment { public static func live() -> MessengerEnvironment { MessengerEnvironment( + authCallbacks: .live(), cMix: .inMemory(), downloadNDF: .live, e2e: .inMemory(), @@ -60,6 +62,7 @@ extension MessengerEnvironment { extension MessengerEnvironment { public static let unimplemented = MessengerEnvironment( + authCallbacks: .unimplemented, cMix: .unimplemented(), downloadNDF: .unimplemented, e2e: .unimplemented(), diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterAuthCallbacksTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterAuthCallbacksTests.swift new file mode 100644 index 00000000..d7903e2f --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerRegisterAuthCallbacksTests.swift @@ -0,0 +1,36 @@ +import XCTest +import XXClient +@testable import XXMessengerClient +import CustomDump + +final class MessengerRegisterAuthCallbacksTests: XCTestCase { + func testRegisterAuthCallbacks() { + var registeredAuthCallbacks: [AuthCallbacks] = [] + var didHandleCallbacks: [AuthCallbacks.Callback] = [] + var didCancelRegisteredAuthCallbacks = 0 + + var env: MessengerEnvironment = .unimplemented + env.authCallbacks.register = { authCallbacks in + registeredAuthCallbacks.append(authCallbacks) + return Cancellable { didCancelRegisteredAuthCallbacks += 1 } + } + let registerAuthCallbacks: MessengerRegisterAuthCallbacks = .live(env) + let cancellable = registerAuthCallbacks(AuthCallbacks { callback in + didHandleCallbacks.append(callback) + }) + + XCTAssertEqual(registeredAuthCallbacks.count, 1) + + registeredAuthCallbacks.forEach { authCallbacks in + [AuthCallbacks.Callback].stubs.forEach { callback in + authCallbacks.handle(callback) + } + } + + XCTAssertNoDifference(didHandleCallbacks, .stubs) + + cancellable.cancel() + + XCTAssertEqual(didCancelRegisteredAuthCallbacks, 1) + } +} -- GitLab