mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
UI test fixes (#335)
* Remove status bars when running UITests * Remove simulator OS versions from screenshot names, be less lenient with image diffing * Rename UITests splash screen to onboarding * Switch tests to Xcode 14.1, remove version names for used simulators and switched from iPhone 13 Pro Max to iPhone 14 * Fix ServiceLocator and fallbackLaguage for UI tests * Drop snapshot diffing precision to 0.99 as 0.999 triggers false negatives * Fix server selection UI tests after exposing the sliding sync proxy configuration * Update reference screenshots
This commit is contained in:
@@ -18,19 +18,6 @@ import Combine
|
||||
import MatrixRustSDK
|
||||
import SwiftUI
|
||||
|
||||
struct ServiceLocator {
|
||||
fileprivate static var serviceLocator: ServiceLocator?
|
||||
static var shared: ServiceLocator {
|
||||
guard let serviceLocator else {
|
||||
fatalError("The service locator should be setup at this point")
|
||||
}
|
||||
|
||||
return serviceLocator
|
||||
}
|
||||
|
||||
let userNotificationController: UserNotificationControllerProtocol
|
||||
}
|
||||
|
||||
class AppCoordinator: AppCoordinatorProtocol {
|
||||
private let stateMachine: AppCoordinatorStateMachine
|
||||
private let navigationController: NavigationController
|
||||
@@ -63,7 +50,7 @@ class AppCoordinator: AppCoordinatorProtocol {
|
||||
|
||||
navigationController.setRootCoordinator(SplashScreenCoordinator())
|
||||
|
||||
ServiceLocator.serviceLocator = ServiceLocator(userNotificationController: UserNotificationController(rootCoordinator: navigationController))
|
||||
ServiceLocator.shared.register(userNotificationController: UserNotificationController(rootCoordinator: navigationController))
|
||||
|
||||
backgroundTaskService = UIKitBackgroundTaskService(withApplication: UIApplication.shared)
|
||||
|
||||
|
||||
@@ -39,7 +39,12 @@ struct Application: App {
|
||||
.task {
|
||||
applicationCoordinator.start()
|
||||
}
|
||||
.statusBarHidden(shouldHideStatusBar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var shouldHideStatusBar: Bool {
|
||||
Tests.isRunningUITests
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// Copyright 2022 New Vector Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class ServiceLocator {
|
||||
private(set) static var shared = ServiceLocator()
|
||||
|
||||
private init() { }
|
||||
|
||||
private(set) var userNotificationController: UserNotificationControllerProtocol!
|
||||
|
||||
func register(userNotificationController: UserNotificationControllerProtocol) {
|
||||
self.userNotificationController = userNotificationController
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ enum UITestScreenIdentifier: String {
|
||||
case settings
|
||||
case bugReport
|
||||
case bugReportWithScreenshot
|
||||
case splash
|
||||
case onboarding
|
||||
case roomPlainNoAvatar
|
||||
case roomEncryptedWithAvatar
|
||||
case sessionVerification
|
||||
|
||||
@@ -18,11 +18,14 @@ import SwiftUI
|
||||
import UIKit
|
||||
|
||||
class UITestsAppCoordinator: AppCoordinatorProtocol {
|
||||
private var currentRootCoordinator: CoordinatorProtocol?
|
||||
private let navigationController: NavigationController
|
||||
let notificationManager: NotificationManagerProtocol? = nil
|
||||
|
||||
init() {
|
||||
navigationController = NavigationController()
|
||||
|
||||
ServiceLocator.shared.register(userNotificationController: MockUserNotificationController())
|
||||
}
|
||||
|
||||
func start() {
|
||||
@@ -31,11 +34,17 @@ class UITestsAppCoordinator: AppCoordinatorProtocol {
|
||||
guard let screen = screens.first(where: { $0.id == id }) else {
|
||||
fatalError()
|
||||
}
|
||||
|
||||
|
||||
// Store the initial coordinator so that it stays alive if drops it
|
||||
// For example when replacing the root in the authentication flows
|
||||
self.currentRootCoordinator = screen.coordinator
|
||||
|
||||
self.navigationController.setRootCoordinator(screen.coordinator)
|
||||
}
|
||||
|
||||
navigationController.setRootCoordinator(rootCoordinator)
|
||||
|
||||
Bundle.elementFallbackLanguage = "en"
|
||||
}
|
||||
|
||||
func toPresentable() -> AnyView {
|
||||
@@ -105,7 +114,7 @@ class MockScreen: Identifiable {
|
||||
userNotificationController: MockUserNotificationController(),
|
||||
screenshot: Asset.Images.appLogo.image,
|
||||
isModallyPresented: false))
|
||||
case .splash:
|
||||
case .onboarding:
|
||||
return OnboardingCoordinator()
|
||||
case .roomPlainNoAvatar:
|
||||
let parameters = RoomScreenCoordinatorParameters(navigationController: navigationController,
|
||||
|
||||
Reference in New Issue
Block a user