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

Add AuthCallbacksRegistry

parent 6c074ced
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!41Register auth callbacks with XXMessengerClient
This commit is part of merge request !41. Comments created here will be created in the context of that merge request.
import XXClient
import XCTestDynamicOverlay
import Foundation
public struct AuthCallbacksRegistry {
public var register: (AuthCallbacks) -> Cancellable
public var registered: () -> AuthCallbacks
}
extension AuthCallbacksRegistry {
public static func live() -> AuthCallbacksRegistry {
class Registry {
var authCallbacks: [UUID: AuthCallbacks] = [:]
}
let registry = Registry()
return AuthCallbacksRegistry(
register: { authCallbacks in
let id = UUID()
registry.authCallbacks[id] = authCallbacks
return Cancellable { registry.authCallbacks[id] = nil }
},
registered: {
AuthCallbacks { callback in
registry.authCallbacks.values.forEach { $0.handle(callback) }
}
}
)
}
}
extension AuthCallbacksRegistry {
public static let unimplemented = AuthCallbacksRegistry(
register: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {}),
registered: XCTUnimplemented("\(Self.self)", placeholder: AuthCallbacks { _ in })
)
}
import XXClient
extension Array where Element == AuthCallbacks.Callback {
static let stubs: [AuthCallbacks.Callback] = [
.confirm(
contact: "contact-1".data(using: .utf8)!,
receptionId: "reception-id-1".data(using: .utf8)!,
ephemeralId: 1,
roundId: 1
),
.request(
contact: "contact-2".data(using: .utf8)!,
receptionId: "reception-id-2".data(using: .utf8)!,
ephemeralId: 2,
roundId: 2
),
.reset(
contact: "contact-3".data(using: .utf8)!,
receptionId: "reception-id-3".data(using: .utf8)!,
ephemeralId: 3,
roundId: 3
),
]
}
import XCTest
import XXClient
@testable import XXMessengerClient
import CustomDump
final class AuthCallbacksRegistryTests: XCTestCase {
func testRegistry() {
var firstAuthCallbacksDidHandle: [AuthCallbacks.Callback] = []
var secondAuthCallbacksDidHandle: [AuthCallbacks.Callback] = []
let firstAuthCallbacks = AuthCallbacks { callback in
firstAuthCallbacksDidHandle.append(callback)
}
let secondAuthCallbacks = AuthCallbacks { callback in
secondAuthCallbacksDidHandle.append(callback)
}
let messengerAuthCallbacks: AuthCallbacksRegistry = .live()
let registeredAuthCallbacks = messengerAuthCallbacks.registered()
let firstAuthCallbacksCancellable = messengerAuthCallbacks.register(firstAuthCallbacks)
let secondAuthCallbacksCancellable = messengerAuthCallbacks.register(secondAuthCallbacks)
let firstCallback = [AuthCallbacks.Callback].stubs[0]
registeredAuthCallbacks.handle(firstCallback)
XCTAssertNoDifference(firstAuthCallbacksDidHandle, [firstCallback])
XCTAssertNoDifference(secondAuthCallbacksDidHandle, [firstCallback])
firstAuthCallbacksCancellable.cancel()
let secondCallback = [AuthCallbacks.Callback].stubs[1]
registeredAuthCallbacks.handle(secondCallback)
XCTAssertNoDifference(firstAuthCallbacksDidHandle, [firstCallback])
XCTAssertNoDifference(secondAuthCallbacksDidHandle, [firstCallback, secondCallback])
secondAuthCallbacksCancellable.cancel()
let thirdCallback = [AuthCallbacks.Callback].stubs[2]
registeredAuthCallbacks.handle(thirdCallback)
XCTAssertNoDifference(firstAuthCallbacksDidHandle, [firstCallback])
XCTAssertNoDifference(secondAuthCallbacksDidHandle, [firstCallback, secondCallback])
}
}
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