From 64e348f1f507274f95712ad95bd9984426c8d4ff Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 21 Nov 2022 11:29:07 +0100 Subject: [PATCH] Add MessengerRegisterGroupRequestHandler --- ...MessengerRegisterGroupRequestHandler.swift | 24 +++++++++++++ .../Messenger/Messenger.swift | 3 ++ ...ngerRegisterGroupRequestHandlerTests.swift | 34 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterGroupRequestHandler.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterGroupRequestHandlerTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterGroupRequestHandler.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterGroupRequestHandler.swift new file mode 100644 index 00000000..d298952d --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterGroupRequestHandler.swift @@ -0,0 +1,24 @@ +import XCTestDynamicOverlay +import XXClient + +public struct MessengerRegisterGroupRequestHandler { + public var run: (GroupRequest) -> Cancellable + + public func callAsFunction(_ handler: GroupRequest) -> Cancellable { + run(handler) + } +} + +extension MessengerRegisterGroupRequestHandler { + public static func live(_ env: MessengerEnvironment) -> MessengerRegisterGroupRequestHandler { + MessengerRegisterGroupRequestHandler { handler in + env.groupRequests.register(handler) + } + } +} + +extension MessengerRegisterGroupRequestHandler { + public static let unimplemented = MessengerRegisterGroupRequestHandler( + run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {}) + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 8a29ed6a..4e5585ac 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -49,6 +49,7 @@ public struct Messenger { public var receiveFile: MessengerReceiveFile public var trackServices: MessengerTrackServices public var getNotificationReports: MessengerGetNotificationReports + public var registerGroupRequestHandler: MessengerRegisterGroupRequestHandler public var startGroupChat: MessengerStartGroupChat } @@ -103,6 +104,7 @@ extension Messenger { receiveFile: .live(env), trackServices: .live(env), getNotificationReports: .live(env), + registerGroupRequestHandler: .live(env), startGroupChat: .live(env) ) } @@ -158,6 +160,7 @@ extension Messenger { receiveFile: .unimplemented, trackServices: .unimplemented, getNotificationReports: .unimplemented, + registerGroupRequestHandler: .unimplemented, startGroupChat: .unimplemented ) } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterGroupRequestHandlerTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterGroupRequestHandlerTests.swift new file mode 100644 index 00000000..0bca164c --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterGroupRequestHandlerTests.swift @@ -0,0 +1,34 @@ +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerRegisterGroupRequestHandlerTests: XCTestCase { + func testRegister() { + var registered: [GroupRequest] = [] + var didHandle: [Group] = [] + var didCancel = 0 + + var env: MessengerEnvironment = .unimplemented + env.groupRequests.register = { handler in + registered.append(handler) + return Cancellable { didCancel += 1 } + } + let register: MessengerRegisterGroupRequestHandler = .live(env) + let cancellable = register(.init { group in + didHandle.append(group) + }) + + XCTAssertEqual(registered.count, 1) + + let group = Group.stub(1) + registered.forEach { handler in + handler.handle(group) + } + + XCTAssertEqual(didHandle.map { $0.getId() }, [group.getId()]) + + cancellable.cancel() + + XCTAssertEqual(didCancel, 1) + } +} -- GitLab