Files
mobile-ios/RosettaTests/CallRoutingTests.swift

105 lines
3.1 KiB
Swift

import XCTest
@testable import Rosetta
@MainActor
final class CallRoutingTests: XCTestCase {
private let ownKey = "02-own"
private let peerA = "02-peer-a"
private let peerB = "02-peer-b"
override func setUp() {
super.setUp()
CallManager.shared.resetForSessionEnd()
CallManager.shared.bindAccount(publicKey: ownKey)
}
override func tearDown() {
CallManager.shared.resetForSessionEnd()
super.tearDown()
}
func testIncomingCallMovesToIncomingPhase() {
let packet = PacketSignalPeer(
src: peerA,
dst: ownKey,
sharedPublic: "",
signalType: .call,
roomId: ""
)
CallManager.shared.testHandleSignalPacket(packet)
XCTAssertEqual(CallManager.shared.uiState.phase, .incoming)
XCTAssertEqual(CallManager.shared.uiState.peerPublicKey, peerA)
}
func testBusySignalEndsCurrentCallStateWithoutCrosstalk() {
CallManager.shared.testSetUiState(
CallUiState(
phase: .outgoing,
peerPublicKey: peerA,
statusText: "Calling..."
)
)
let packet = PacketSignalPeer(
src: "",
dst: "",
sharedPublic: "",
signalType: .endCallBecauseBusy,
roomId: ""
)
CallManager.shared.testHandleSignalPacket(packet)
XCTAssertEqual(CallManager.shared.uiState.phase, .idle)
XCTAssertEqual(CallManager.shared.uiState.statusText, "User is busy")
XCTAssertEqual(CallManager.shared.uiState.peerPublicKey, "")
}
func testPeerDisconnectedSignalEndsCurrentCallState() {
CallManager.shared.testSetUiState(
CallUiState(
phase: .active,
peerPublicKey: peerA,
statusText: "Call active"
)
)
let packet = PacketSignalPeer(
src: "",
dst: "",
sharedPublic: "",
signalType: .endCallBecausePeerDisconnected,
roomId: ""
)
CallManager.shared.testHandleSignalPacket(packet)
XCTAssertEqual(CallManager.shared.uiState.phase, .idle)
XCTAssertEqual(CallManager.shared.uiState.statusText, "Peer disconnected")
XCTAssertEqual(CallManager.shared.uiState.peerPublicKey, "")
}
func testInterleavingForeignSignalDoesNotOverrideActivePeer() {
CallManager.shared.testSetUiState(
CallUiState(
phase: .outgoing,
peerPublicKey: peerA,
statusText: "Calling..."
)
)
let foreignPacket = PacketSignalPeer(
src: peerB,
dst: ownKey,
sharedPublic: "",
signalType: .call,
roomId: ""
)
CallManager.shared.testHandleSignalPacket(foreignPacket)
XCTAssertEqual(CallManager.shared.uiState.phase, .outgoing)
XCTAssertEqual(CallManager.shared.uiState.peerPublicKey, peerA)
XCTAssertEqual(CallManager.shared.uiState.statusText, "Calling...")
}
}