Skip to content
Snippets Groups Projects
AuthCallbacksRegistryTests.swift 1.7 KiB
Newer Older
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])
  }
}