Add support for manually starting SaS verification flows and accepting remotely started ones

This commit is contained in:
Stefan Ceriu
2023-01-05 18:06:39 +02:00
committed by Stefan Ceriu
parent 7888736a4d
commit 956e92a9ac
13 changed files with 185 additions and 46 deletions
@@ -33,6 +33,12 @@ class SessionVerificationStateMachineTests: XCTestCase {
stateMachine.processEvent(.requestVerification)
XCTAssertEqual(stateMachine.state, .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
XCTAssertEqual(stateMachine.state, .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
XCTAssertEqual(stateMachine.state, .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
XCTAssertEqual(stateMachine.state, .showingChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
@@ -49,6 +55,12 @@ class SessionVerificationStateMachineTests: XCTestCase {
stateMachine.processEvent(.requestVerification)
XCTAssertEqual(stateMachine.state, .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
XCTAssertEqual(stateMachine.state, .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
XCTAssertEqual(stateMachine.state, .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
XCTAssertEqual(stateMachine.state, .showingChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
@@ -84,6 +96,12 @@ class SessionVerificationStateMachineTests: XCTestCase {
stateMachine.processEvent(.requestVerification)
XCTAssertEqual(stateMachine.state, .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
XCTAssertEqual(stateMachine.state, .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
XCTAssertEqual(stateMachine.state, .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
XCTAssertEqual(stateMachine.state, .showingChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
@@ -35,7 +35,7 @@ class SessionVerificationViewModelTests: XCTestCase {
func testRequestVerification() async {
XCTAssertEqual(context.viewState.verificationState, .initial)
context.send(viewAction: .start)
context.send(viewAction: .requestVerification)
await Task.yield()
@@ -45,7 +45,7 @@ class SessionVerificationViewModelTests: XCTestCase {
func testVerificationCancellation() async throws {
XCTAssertEqual(context.viewState.verificationState, .initial)
context.send(viewAction: .start)
context.send(viewAction: .requestVerification)
context.send(viewAction: .close)
@@ -125,14 +125,20 @@ class SessionVerificationViewModelTests: XCTestCase {
// MARK: - Private
private func setupChallengeReceived() {
let expectation = XCTestExpectation(description: "Wait for challenge")
let requestAcceptanceExpectation = XCTestExpectation(description: "Wait for request acceptance")
let sasVerificationStartExpectation = XCTestExpectation(description: "Wait for SaS verification start")
let verificationDataReceivalExpectation = XCTestExpectation(description: "Wait for Emoji data")
let cancellable = sessionVerificationController.callbacks
.debounce(for: .seconds(2.0), scheduler: DispatchQueue.main)
.sink { callback in
switch callback {
case .acceptedVerificationRequest:
requestAcceptanceExpectation.fulfill()
case .startedSasVerification:
sasVerificationStartExpectation.fulfill()
case .receivedVerificationData:
expectation.fulfill()
verificationDataReceivalExpectation.fulfill()
default:
break
}
@@ -142,10 +148,15 @@ class SessionVerificationViewModelTests: XCTestCase {
cancellable.cancel()
}
context.send(viewAction: .start)
context.send(viewAction: .requestVerification)
wait(for: [requestAcceptanceExpectation], timeout: 10.0)
XCTAssertEqual(context.viewState.verificationState, .verificationRequestAccepted)
wait(for: [expectation], timeout: 10.0)
context.send(viewAction: .startSasVerification)
wait(for: [sasVerificationStartExpectation], timeout: 10.0)
XCTAssertEqual(context.viewState.verificationState, .sasVerificationStarted)
wait(for: [verificationDataReceivalExpectation], timeout: 10.0)
XCTAssertEqual(context.viewState.verificationState, .showingChallenge(emojis: MockSessionVerificationControllerProxy.emojis))
}
}