Skip to content
Snippets Groups Projects
Commit 8120d8c0 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Use SendGroupMessage in ChatComponent

parent cf7f9079
No related branches found
No related tags found
2 merge requests!153Release 1.1.0,!152[Messenger example] group chat
...@@ -12,6 +12,7 @@ public struct AppDependencies { ...@@ -12,6 +12,7 @@ public struct AppDependencies {
public var bgQueue: AnySchedulerOf<DispatchQueue> public var bgQueue: AnySchedulerOf<DispatchQueue>
public var now: () -> Date public var now: () -> Date
public var sendMessage: SendMessage public var sendMessage: SendMessage
public var sendGroupMessage: SendGroupMessage
public var sendImage: SendImage public var sendImage: SendImage
public var messageListener: MessageListenerHandler public var messageListener: MessageListenerHandler
public var receiveFileHandler: ReceiveFileHandler public var receiveFileHandler: ReceiveFileHandler
...@@ -46,6 +47,11 @@ extension AppDependencies { ...@@ -46,6 +47,11 @@ extension AppDependencies {
db: dbManager.getDB, db: dbManager.getDB,
now: now now: now
), ),
sendGroupMessage: .live(
messenger: messenger,
db: dbManager.getDB,
now: now
),
sendImage: .live( sendImage: .live(
messenger: messenger, messenger: messenger,
db: dbManager.getDB, db: dbManager.getDB,
...@@ -85,6 +91,7 @@ extension AppDependencies { ...@@ -85,6 +91,7 @@ extension AppDependencies {
placeholder: Date(timeIntervalSince1970: 0) placeholder: Date(timeIntervalSince1970: 0)
), ),
sendMessage: .unimplemented, sendMessage: .unimplemented,
sendGroupMessage: .unimplemented,
sendImage: .unimplemented, sendImage: .unimplemented,
messageListener: .unimplemented, messageListener: .unimplemented,
receiveFileHandler: .unimplemented, receiveFileHandler: .unimplemented,
......
...@@ -78,6 +78,7 @@ public struct ChatComponent: ReducerProtocol { ...@@ -78,6 +78,7 @@ public struct ChatComponent: ReducerProtocol {
@Dependency(\.app.messenger) var messenger: Messenger @Dependency(\.app.messenger) var messenger: Messenger
@Dependency(\.app.dbManager.getDB) var db: DBManagerGetDB @Dependency(\.app.dbManager.getDB) var db: DBManagerGetDB
@Dependency(\.app.sendMessage) var sendMessage: SendMessage @Dependency(\.app.sendMessage) var sendMessage: SendMessage
@Dependency(\.app.sendGroupMessage) var sendGroupMessage: SendGroupMessage
@Dependency(\.app.sendImage) var sendImage: SendImage @Dependency(\.app.sendImage) var sendImage: SendImage
@Dependency(\.app.mainQueue) var mainQueue: AnySchedulerOf<DispatchQueue> @Dependency(\.app.mainQueue) var mainQueue: AnySchedulerOf<DispatchQueue>
@Dependency(\.app.bgQueue) var bgQueue: AnySchedulerOf<DispatchQueue> @Dependency(\.app.bgQueue) var bgQueue: AnySchedulerOf<DispatchQueue>
...@@ -173,8 +174,16 @@ public struct ChatComponent: ReducerProtocol { ...@@ -173,8 +174,16 @@ public struct ChatComponent: ReducerProtocol {
} }
) )
case .group(let groupId): case .group(let groupId):
// TODO: send group message sendGroupMessage(
fatalError() text: text,
to: groupId,
onError: { error in
subscriber.send(.sendFailed(error.localizedDescription))
},
completion: {
subscriber.send(completion: .finished)
}
)
} }
return AnyCancellable {} return AnyCancellable {}
} }
......
...@@ -306,7 +306,7 @@ final class ChatComponentTests: XCTestCase { ...@@ -306,7 +306,7 @@ final class ChatComponentTests: XCTestCase {
sendMessageCompletion?() sendMessageCompletion?()
} }
func testSendFailure() { func testSendDirectMessageFailure() {
var sendMessageOnError: SendMessage.OnError? var sendMessageOnError: SendMessage.OnError?
var sendMessageCompletion: SendMessage.Completion? var sendMessageCompletion: SendMessage.Completion?
...@@ -343,6 +343,80 @@ final class ChatComponentTests: XCTestCase { ...@@ -343,6 +343,80 @@ final class ChatComponentTests: XCTestCase {
} }
} }
func testSendGroupMessage() {
let groupId = "group-id".data(using: .utf8)!
let text = "Hello"
struct SendGroupMessageParams: Equatable {
var text: String
var groupId: Data
}
var didSendGroupMessageWithParams: [SendGroupMessageParams] = []
var sendGroupMessageCompletion: SendGroupMessage.Completion?
let store = TestStore(
initialState: ChatComponent.State(id: .group(groupId)),
reducer: ChatComponent()
)
store.dependencies.app.mainQueue = .immediate
store.dependencies.app.bgQueue = .immediate
store.dependencies.app.sendGroupMessage.run = { text, groupId, _, completion in
didSendGroupMessageWithParams.append(.init(text: text, groupId: groupId))
sendGroupMessageCompletion = completion
}
store.send(.set(\.$text, text)) {
$0.text = text
}
store.send(.sendTapped) {
$0.text = ""
}
XCTAssertNoDifference(didSendGroupMessageWithParams, [
.init(text: text, groupId: groupId)
])
sendGroupMessageCompletion?()
}
func testSendGroupMessageFailure() {
var sendGroupMessageOnError: SendGroupMessage.OnError?
var sendGroupMessageCompletion: SendGroupMessage.Completion?
let store = TestStore(
initialState: ChatComponent.State(
id: .group("group-id".data(using: .utf8)!),
text: "Hello"
),
reducer: ChatComponent()
)
store.dependencies.app.mainQueue = .immediate
store.dependencies.app.bgQueue = .immediate
store.dependencies.app.sendGroupMessage.run = { _, _, onError, completion in
sendGroupMessageOnError = onError
sendGroupMessageCompletion = completion
}
store.send(.sendTapped) {
$0.text = ""
}
let error = NSError(domain: "test", code: 123)
sendGroupMessageOnError?(error)
store.receive(.sendFailed(error.localizedDescription)) {
$0.sendFailure = error.localizedDescription
}
sendGroupMessageCompletion?()
store.send(.dismissSendFailureTapped) {
$0.sendFailure = nil
}
}
func testSendImage() { func testSendImage() {
struct SendImageParams: Equatable { struct SendImageParams: Equatable {
var image: Data var image: Data
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment