From 6fcb3a4fcbde172e04c590aed6af8da9b9581c29 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 21 Nov 2022 11:06:42 +0100 Subject: [PATCH] Add MessengerStartGroupChat --- .../Functions/MessengerStartGroupChat.swift | 36 +++++++++++++++ .../Messenger/Messenger.swift | 7 ++- .../Messenger/MessengerEnvironment.swift | 6 +++ .../MessengerStartGroupChatTests.swift | 44 +++++++++++++++++++ 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerStartGroupChat.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartGroupChatTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartGroupChat.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartGroupChat.swift new file mode 100644 index 00000000..4ae282b8 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartGroupChat.swift @@ -0,0 +1,36 @@ +import XXClient +import XCTestDynamicOverlay + +public struct MessengerStartGroupChat { + public enum Error: Swift.Error, Equatable { + case notConnected + } + + public var run: () throws -> Void + + public func callAsFunction() throws { + try run() + } +} + +extension MessengerStartGroupChat { + public static func live(_ env: MessengerEnvironment) -> MessengerStartGroupChat { + MessengerStartGroupChat { + guard let e2e = env.e2e.get() else { + throw Error.notConnected + } + let groupChat = try env.newGroupChat( + e2eId: e2e.getId(), + groupRequest: env.groupRequests.registered(), + groupChatProcessor: env.groupChatProcessors.registered() + ) + env.groupChat.set(groupChat) + } + } +} + +extension MessengerStartGroupChat { + public static let unimplemented = MessengerStartGroupChat( + run: XCTestDynamicOverlay.unimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 9261d264..c1f7f686 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -48,6 +48,7 @@ public struct Messenger { public var receiveFile: MessengerReceiveFile public var trackServices: MessengerTrackServices public var getNotificationReports: MessengerGetNotificationReports + public var startGroupChat: MessengerStartGroupChat } extension Messenger { @@ -99,7 +100,8 @@ extension Messenger { sendFile: .live(env), receiveFile: .live(env), trackServices: .live(env), - getNotificationReports: .live(env) + getNotificationReports: .live(env), + startGroupChat: .live(env) ) } } @@ -152,6 +154,7 @@ extension Messenger { sendFile: .unimplemented, receiveFile: .unimplemented, trackServices: .unimplemented, - getNotificationReports: .unimplemented + getNotificationReports: .unimplemented, + startGroupChat: .unimplemented ) } diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index 4e83f83b..dc146e2f 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -18,6 +18,7 @@ public struct MessengerEnvironment { public var getFileTransferParams: GetFileTransferParams public var getNotificationsReport: GetNotificationsReport public var getSingleUseParams: GetSingleUseParams + public var groupChat: Stored<GroupChat?> public var groupChatProcessors: GroupChatProcessorRegistry public var groupRequests: GroupRequestCallbacksRegistry public var initFileTransfer: InitFileTransfer @@ -33,6 +34,7 @@ public struct MessengerEnvironment { public var ndfEnvironment: NDFEnvironment public var newCMix: NewCMix public var newCMixFromBackup: NewCMixFromBackup + public var newGroupChat: NewGroupChat public var newOrLoadUd: NewOrLoadUd public var newUdManagerFromBackup: NewUdManagerFromBackup public var passwordStorage: PasswordStorage @@ -73,6 +75,7 @@ extension MessengerEnvironment { getFileTransferParams: .liveDefault, getNotificationsReport: .live, getSingleUseParams: .liveDefault, + groupChat: .inMemory(), groupChatProcessors: .live(), groupRequests: .live(), initFileTransfer: .live, @@ -88,6 +91,7 @@ extension MessengerEnvironment { ndfEnvironment: .mainnet, newCMix: .live, newCMixFromBackup: .live, + newGroupChat: .live, newOrLoadUd: .live, newUdManagerFromBackup: .live, passwordStorage: .keychain, @@ -123,6 +127,7 @@ extension MessengerEnvironment { getFileTransferParams: .unimplemented, getNotificationsReport: .unimplemented, getSingleUseParams: .unimplemented, + groupChat: .unimplemented(), groupChatProcessors: .unimplemented, groupRequests: .unimplemented, initFileTransfer: .unimplemented, @@ -138,6 +143,7 @@ extension MessengerEnvironment { ndfEnvironment: .unimplemented, newCMix: .unimplemented, newCMixFromBackup: .unimplemented, + newGroupChat: .unimplemented, newOrLoadUd: .unimplemented, newUdManagerFromBackup: .unimplemented, passwordStorage: .unimplemented, diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartGroupChatTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartGroupChatTests.swift new file mode 100644 index 00000000..aaf31929 --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartGroupChatTests.swift @@ -0,0 +1,44 @@ +import CustomDump +import XXClient +import XCTest +@testable import XXMessengerClient + +final class MessengerStartGroupChatTests: XCTestCase { + func testStart() throws { + var didCreateNewGroupChatWithE2eId: [Int] = [] + var didSetGroupChat: [GroupChat?] = [] + + let e2eId = 123 + var env: MessengerEnvironment = .unimplemented + env.e2e.get = { + var e2e: E2E = .unimplemented + e2e.getId.run = { e2eId } + return e2e + } + env.groupRequests.registered = { .unimplemented } + env.groupChatProcessors.registered = { .unimplemented } + env.newGroupChat.run = { e2eId, _, _ in + didCreateNewGroupChatWithE2eId.append(e2eId) + return .unimplemented + } + env.groupChat.set = { groupChat in + didSetGroupChat.append(groupChat) + } + let start: MessengerStartGroupChat = .live(env) + + try start() + + XCTAssertEqual(didCreateNewGroupChatWithE2eId, [e2eId]) + XCTAssertEqual(didSetGroupChat.map { $0 != nil }, [true]) + } + + func testStartWithoutE2E() throws { + var env: MessengerEnvironment = .unimplemented + env.e2e.get = { nil } + let start: MessengerStartGroupChat = .live(env) + + XCTAssertThrowsError(try start()) { error in + XCTAssertEqual(error as? MessengerStartGroupChat.Error, .notConnected) + } + } +} -- GitLab