AppSettings are Mockable (#5589)

* create DependenciesProtocol and replace ServiceLocator registration with it

replace mocking calls for ServiceLocator to Dependencies

replace ServiceLocator with instance level calls

replace ServiceLocator configs with TestDependencies config in Tests

replace servicelocator usage in analytics service

replace remaining ServiceLocator calls in unit tests

that depended on the UnitTestAppCoordinator configuration with per suite dependencies instances

fix swiftlint warning

remove remaining references to ServiceLocator

make dependencies properties consistent in tests

delete Dependencies and DependenciesProtocol

fix whitespace modifications

updates from PR feedback

a pass over converting AppSettings and AnalyticsService test instance properties to per test instantiation

fix a missed PR feedback

Sync up after rebase

create DependenciesProtocol and replace ServiceLocator registration with it

replace mocking calls for ServiceLocator to Dependencies

replace ServiceLocator with instance level calls

replace ServiceLocator configs with TestDependencies config in Tests

replace servicelocator usage in analytics service

replace remaining ServiceLocator calls in unit tests

that depended on the UnitTestAppCoordinator configuration with per suite dependencies instances

fix swiftlint warning

remove remaining references to ServiceLocator

make dependencies properties consistent in tests

delete Dependencies and DependenciesProtocol

* AppSettings is instance level mockable now

* replace mocked and preview usages of reset + AppSettings global init with

AppSettings(store: UserDefaultsMock())

* AppSettings.UserDefaultsKeys is now a RawRep struct, making it extensible

* update tests with new AppSettings so it builds

* update remaining AppSettings test/mock inits

* AppSettings.UserDefaultsKey conformed to ExpressibleByStringLiteral

* addressed issues found in first pass ai review

* update AppSettings instantiations after rebase

* fix accessibility tests coordinator after rebase

* Rename to VolatileUserDefaults

* AppSettings init uses mandatory parameter

* Revert UserDefaultsKey to enum

* Add TrackedUserDefaults to be able to reset the defaults object

* Added volatile static func to AppSettings

* Use .volatile() static func instead of full init

* review fixups

* Resolve build issues after rebase

* updated enterprise module

* remove the static reset settings call from the preview tests

---------

Co-authored-by: Mauro Romito <mauro.romito@element.io>
This commit is contained in:
Michael
2026-05-22 08:14:08 -05:00
committed by GitHub
parent 97d4a35af7
commit 22d14ff8e4
122 changed files with 572 additions and 747 deletions
@@ -161,7 +161,7 @@ struct LoginScreen_Previews: PreviewProvider, TestablePreview {
let viewModel = LoginScreenViewModel(authenticationService: authenticationService,
loginHint: nil,
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings(),
appSettings: .volatile(),
analytics: AnalyticsServiceMock.default)
if withCredentials {
@@ -163,7 +163,7 @@ struct ServerConfirmationScreen_Previews: PreviewProvider, TestablePreview {
ServerConfirmationScreenViewModel(authenticationService: AuthenticationService.mock,
mode: mode,
authenticationFlow: flow,
appSettings: AppSettings(),
appSettings: .volatile(),
userIndicatorController: UserIndicatorControllerMock.default)
}
}
@@ -116,7 +116,7 @@ struct ServerSelection_Previews: PreviewProvider, TestablePreview {
let viewModel = ServerSelectionScreenViewModel(authenticationService: authenticationService,
authenticationFlow: .login,
appSettings: AppSettings(),
appSettings: .volatile(),
userIndicatorController: UserIndicatorControllerMock.default)
viewModel.context.homeserverAddress = homeserverAddress
if homeserverAddress == "thisisbad" {
@@ -151,7 +151,7 @@ struct AuthenticationClassicAppAccountView_Previews: PreviewProvider { // Not Te
provisioningParameters: nil,
isBugReportServiceEnabled: false,
appMediator: AppMediatorMock(),
appSettings: AppSettings(),
appSettings: .volatile(),
mediaProvider: MediaProviderMock(configuration: .init()),
userIndicatorController: UserIndicatorControllerMock())
}
@@ -195,7 +195,7 @@ struct AuthenticationStartScreen_Previews: PreviewProvider, TestablePreview {
provisioningParameters: provisionedServerName.map { .init(accountProvider: $0, loginHint: nil) },
isBugReportServiceEnabled: true,
appMediator: AppMediatorMock(),
appSettings: AppSettings(),
appSettings: .volatile(),
mediaProvider: MediaProviderMock(configuration: .init()),
userIndicatorController: UserIndicatorControllerMock())
}
@@ -374,7 +374,7 @@ struct CallScreen_Previews: PreviewProvider {
colorScheme: .light),
allowPictureInPicture: false,
appHooks: AppHooks(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default)
}()
@@ -446,8 +446,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
isSpace: Bool = false,
selectionMode: CreateRoomScreenSpaceSelectionMode = .editableSpacesList(preSelectedSpace: nil),
isAliasAvailable: Bool = true) -> CreateRoomScreenViewModel {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.knockingEnabled = isKnockingEnabled
let clientProxy = ClientProxyMock(.init(userIDServerName: "example.org",
@@ -67,7 +67,8 @@ struct CreateRoomSpaceSelectionSheet_Previews: PreviewProvider, TestablePreview
clientProxy.spaceService = SpaceServiceProxyMock(.init(editableSpaces: .mockJoinedSpaces2))
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return CreateRoomScreenViewModel(isSpace: false,
spaceSelectionMode: .editableSpacesList(preSelectedSpace: nil),
shouldShowCancelButton: false,
@@ -103,7 +103,7 @@ struct EmojiPickerScreen: View {
struct EmojiPickerScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = EmojiPickerScreenViewModel(itemID: .randomEvent,
selectedEmojis: ["😀", "😄"],
emojiProvider: EmojiProvider(appSettings: AppSettings()),
emojiProvider: EmojiProvider(appSettings: .volatile()),
timelineController: MockTimelineController())
static var previews: some View {
@@ -116,7 +116,7 @@ struct EmojiPickerScreen_Previews: PreviewProvider, TestablePreview {
struct EmojiPickerScreenSheet_Previews: PreviewProvider {
static let viewModel = EmojiPickerScreenViewModel(itemID: .randomEvent,
selectedEmojis: ["😀", "😄"],
emojiProvider: EmojiProvider(appSettings: AppSettings()),
emojiProvider: EmojiProvider(appSettings: .volatile()),
timelineController: MockTimelineController())
static var previews: some View {
@@ -59,10 +59,10 @@ struct RoomListFiltersEmptyStateView_Previews: PreviewProvider, TestablePreview
VStack(spacing: 24) {
ForEach(RoomListFilter.allCases) { filter in
RoomListFiltersEmptyStateView(state: .init(activeFilters: [filter],
appSettings: AppSettings()))
appSettings: .volatile()))
}
RoomListFiltersEmptyStateView(state: .init(activeFilters: [.people, .favourites],
appSettings: AppSettings()))
appSettings: .volatile()))
}
.padding(.bottom)
.previewLayout(.sizeThatFits)
@@ -90,10 +90,10 @@ struct RoomListFiltersView: View {
struct RoomListFiltersView_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
RoomListFiltersView(state: .constant(.init(appSettings: AppSettings())))
RoomListFiltersView(state: .constant(.init(appSettings: .volatile())))
RoomListFiltersView(state: .constant(.init(activeFilters: [.rooms, .favourites],
appSettings: AppSettings())))
appSettings: .volatile())))
RoomListFiltersView(state: .constant(.init(activeFilters: [.lowPriority],
appSettings: AppSettings())))
appSettings: .volatile())))
}
}
@@ -224,7 +224,7 @@ struct HomeScreen_Previews: PreviewProvider, TestablePreview {
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -145,7 +145,7 @@ struct HomeScreenEmptyStateView_Previews: PreviewProvider, TestablePreview {
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded([])))))))
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -202,7 +202,7 @@ struct HomeScreenInviteCell_Previews: PreviewProvider, TestablePreview {
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -134,7 +134,7 @@ struct HomeScreenKnockedCell_Previews: PreviewProvider, TestablePreview {
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -123,7 +123,7 @@ struct HomeScreenRecoveryKeyConfirmationBanner_Previews: PreviewProvider, Testab
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -255,7 +255,7 @@ struct HomeScreenRoomCell_Previews: PreviewProvider, TestablePreview {
return HomeScreenViewModel(userSession: userSession,
selectedRoomPublisher: CurrentValueSubject<String?, Never>(nil).asCurrentValuePublisher(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
notificationManager: NotificationManagerMock(),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -65,7 +65,7 @@ struct InviteUsersConfirmationSheetView_Previews: PreviewProvider, TestablePrevi
isSkippable: true,
userDiscoveryService: UserDiscoveryServiceMock(),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
appSettings: .volatile())
viewModel.state.usersToConfirm = [.mockAlice, .mockCharlie, .mockBob, .mockDan]
@@ -213,7 +213,7 @@ struct InviteUsersScreen_Previews: PreviewProvider, TestablePreview {
isSkippable: isSkippable,
userDiscoveryService: userDiscoveryService,
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
appSettings: .volatile())
if let searchQuery {
viewModel.context.searchQuery = searchQuery
@@ -403,7 +403,7 @@ struct JoinRoomScreenPreviewWrapper: Identifiable {
self.isSpace = isSpace
self.customPreviewName = customPreviewName
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let clientProxy = ClientProxyMock(.init(hideInviteAvatars: hideInviteAvatars))
clientProxy.canJoinRoomWithReturnValue = canJoinRoom
@@ -64,11 +64,8 @@ struct LabsScreen: View {
// MARK: - Previews
struct LabsScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = {
AppSettings.resetAllSettings()
return LabsScreenViewModel(labsOptions: AppSettings())
}()
static let viewModel = LabsScreenViewModel(labsOptions: AppSettings.volatile())
static var previews: some View {
ElementNavigationStack {
LabsScreen(context: viewModel.context)
@@ -390,7 +390,7 @@ extension LocationSharingScreenViewModel {
roomProxy.makeLiveLocationServiceReturnValue = liveLocationServiceMock
return LocationSharingScreenViewModel(interactionMode: interactionMode,
mapURLBuilder: AppSettings().mapTilerConfiguration,
mapURLBuilder: AppSettings.volatile().mapTilerConfiguration,
roomProxy: roomProxy,
timelineController: MockTimelineController(),
liveLocationManager: LiveLocationManagerMock(),
@@ -310,7 +310,7 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
MockTimelineController.mediaGallery
}
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
timelineController: timelineController,
userSession: UserSessionMock(.init()),
@@ -370,7 +370,7 @@ struct MediaUploadPreviewScreen_Previews: PreviewProvider, TestablePreview {
title: "App Icon.png",
isRoomEncrypted: true,
shouldShowCaptionWarning: true,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: AppSettings()),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: .volatile()),
timelineController: MockTimelineController(),
clientProxy: ClientProxyMock(.init()),
userIndicatorController: UserIndicatorControllerMock.default)
@@ -102,6 +102,6 @@ struct AnalyticsPromptScreen_Previews: PreviewProvider, TestablePreview {
}
static func makeViewModel(showTerms: Bool = true) -> AnalyticsPromptScreenViewModel {
AnalyticsPromptScreenViewModel(termsURL: showTerms ? AppSettings().analyticsTermsURL : nil)
AnalyticsPromptScreenViewModel(termsURL: showTerms ? AppSettings.volatile().analyticsTermsURL : nil)
}
}
@@ -140,7 +140,7 @@ struct IdentityConfirmationScreen_Previews: PreviewProvider, TestablePreview {
userSession.sessionSecurityStatePublisher = CurrentValuePublisher<SessionSecurityState, Never>(.init(verificationState: .unverified, recoveryState: recoveryState))
return IdentityConfirmationScreenViewModel(userSession: userSession,
appSettings: AppSettings(),
appSettings: .volatile(),
userIndicatorController: UserIndicatorControllerMock.default)
}
}
@@ -289,7 +289,7 @@ struct SessionVerification_Previews: PreviewProvider, TestablePreview {
flow: SessionVerificationScreenFlow = .deviceInitiator) -> some View {
let viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(),
flow: flow,
appSettings: AppSettings(),
appSettings: .volatile(),
mediaProvider: MediaProviderMock(configuration: .init()),
verificationState: state)
@@ -68,14 +68,15 @@ struct PinnedEventsTimelineScreen: View {
struct PinnedEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = PinnedEventsTimelineScreenViewModel(roomProxy: JoinedRoomProxyMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default)
static let emptyTimelineViewModel: TimelineViewModel = {
let timelineController = MockTimelineController(timelineKind: .pinned)
timelineController.timelineItems = []
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
timelineController: timelineController,
userSession: UserSessionMock(.init()),
@@ -177,7 +177,7 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
userSession: UserSessionMock(.init()),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: AppSettings()),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: .volatile()),
userIndicatorController: UserIndicatorControllerMock.default)
}
}
@@ -424,7 +424,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
userIndicatorController: UserIndicatorControllerMock.default,
notificationSettingsProxy: notificationSettingsProxy,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
appSettings: AppSettings())
appSettings: .volatile())
}
private static func makeSimpleRoomViewModel() -> RoomDetailsScreenViewModel {
@@ -452,7 +452,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
userIndicatorController: UserIndicatorControllerMock.default,
notificationSettingsProxy: notificationSettingsProxy,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
appSettings: AppSettings())
appSettings: .volatile())
}
private static func makeDMViewModel(verificationState: UserIdentityVerificationState) -> RoomDetailsScreenViewModel {
@@ -490,6 +490,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
userIndicatorController: UserIndicatorControllerMock.default,
notificationSettingsProxy: notificationSettingsProxy,
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
appSettings: AppSettings())
appSettings: .volatile())
}
}
@@ -241,6 +241,6 @@ struct RoomMemberDetailsScreen_Previews: PreviewProvider, TestablePreview {
userSession: UserSessionMock(.init(clientProxy: clientProxyMock)),
userIndicatorController: UserIndicatorControllerMock.default,
analytics: AnalyticsServiceMock.default,
appSettings: AppSettings())
appSettings: .volatile())
}
}
@@ -826,7 +826,7 @@ extension ComposerToolbarViewModel {
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init(suggestions: suggestions)),
mediaProvider: MediaProviderMock(configuration: .init()),
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
appSettings: AppSettings(),
appSettings: .volatile(),
analyticsService: AnalyticsServiceMock.default,
composerDraftService: ComposerDraftServiceMock(.init()))
viewModel.state.bindings.composerFocused = focused
@@ -81,7 +81,7 @@ struct RoomAttachmentPicker_Previews: PreviewProvider, TestablePreview {
static let viewModel = makeViewModel()
static func makeViewModel() -> ComposerToolbarViewModel {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return ComposerToolbarViewModel(roomProxy: JoinedRoomProxyMock(.init()),
wysiwygViewModel: WysiwygComposerViewModel(),
@@ -461,7 +461,7 @@ extension RoomScreenViewModel {
roomProxy: roomProxyMock,
initialSelectedPinnedEventID: nil,
ongoingCallRoomIDPublisher: .init(.init(nil)),
appSettings: AppSettings(),
appSettings: .volatile(),
appHooks: appHooks,
analyticsService: AnalyticsServiceMock.default,
userIndicatorController: UserIndicatorControllerMock.default)
@@ -362,7 +362,7 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview {
powerLevelsConfiguration: .init(canUserSendMessage: canSendMessage)))
let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
timelineController: MockTimelineController(),
userSession: UserSessionMock(.init()),
@@ -229,40 +229,30 @@ struct SecurityAndPrivacyScreen: View {
// MARK: - Previews
struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
static let inviteOnlyViewModel = {
AppSettings.resetAllSettings()
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsCreator,
joinRule: .invite)),
clientProxy: ClientProxyMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
}()
static let inviteOnlyViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsCreator,
joinRule: .invite)),
clientProxy: ClientProxyMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: .volatile())
static let publicViewModel = {
AppSettings.resetAllSettings()
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .public,
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
}()
static let publicViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
canonicalAlias: "#room:matrix.org",
members: .allMembersAsCreator,
joinRule: .public,
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: .volatile())
static let publicNoAddressViewModel = {
AppSettings.resetAllSettings()
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
members: .allMembersAsCreator,
joinRule: .public)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
}()
static let publicNoAddressViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
members: .allMembersAsCreator,
joinRule: .public)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: .volatile())
static let singleSpaceMembersViewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let space = [SpaceServiceRoom].mockSingleRoom[0]
@@ -278,8 +268,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
}()
static let multipleSpacesMembersViewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let spaces = [SpaceServiceRoom].mockJoinedSpaces
@@ -295,8 +284,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
}()
static let askToJoinViewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.knockingEnabled = true
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
@@ -310,8 +298,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
}()
static let singleAskToJoinSpaceMembersViewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.knockingEnabled = true
let space = [SpaceServiceRoom].mockSingleRoom[0]
@@ -328,8 +315,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
}()
static let multipleAskToJoinSpacesMembersViewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.knockingEnabled = true
let spaces = [SpaceServiceRoom].mockJoinedSpaces
@@ -345,18 +331,15 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
appSettings: appSettings)
}()
static let publicSpaceViewModel = {
AppSettings.resetAllSettings()
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isSpace: true,
isEncrypted: false,
canonicalAlias: "#space:matrix.org",
members: .allMembersAsCreator,
joinRule: .public,
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: AppSettings())
}()
static let publicSpaceViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isSpace: true,
isEncrypted: false,
canonicalAlias: "#space:matrix.org",
members: .allMembersAsCreator,
joinRule: .public,
isVisibleInPublicDirectory: true)),
clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")),
userIndicatorController: UserIndicatorControllerMock(),
appSettings: .volatile())
static var previews: some View {
ElementNavigationStack {
@@ -161,8 +161,7 @@ private extension AppAppearance {
struct AdvancedSettingsScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return AdvancedSettingsScreenViewModel(advancedSettings: appSettings,
analytics: AnalyticsServiceMock.default,
clientProxy: ClientProxyMock(.init()),
@@ -39,7 +39,7 @@ struct AnalyticsSettingsScreen: View {
struct AnalyticsSettingsScreen_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let viewModel = AnalyticsSettingsScreenViewModel(appSettings: appSettings,
analytics: AnalyticsServiceMock.default)
AnalyticsSettingsScreen(context: viewModel.context)
@@ -249,8 +249,8 @@ private extension Set<TraceLogPack> {
// MARK: - Previews
struct DeveloperOptionsScreen_Previews: PreviewProvider {
static let viewModel = DeveloperOptionsScreenViewModel(developerOptions: AppSettings(),
elementCallBaseURL: AppSettings().elementCallBaseURL,
static let viewModel = DeveloperOptionsScreenViewModel(developerOptions: AppSettings.volatile(),
elementCallBaseURL: AppSettings.volatile().elementCallBaseURL,
appHooks: AppHooks(),
clientProxy: ClientProxyMock(.init()))
@@ -33,7 +33,7 @@ struct LegalInformationScreen: View {
// MARK: - Previews
struct LegalInformationScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = LegalInformationScreenViewModel(appSettings: AppSettings())
static let viewModel = LegalInformationScreenViewModel(appSettings: .volatile())
static var previews: some View {
LegalInformationScreen(context: viewModel.context)
}
@@ -264,7 +264,7 @@ struct NotificationSettingsScreen: View {
struct NotificationSettingsScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel: NotificationSettingsScreenViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let notificationCenter = UserNotificationCenterMock()
notificationCenter.authorizationStatusReturnValue = .notDetermined
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
@@ -292,7 +292,7 @@ struct NotificationSettingsScreen_Previews: PreviewProvider, TestablePreview {
}()
static let viewModelConfigurationMismatch: NotificationSettingsScreenViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let notificationCenter = UserNotificationCenterMock()
notificationCenter.authorizationStatusReturnValue = .notDetermined
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
@@ -277,7 +277,7 @@ struct SettingsScreen_Previews: PreviewProvider, TestablePreview {
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@userid:example.com",
deviceID: "AAAAAAAAAAA"))))
return SettingsScreenViewModel(userSession: userSession,
appSettings: AppSettings(),
appSettings: .volatile(),
isBugReportServiceEnabled: isBugReportServiceEnabled,
isInSecondaryWindow: false)
}
@@ -141,7 +141,7 @@ struct UserDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
UserDetailsEditScreenViewModel(userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@stefan:matrix.org",
canChangeAvatar: canChangeProfile,
canChangeDisplayName: canChangeProfile)))),
mediaUploadingPreprocessor: .init(appSettings: AppSettings()),
mediaUploadingPreprocessor: .init(appSettings: .volatile()),
userIndicatorController: UserIndicatorControllerMock.default)
}
}
@@ -136,7 +136,7 @@ struct SpaceSettingsScreen_Previews: PreviewProvider, TestablePreview {
userIndicatorController: UserIndicatorControllerMock.default,
notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()),
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
appSettings: AppSettings())
appSettings: .volatile())
}
static var previews: some View {
@@ -144,8 +144,7 @@ struct SpacesScreen_Previews: PreviewProvider, TestablePreview {
}
static func makeViewModel(isEmpty: Bool = false) -> SpacesScreenViewModel {
AppSettings.resetAllSettings()
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let clientProxy = ClientProxyMock(.init())
clientProxy.spaceService = SpaceServiceProxyMock(.init(topLevelSpaces: isEmpty ? [] : .mockJoinedSpaces))
@@ -87,7 +87,7 @@ struct JoinRoomByAddressView_Previews: PreviewProvider, TestablePreview {
analytics: AnalyticsServiceMock.default,
userIndicatorController: UserIndicatorControllerMock(),
userDiscoveryService: userDiscoveryService,
appSettings: AppSettings())
appSettings: .volatile())
}()
static var previews: some View {
@@ -154,7 +154,7 @@ struct StartChatScreen: View {
struct StartChatScreen_Previews: PreviewProvider, TestablePreview {
static let viewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@userid:example.com"))))
let userDiscoveryService = UserDiscoveryServiceMock()
userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice])
@@ -1121,7 +1121,8 @@ extension TimelineViewModel {
clientProxyMock.roomSummaryForIdentifierReturnValue = .mock(id: "!room:matrix.org", name: "Room", canonicalAlias: "#room:matrix.org")
let roomProxy = JoinedRoomProxyMock(.init(name: "Preview room", predecessor: hasPredecessor ? .init(roomId: UUID().uuidString) : nil))
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: roomProxy,
focussedEventID: nil,
timelineController: timelineController ?? MockTimelineController(timelineKind: timelineKind),
@@ -342,7 +342,7 @@ struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview {
isViewSourceEnabled: true,
areThreadsEnabled: true,
timelineKind: .live,
emojiProvider: EmojiProvider(appSettings: AppSettings()))
emojiProvider: EmojiProvider(appSettings: .volatile()))
guard let actions = provider.makeActions() else { return nil }
if var textItem = item as? TextRoomTimelineItem {
@@ -45,7 +45,7 @@ struct ReadReceiptsSummaryView_Previews: PreviewProvider, TestablePreview {
]
let roomProxyMock = JoinedRoomProxyMock(.init(name: "Room", members: members))
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: roomProxyMock,
timelineController: MockTimelineController(),
@@ -334,7 +334,7 @@ private extension TimelineItemKeyForwarder {
struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview {
static let viewModel: TimelineViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.threadsEnabled = true
let roomProxy = JoinedRoomProxyMock(.init())
@@ -353,7 +353,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
}()
static let viewModelWithPins: TimelineViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
appSettings.threadsEnabled = true
let roomProxy = JoinedRoomProxyMock(.init(name: "Preview Room", pinnedEventIDs: ["pinned"]))
@@ -80,7 +80,8 @@ struct TimelineReadReceiptsView_Previews: PreviewProvider, TestablePreview {
]
static let viewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Test", members: members)),
timelineController: MockTimelineController(),
userSession: UserSessionMock(.init()),
@@ -90,7 +90,8 @@ struct HighlightedTimelineItemTimeline_Previews: PreviewProvider {
static let focussedEventID = "RoomTimelineItemFixtures.default.5"
static let composerViewModel = ComposerToolbarViewModel.mock()
static let timelineViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: roomProxyMock,
focussedEventID: focussedEventID,
timelineController: MockTimelineController(),
@@ -153,7 +153,8 @@ struct TimelineView_Previews: PreviewProvider { // Not testable as this preview
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
static let composerViewModel = ComposerToolbarViewModel.mock()
static let timelineViewModel = {
let appSettings = AppSettings()
let appSettings = AppSettings.volatile()
return TimelineViewModel(roomProxy: roomProxyMock,
timelineController: MockTimelineController(),
userSession: UserSessionMock(.init()),
@@ -148,6 +148,6 @@ struct UserProfileScreen_Previews: PreviewProvider, TestablePreview {
userSession: UserSessionMock(.init(clientProxy: clientProxyMock)),
userIndicatorController: UserIndicatorControllerMock.default,
analytics: AnalyticsServiceMock.default,
appSettings: AppSettings())
appSettings: .volatile())
}
}