Merge pull request #43 from garfiec/fix/stop-double-logout

fix(settings): stop double-invoking authRepository.logout on logout/delete
This commit is contained in:
Garfie Chiu 2026-04-15 01:59:57 -05:00 committed by GitHub
commit 47b3cb1e96
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 17 deletions

View file

@ -23,7 +23,6 @@ import com.garfiec.librechat.feature.settings.util.PlatformCacheCleaner
import com.garfiec.librechat.feature.settings.viewmodel.delegate.SpeechSettingsContract
import com.garfiec.librechat.feature.settings.viewmodel.delegate.SpeechSettingsFactory
import com.google.common.truth.Truth.assertThat
import io.mockk.Ordering
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
@ -158,23 +157,20 @@ class SettingsViewModelTest {
}
@Test
fun `logout calls authRepository and sets isLoggedOut`() = runTest {
coEvery { authRepository.logout() } returns Result.Success(Unit)
fun `logout sets isLoggedOut flag without calling authRepository`() = runTest {
viewModel = createViewModel()
advanceUntilIdle()
viewModel.logout()
advanceUntilIdle()
coVerify { authRepository.logout() }
coVerify(exactly = 0) { authRepository.logout() }
assertThat(viewModel.uiState.value.isLoggedOut).isTrue()
}
@Test
fun `deleteAccount calls userRepository then authRepository`() = runTest {
fun `deleteAccount calls userRepository and sets isAccountDeleted without calling authRepository`() = runTest {
coEvery { userRepository.deleteUser() } returns Result.Success(Unit)
coEvery { authRepository.logout() } returns Result.Success(Unit)
viewModel = createViewModel()
advanceUntilIdle()
@ -182,10 +178,8 @@ class SettingsViewModelTest {
viewModel.deleteAccount()
advanceUntilIdle()
coVerify(ordering = Ordering.ORDERED) {
userRepository.deleteUser()
authRepository.logout()
}
coVerify { userRepository.deleteUser() }
coVerify(exactly = 0) { authRepository.logout() }
assertThat(viewModel.uiState.value.isAccountDeleted).isTrue()
}

View file

@ -585,11 +585,7 @@ class SettingsViewModel(
// ── Auth actions ───────────────────────────────────────────────
fun logout() {
viewModelScope.launch {
_uiState.update { it.copy(isLoading = true) }
authRepository.logout()
_uiState.update { it.copy(isLoading = false, isLoggedOut = true) }
}
_uiState.update { it.copy(isLoggedOut = true) }
}
fun deleteAccount(token: String? = null, backupCode: String? = null) {
@ -597,7 +593,6 @@ class SettingsViewModel(
_uiState.update { it.copy(isLoading = true) }
when (val result = userRepository.deleteUser(token = token, backupCode = backupCode)) {
is Result.Success -> {
authRepository.logout()
_uiState.update { it.copy(isLoading = false, isAccountDeleted = true, showDeleteAccountOtpDialog = false) }
}
is Result.Error -> {