Files
letro-ios/UnitTests/Sources/SessionVerificationStateMachineTests.swift
Mauro 173b39a07f Swift Testing for Unit Tests PART 1 (#5119)
* migrated a lot of unit tests to Swift Testing and added a new implementation for deferred fulfillment

more tests migration

Cleaned the code manually to establish some good patterns

more code improvements

some more code improvements

removed empty tests

update project

* more pr suggestions and cleanups

* removed the TestSetup pattern

* fixing claude not reusing tests

* pr suggestion + added indent rule to swiftformat so that we can prevent AIs to change that
2026-02-19 16:20:47 +01:00

115 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
@Suite
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)
}
}