Files
letro-ios/UnitTests/Sources/SessionVerificationStateMachineTests.swift

114 lines
4.3 KiB
Swift

//
// Copyright 2025 Element Creations Ltd.
// Copyright 2022-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
@testable import ElementX
import Testing
@MainActor
struct SessionVerificationStateMachineTests {
private var stateMachine: SessionVerificationScreenStateMachine
init() {
stateMachine = SessionVerificationScreenStateMachine(state: .initial)
}
@Test
func acceptChallenge() {
#expect(stateMachine.state == .initial)
stateMachine.processEvent(.requestVerification)
#expect(stateMachine.state == .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
#expect(stateMachine.state == .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
#expect(stateMachine.state == .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
#expect(stateMachine.state == .showingChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
stateMachine.processEvent(.acceptChallenge)
#expect(stateMachine.state == .acceptingChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
stateMachine.processEvent(.didAcceptChallenge)
#expect(stateMachine.state == .verified)
}
@Test
func declineChallenge() {
#expect(stateMachine.state == .initial)
stateMachine.processEvent(.requestVerification)
#expect(stateMachine.state == .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
#expect(stateMachine.state == .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
#expect(stateMachine.state == .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
#expect(stateMachine.state == .showingChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
stateMachine.processEvent(.declineChallenge)
#expect(stateMachine.state == .decliningChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
stateMachine.processEvent(.didCancel)
#expect(stateMachine.state == .cancelled)
stateMachine.processEvent(.restart)
#expect(stateMachine.state == .initial)
}
@Test
func cancellation() {
#expect(stateMachine.state == .initial)
stateMachine.processEvent(.requestVerification)
#expect(stateMachine.state == .requestingVerification)
stateMachine.processEvent(.cancel)
#expect(stateMachine.state == .cancelling)
stateMachine.processEvent(.didCancel)
#expect(stateMachine.state == .cancelled)
// This duplication is intentional
stateMachine.processEvent(.didCancel)
#expect(stateMachine.state == .cancelled)
stateMachine.processEvent(.restart)
#expect(stateMachine.state == .initial)
stateMachine.processEvent(.requestVerification)
#expect(stateMachine.state == .requestingVerification)
stateMachine.processEvent(.didAcceptVerificationRequest)
#expect(stateMachine.state == .verificationRequestAccepted)
stateMachine.processEvent(.didStartSasVerification)
#expect(stateMachine.state == .sasVerificationStarted)
stateMachine.processEvent(.didReceiveChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
#expect(stateMachine.state == .showingChallenge(emojis: SessionVerificationControllerProxyMock.emojis))
stateMachine.processEvent(.cancel)
#expect(stateMachine.state == .cancelling)
stateMachine.processEvent(.didCancel)
#expect(stateMachine.state == .cancelled)
stateMachine.processEvent(.restart)
#expect(stateMachine.state == .initial)
stateMachine.processEvent(.restart)
#expect(stateMachine.state == .initial)
}
}