mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +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,86 +7,93 @@
|
||||
//
|
||||
|
||||
@testable import ElementX
|
||||
import Foundation
|
||||
import MatrixRustSDKMocks
|
||||
import XCTest
|
||||
import Testing
|
||||
|
||||
class AuthenticationServiceTests: XCTestCase {
|
||||
@Suite
|
||||
@MainActor
|
||||
struct AuthenticationServiceTests {
|
||||
var client: ClientSDKMock!
|
||||
var userSessionStore: UserSessionStoreMock!
|
||||
var encryptionKeyProvider: MockEncryptionKeyProvider!
|
||||
|
||||
var service: AuthenticationService!
|
||||
|
||||
func testPasswordLogin() async {
|
||||
setupMocks(serverAddress: "example.com")
|
||||
@Test
|
||||
mutating func passwordLogin() async {
|
||||
setup(serverAddress: "example.com")
|
||||
|
||||
switch await service.configure(for: "example.com", flow: .login) {
|
||||
case .success:
|
||||
break
|
||||
case .failure(let error):
|
||||
XCTFail("Unexpected failure: \(error)")
|
||||
Issue.record("Unexpected failure: \(error)")
|
||||
}
|
||||
|
||||
XCTAssertEqual(service.flow, .login)
|
||||
XCTAssertEqual(service.homeserver.value, .mockBasicServer)
|
||||
#expect(service.flow == .login)
|
||||
#expect(service.homeserver.value == .mockBasicServer)
|
||||
|
||||
switch await service.login(username: "alice", password: "12345678", initialDeviceName: nil, deviceID: nil) {
|
||||
case .success:
|
||||
XCTAssertEqual(client.loginUsernamePasswordInitialDeviceNameDeviceIdCallsCount, 1)
|
||||
XCTAssertEqual(userSessionStore.userSessionForSessionDirectoriesPassphraseCallsCount, 1)
|
||||
XCTAssertEqual(userSessionStore.userSessionForSessionDirectoriesPassphraseReceivedArguments?.passphrase,
|
||||
encryptionKeyProvider.generateKey().base64EncodedString())
|
||||
#expect(client.loginUsernamePasswordInitialDeviceNameDeviceIdCallsCount == 1)
|
||||
#expect(userSessionStore.userSessionForSessionDirectoriesPassphraseCallsCount == 1)
|
||||
#expect(userSessionStore.userSessionForSessionDirectoriesPassphraseReceivedArguments?.passphrase ==
|
||||
encryptionKeyProvider.generateKey().base64EncodedString())
|
||||
case .failure(let error):
|
||||
XCTFail("Unexpected failure: \(error)")
|
||||
Issue.record("Unexpected failure: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
func testConfigureLoginWithOIDC() async {
|
||||
setupMocks()
|
||||
@Test
|
||||
mutating func configureLoginWithOIDC() async {
|
||||
setup()
|
||||
|
||||
switch await service.configure(for: "matrix.org", flow: .login) {
|
||||
case .success:
|
||||
break
|
||||
case .failure(let error):
|
||||
XCTFail("Unexpected failure: \(error)")
|
||||
Issue.record("Unexpected failure: \(error)")
|
||||
}
|
||||
|
||||
XCTAssertEqual(service.flow, .login)
|
||||
XCTAssertEqual(service.homeserver.value, .mockMatrixDotOrg)
|
||||
#expect(service.flow == .login)
|
||||
#expect(service.homeserver.value == .mockMatrixDotOrg)
|
||||
}
|
||||
|
||||
func testConfigureRegisterWithOIDC() async {
|
||||
setupMocks()
|
||||
@Test
|
||||
mutating func configureRegisterWithOIDC() async {
|
||||
setup()
|
||||
|
||||
switch await service.configure(for: "matrix.org", flow: .register) {
|
||||
case .success:
|
||||
break
|
||||
case .failure(let error):
|
||||
XCTFail("Unexpected failure: \(error)")
|
||||
Issue.record("Unexpected failure: \(error)")
|
||||
}
|
||||
|
||||
XCTAssertEqual(service.flow, .register)
|
||||
XCTAssertEqual(service.homeserver.value, .mockMatrixDotOrg)
|
||||
#expect(service.flow == .register)
|
||||
#expect(service.homeserver.value == .mockMatrixDotOrg)
|
||||
}
|
||||
|
||||
func testConfigureRegisterNoSupport() async {
|
||||
@Test
|
||||
@MainActor
|
||||
mutating func configureRegisterNoSupport() async {
|
||||
let homeserverAddress = "example.com"
|
||||
setupMocks(serverAddress: homeserverAddress)
|
||||
setup(serverAddress: homeserverAddress)
|
||||
|
||||
switch await service.configure(for: homeserverAddress, flow: .register) {
|
||||
case .success:
|
||||
XCTFail("Configuration should have failed")
|
||||
Issue.record("Configuration should have failed")
|
||||
case .failure(let error):
|
||||
XCTAssertEqual(error, .registrationNotSupported)
|
||||
#expect(error == .registrationNotSupported)
|
||||
}
|
||||
|
||||
XCTAssertEqual(service.flow, .login)
|
||||
XCTAssertEqual(service.homeserver.value, .init(address: "matrix.org", loginMode: .unknown))
|
||||
#expect(service.flow == .login)
|
||||
#expect(service.homeserver.value == .init(address: "matrix.org", loginMode: .unknown))
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private func setupMocks(serverAddress: String = "matrix.org") {
|
||||
private mutating func setup(serverAddress: String = "matrix.org") {
|
||||
let configuration: AuthenticationClientFactoryMock.Configuration = .init()
|
||||
let clientFactory = AuthenticationClientFactoryMock(configuration: configuration)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user