mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
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
This commit is contained in:
@@ -7,29 +7,32 @@
|
||||
//
|
||||
|
||||
@testable import ElementX
|
||||
import XCTest
|
||||
import Testing
|
||||
|
||||
@MainActor
|
||||
class SoftLogoutScreenViewModelTests: XCTestCase {
|
||||
let credentials = SoftLogoutScreenCredentials(userID: "mock_user_id",
|
||||
homeserverName: "https://example.com",
|
||||
userDisplayName: "mock_username",
|
||||
deviceID: "ABCDEFGH")
|
||||
@Suite
|
||||
struct SoftLogoutScreenViewModelTests {
|
||||
private let credentials = SoftLogoutScreenCredentials(userID: "mock_user_id",
|
||||
homeserverName: "https://example.com",
|
||||
userDisplayName: "mock_username",
|
||||
deviceID: "ABCDEFGH")
|
||||
|
||||
func testInitialStateForBasicServer() {
|
||||
@Test
|
||||
func initialStateForBasicServer() {
|
||||
let viewModel = SoftLogoutScreenViewModel(credentials: credentials,
|
||||
homeserver: .mockBasicServer,
|
||||
keyBackupNeeded: false)
|
||||
let context = viewModel.context
|
||||
|
||||
// Given a view model where the user hasn't yet sent the verification email.
|
||||
XCTAssert(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
XCTAssertFalse(context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
XCTAssertEqual(context.viewState.loginMode, .password, "The view model should show login form for the given homeserver.")
|
||||
XCTAssertFalse(context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
#expect(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
#expect(!context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
#expect(context.viewState.loginMode == .password, "The view model should show login form for the given homeserver.")
|
||||
#expect(!context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
}
|
||||
|
||||
func testInitialStateForBasicServerPasswordEntered() {
|
||||
@Test
|
||||
func initialStateForBasicServerPasswordEntered() {
|
||||
let viewModel = SoftLogoutScreenViewModel(credentials: credentials,
|
||||
homeserver: .mockBasicServer,
|
||||
keyBackupNeeded: true,
|
||||
@@ -37,34 +40,36 @@ class SoftLogoutScreenViewModelTests: XCTestCase {
|
||||
let context = viewModel.context
|
||||
|
||||
// Given a view model where the user hasn't yet sent the verification email.
|
||||
XCTAssertTrue(context.viewState.canSubmit, "The view model should start with a valid password.")
|
||||
XCTAssertEqual(context.viewState.loginMode, .password, "The view model should show login form for the given homeserver.")
|
||||
XCTAssert(context.viewState.showRecoverEncryptionKeysMessage, "The view model should show recover encryption keys message.")
|
||||
#expect(context.viewState.canSubmit, "The view model should start with a valid password.")
|
||||
#expect(context.viewState.loginMode == .password, "The view model should show login form for the given homeserver.")
|
||||
#expect(context.viewState.showRecoverEncryptionKeysMessage, "The view model should show recover encryption keys message.")
|
||||
}
|
||||
|
||||
func testInitialStateForOIDC() {
|
||||
@Test
|
||||
func initialStateForOIDC() {
|
||||
let viewModel = SoftLogoutScreenViewModel(credentials: credentials,
|
||||
homeserver: .mockMatrixDotOrg,
|
||||
keyBackupNeeded: false)
|
||||
let context = viewModel.context
|
||||
|
||||
// Given a view model where the user hasn't yet sent the verification email.
|
||||
XCTAssert(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
XCTAssertFalse(context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
XCTAssertTrue(context.viewState.loginMode.supportsOIDCFlow, "The view model should show OIDC button for the given homeserver.")
|
||||
XCTAssertFalse(context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
#expect(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
#expect(!context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
#expect(context.viewState.loginMode.supportsOIDCFlow, "The view model should show OIDC button for the given homeserver.")
|
||||
#expect(!context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
}
|
||||
|
||||
func testInitialStateForUnsupported() {
|
||||
@Test
|
||||
func initialStateForUnsupported() {
|
||||
let viewModel = SoftLogoutScreenViewModel(credentials: credentials,
|
||||
homeserver: .mockUnsupported,
|
||||
keyBackupNeeded: false)
|
||||
let context = viewModel.context
|
||||
|
||||
// Given a view model where the user hasn't yet sent the verification email.
|
||||
XCTAssert(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
XCTAssertFalse(context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
XCTAssertEqual(context.viewState.loginMode, .unsupported, "The view model should show unsupported text for the given homeserver.")
|
||||
XCTAssertFalse(context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
#expect(context.password.isEmpty, "The view model should start with an empty password.")
|
||||
#expect(!context.viewState.canSubmit, "The view model should start with an invalid password.")
|
||||
#expect(context.viewState.loginMode == .unsupported, "The view model should show unsupported text for the given homeserver.")
|
||||
#expect(!context.viewState.showRecoverEncryptionKeysMessage, "The view model should not show recover encryption keys message.")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user