Files
mobile-ios/RosettaTests/SearchRoutingTests.swift

94 lines
3.2 KiB
Swift

import XCTest
@testable import Rosetta
final class SearchRoutingTests: XCTestCase {
func testResponseRoutesToMatchingChannel() {
let router = SearchPacketRouter()
let uiChannel = SearchPacketChannel.ui(UUID())
var uiHits = 0
var userInfoHits = 0
var unscopedHits = 0
_ = router.addHandler(channel: uiChannel) { _ in uiHits += 1 }
_ = router.addHandler(channel: .userInfo) { _ in userInfoHits += 1 }
_ = router.addHandler(channel: .unscoped) { _ in unscopedHits += 1 }
router.enqueueOutgoingRequest(channel: uiChannel)
let firstRouted = router.dispatchIncomingResponse(PacketSearch())
XCTAssertEqual(firstRouted, uiChannel)
XCTAssertEqual(uiHits, 1)
XCTAssertEqual(userInfoHits, 0)
XCTAssertEqual(unscopedHits, 1)
router.enqueueOutgoingRequest(channel: .userInfo)
let secondRouted = router.dispatchIncomingResponse(PacketSearch())
XCTAssertEqual(secondRouted, .userInfo)
XCTAssertEqual(uiHits, 1)
XCTAssertEqual(userInfoHits, 1)
XCTAssertEqual(unscopedHits, 2)
}
func testInterleavingUiAndUserInfoDoesNotCrossTalk() {
let router = SearchPacketRouter()
let uiA = SearchPacketChannel.ui(UUID())
let uiB = SearchPacketChannel.ui(UUID())
var uiAHits = 0
var uiBHits = 0
var userInfoHits = 0
_ = router.addHandler(channel: uiA) { _ in uiAHits += 1 }
_ = router.addHandler(channel: uiB) { _ in uiBHits += 1 }
_ = router.addHandler(channel: .userInfo) { _ in userInfoHits += 1 }
router.enqueueOutgoingRequest(channel: uiA)
router.enqueueOutgoingRequest(channel: .userInfo)
router.enqueueOutgoingRequest(channel: uiB)
_ = router.dispatchIncomingResponse(PacketSearch())
_ = router.dispatchIncomingResponse(PacketSearch())
_ = router.dispatchIncomingResponse(PacketSearch())
XCTAssertEqual(uiAHits, 1)
XCTAssertEqual(userInfoHits, 1)
XCTAssertEqual(uiBHits, 1)
}
func testResetPendingClearsRoutingState() {
let router = SearchPacketRouter()
let uiChannel = SearchPacketChannel.ui(UUID())
var uiHits = 0
var unscopedHits = 0
_ = router.addHandler(channel: uiChannel) { _ in uiHits += 1 }
_ = router.addHandler(channel: .unscoped) { _ in unscopedHits += 1 }
router.enqueueOutgoingRequest(channel: uiChannel)
XCTAssertEqual(router.pendingCount, 1)
router.resetPending()
XCTAssertEqual(router.pendingCount, 0)
let routed = router.dispatchIncomingResponse(PacketSearch())
XCTAssertEqual(routed, .unscoped)
XCTAssertEqual(uiHits, 0)
XCTAssertEqual(unscopedHits, 1)
}
func testFallbackToUnscopedWhenNoPending() {
let router = SearchPacketRouter()
var unscopedHits = 0
var userInfoHits = 0
_ = router.addHandler(channel: .unscoped) { _ in unscopedHits += 1 }
_ = router.addHandler(channel: .userInfo) { _ in userInfoHits += 1 }
let routed = router.dispatchIncomingResponse(PacketSearch())
XCTAssertEqual(routed, .unscoped)
XCTAssertEqual(unscopedHits, 1)
XCTAssertEqual(userInfoHits, 0)
}
}