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

Add GroupRequestCallbacksRegistry

parent 2d8d35a1
No related branches found
No related tags found
2 merge requests!147Group Chats,!102Release 1.0.0
......@@ -18,6 +18,7 @@ public struct MessengerEnvironment {
public var getFileTransferParams: GetFileTransferParams
public var getNotificationsReport: GetNotificationsReport
public var getSingleUseParams: GetSingleUseParams
public var groupRequests: GroupRequestCallbacksRegistry
public var initFileTransfer: InitFileTransfer
public var initializeBackup: InitializeBackup
public var isListeningForMessages: Stored<Bool>
......@@ -71,6 +72,7 @@ extension MessengerEnvironment {
getFileTransferParams: .liveDefault,
getNotificationsReport: .live,
getSingleUseParams: .liveDefault,
groupRequests: .live(),
initFileTransfer: .live,
initializeBackup: .live,
isListeningForMessages: .inMemory(false),
......@@ -119,6 +121,7 @@ extension MessengerEnvironment {
getFileTransferParams: .unimplemented,
getNotificationsReport: .unimplemented,
getSingleUseParams: .unimplemented,
groupRequests: .unimplemented,
initFileTransfer: .unimplemented,
initializeBackup: .unimplemented,
isListeningForMessages: .unimplemented(placeholder: false),
......
import Foundation
import XCTestDynamicOverlay
import XXClient
public struct GroupRequestCallbacksRegistry {
public var register: (GroupRequest) -> Cancellable
public var registered: () -> GroupRequest
}
extension GroupRequestCallbacksRegistry {
public static func live() -> GroupRequestCallbacksRegistry {
class Registry {
var items: [UUID: GroupRequest] = [:]
}
let registry = Registry()
return GroupRequestCallbacksRegistry(
register: { groupRequest in
let id = UUID()
registry.items[id] = groupRequest
return Cancellable { registry.items[id] = nil }
},
registered: {
GroupRequest { group in
registry.items.values.forEach { $0.handle(group) }
}
}
)
}
}
extension GroupRequestCallbacksRegistry {
public static let unimplemented = GroupRequestCallbacksRegistry(
register: XCTestDynamicOverlay.unimplemented(
"\(Self.self).register",
placeholder: Cancellable {}
),
registered: XCTestDynamicOverlay.unimplemented(
"\(Self.self).registered",
placeholder: .unimplemented
)
)
}
......@@ -55,3 +55,11 @@ extension MessageService {
)
}
}
extension Group {
static func stub(_ id: Int) -> Group {
var group = Group.unimplemented
group.getId.run = { "group-\(id)".data(using: .utf8)! }
return group
}
}
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class GroupRequestCallbacksRegistryTests: XCTestCase {
func testRegistry() {
var firstCallbackDidHandle: [Group] = []
var secondCallbackDidHandle: [Group] = []
let firstCallback = GroupRequest { group in
firstCallbackDidHandle.append(group)
}
let secondCallback = GroupRequest { group in
secondCallbackDidHandle.append(group)
}
let registry: GroupRequestCallbacksRegistry = .live()
let registeredCallbacks = registry.registered()
let firstCallbackCancellable = registry.register(firstCallback)
let secondCallbackCancellable = registry.register(secondCallback)
let firstGroup = Group.stub(1)
registeredCallbacks.handle(firstGroup)
XCTAssertNoDifference(firstCallbackDidHandle.map { $0.getId() }, [firstGroup.getId()])
XCTAssertNoDifference(secondCallbackDidHandle.map { $0.getId() }, [firstGroup.getId()])
firstCallbackDidHandle = []
secondCallbackDidHandle = []
firstCallbackCancellable.cancel()
let secondGroup = Group.stub(2)
registeredCallbacks.handle(secondGroup)
XCTAssertNoDifference(firstCallbackDidHandle.map { $0.getId() }, [])
XCTAssertNoDifference(secondCallbackDidHandle.map { $0.getId() }, [secondGroup.getId()])
firstCallbackDidHandle = []
secondCallbackDidHandle = []
secondCallbackCancellable.cancel()
let thirdGroup = Group.stub(3)
registeredCallbacks.handle(thirdGroup)
XCTAssertNoDifference(firstCallbackDidHandle.map { $0.getId() }, [])
XCTAssertNoDifference(secondCallbackDidHandle.map { $0.getId() }, [])
}
}
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