Adopt StateStoreViewModelV2 in the remaining settings screens. (#4158)

* Move the AuthenticationStartScreen into the Authentication directory.

* Commit the updated Sentry license.

No idea why they dropped the 2024 🤷‍♂️

* Use StateStoreViewModelV2 in BugReportScreen.

* Use StateStoreViewModelV2 in UserDetailsEditScreen.

* Use StateStoreViewModelV2 in NotificationSettingsScreen.

* Use StateStoreViewModelV2 in NotificationSettingsEditScreen.

* Use StateStoreViewModelV2 in LegalInformationScreen.

* Use StateStoreViewModelV2 in LogViewerScreen.

* Use StateStoreViewModelV2 in AnalyticsSettingsScreen.

* Rename AdvancedSettingsScreen directory.

* Use StateStoreViewModelV2 in EncryptionResetScreen.

* Use StateStoreViewModelV2 in EncryptionResetPasswordScreen.

* Use StateStoreViewModelV2 in SecureBackup…Screens.

* Use StateStoreViewModelV2 in LoginScreen.

Seems this one was ignored waiting on the fulfillment transitionValues implementation.

* Use StateStoreViewModelV2 in DeactivateAccountScreen.

* Move DeactivateAccountScreen into the Settings directory.
This commit is contained in:
Doug
2025-05-30 12:24:56 +01:00
committed by GitHub
parent 565ca3ab0b
commit 458c6aaa57
54 changed files with 238 additions and 294 deletions
@@ -58,9 +58,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
}
}
let deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferred = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
@@ -88,9 +86,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
}
}
let deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferred = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
@@ -112,9 +108,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
}
}
let deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferred = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
@@ -137,22 +131,21 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
}
}
var deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredSettings = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
try await deferred.fulfill()
try await deferredSettings.fulfill()
XCTAssertEqual(context.viewState.settings?.directChatsMode, .allMessages)
XCTAssertEqual(context.viewState.settings?.inconsistentSettings, [.init(chatType: .oneToOneChat, isEncrypted: false)])
deferred = deferFulfillment(viewModel.context.$viewState, keyPath: \.fixingConfigurationMismatch, transitionValues: [false, true, false])
let deferredMismatch = deferFulfillment(viewModel.context.observe(\.viewState.fixingConfigurationMismatch),
transitionValues: [false, true, false])
context.send(viewAction: .fixConfigurationMismatchTapped)
try await deferred.fulfill()
try await deferredMismatch.fulfill()
// Ensure we only fix the invalid setting: unencrypted one-to-one chats should be set to `.allMessages` (to match encrypted one-to-one chats)
XCTAssertEqual(notificationSettingsProxy.setDefaultRoomNotificationModeIsEncryptedIsOneToOneModeCallsCount, 1)
@@ -175,30 +168,24 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
}
}
var deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredSettings = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
try await deferred.fulfill()
try await deferredSettings.fulfill()
XCTAssertEqual(context.viewState.settings?.directChatsMode, .allMessages)
XCTAssertEqual(context.viewState.settings?.inconsistentSettings, [.init(chatType: .groupChat, isEncrypted: false), .init(chatType: .oneToOneChat, isEncrypted: false)])
deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.fixingConfigurationMismatch == true
}
var deferredMismatch = deferFulfillment(viewModel.context.observe(\.viewState.fixingConfigurationMismatch)) { $0 }
context.send(viewAction: .fixConfigurationMismatchTapped)
try await deferred.fulfill()
try await deferredMismatch.fulfill()
deferred = deferFulfillment(viewModel.context.$viewState) { state in
state.fixingConfigurationMismatch == false
}
deferredMismatch = deferFulfillment(viewModel.context.observe(\.viewState.fixingConfigurationMismatch)) { !$0 }
try await deferred.fulfill()
try await deferredMismatch.fulfill()
// All problems should be fixed
XCTAssertEqual(notificationSettingsProxy.setDefaultRoomNotificationModeIsEncryptedIsOneToOneModeCallsCount, 2)
@@ -216,9 +203,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleRoomMentionOff() async throws {
notificationSettingsProxy.isRoomMentionEnabledReturnValue = true
let deferredState = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredState = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
notificationSettingsProxy.callbacks.send(.settingsDidChange)
@@ -241,9 +226,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleRoomMentionOn() async throws {
notificationSettingsProxy.isRoomMentionEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
try await deferredInitialFetch.fulfill()
@@ -266,9 +249,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
notificationSettingsProxy.setRoomMentionEnabledEnabledThrowableError = NotificationSettingsError.Generic(msg: "error")
notificationSettingsProxy.isRoomMentionEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -276,17 +257,13 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
context.roomMentionsEnabled = true
var deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == true
}
var deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { $0 }
context.send(viewAction: .roomMentionChanged)
try await deferred.fulfill()
deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == false
}
deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { !$0 }
try await deferred.fulfill()
@@ -296,9 +273,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleCallsOff() async throws {
notificationSettingsProxy.isCallEnabledReturnValue = true
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -320,9 +295,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleCallsOn() async throws {
notificationSettingsProxy.isCallEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -346,9 +319,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
notificationSettingsProxy.setCallEnabledEnabledThrowableError = NotificationSettingsError.Generic(msg: "error")
notificationSettingsProxy.isCallEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -356,17 +327,13 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
context.callsEnabled = true
var deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == true
}
var deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { $0 }
context.send(viewAction: .callsChanged)
try await deferred.fulfill()
deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == false
}
deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { !$0 }
try await deferred.fulfill()
@@ -376,9 +343,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleInvitationsOff() async throws {
notificationSettingsProxy.isInviteForMeEnabledReturnValue = true
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -400,9 +365,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
func testToggleInvitationsOn() async throws {
notificationSettingsProxy.isInviteForMeEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -426,9 +389,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
notificationSettingsProxy.setInviteForMeEnabledEnabledThrowableError = NotificationSettingsError.Generic(msg: "error")
notificationSettingsProxy.isInviteForMeEnabledReturnValue = false
let deferredInitialFetch = deferFulfillment(viewModel.context.$viewState) { state in
state.settings != nil
}
let deferredInitialFetch = deferFulfillment(viewModel.context.observe(\.viewState.settings)) { $0 != nil }
viewModel.fetchInitialContent()
@@ -436,17 +397,13 @@ class NotificationSettingsScreenViewModelTests: XCTestCase {
context.invitationsEnabled = true
var deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == true
}
var deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { $0 }
context.send(viewAction: .invitationsChanged)
try await deferred.fulfill()
deferred = deferFulfillment(context.$viewState) { state in
state.applyingChange == false
}
deferred = deferFulfillment(context.observe(\.viewState.applyingChange)) { !$0 }
try await deferred.fulfill()