diff --git a/Examples/xx-messenger/Sources/AppCore/SendMessage/SendGroupMessage.swift b/Examples/xx-messenger/Sources/AppCore/SendMessage/SendGroupMessage.swift new file mode 100644 index 0000000000000000000000000000000000000000..65bceac997e7dbb7190d08376a1890ed54f7c4a8 --- /dev/null +++ b/Examples/xx-messenger/Sources/AppCore/SendMessage/SendGroupMessage.swift @@ -0,0 +1,44 @@ +import Foundation +import XCTestDynamicOverlay +import XXClient +import XXMessengerClient +import XXModels + +public struct SendGroupMessage { + public typealias OnError = (Error) -> Void + public typealias Completion = () -> Void + + public var run: (String, Data, @escaping OnError, @escaping Completion) -> Void + + public func callAsFunction( + text: String, + to groupId: Data, + onError: @escaping OnError, + completion: @escaping Completion + ) { + run(text, groupId, onError, completion) + } +} + +extension SendGroupMessage { + public static func live( + messenger: Messenger, + db: DBManagerGetDB, + now: @escaping () -> Date + ) -> SendGroupMessage { + SendGroupMessage { text, groupId, onError, completion in + // TODO: implement sending group message + struct Unimplemented: Error, LocalizedError { + var errorDescription: String? { "SendGroupMessage is not implemented!" } + } + onError(Unimplemented()) + completion() + } + } +} + +extension SendGroupMessage { + public static let unimplemented = SendGroupMessage( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Examples/xx-messenger/Tests/AppCoreTests/SendMessage/SendGroupMessageTests.swift b/Examples/xx-messenger/Tests/AppCoreTests/SendMessage/SendGroupMessageTests.swift new file mode 100644 index 0000000000000000000000000000000000000000..a53e5e35e49a1fda9f12a0a11b751951da4a2df5 --- /dev/null +++ b/Examples/xx-messenger/Tests/AppCoreTests/SendMessage/SendGroupMessageTests.swift @@ -0,0 +1,55 @@ +import CustomDump +import XCTest +import XCTestDynamicOverlay +import XXClient +import XXMessengerClient +import XXModels +@testable import AppCore + +final class SendGroupMessageTests: XCTestCase { + enum Action: Equatable { + case didReceiveError(String) + case didComplete + } + + var actions: [Action]! + + override func setUp() { + actions = [] + } + + override func tearDown() { + actions = nil + } + + func testSend() { + let text = "Hello!" + let groupId = "group-id".data(using: .utf8)! + + var messenger: Messenger = .unimplemented + var db: DBManagerGetDB = .unimplemented + let now = Date() + let send: SendGroupMessage = .live( + messenger: messenger, + db: db, + now: { now } + ) + + send( + text: text, + to: groupId, + onError: { error in + self.actions.append(.didReceiveError(error.localizedDescription)) + }, + completion: { + self.actions.append(.didComplete) + } + ) + + XCTAssertNoDifference(actions, [ + .didReceiveError("SendGroupMessage is not implemented!"), + .didComplete + ]) + } +} +