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
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