From 149663662ba94812deb05b8a0d6e31581988e59a Mon Sep 17 00:00:00 2001 From: Wally Hackenslacker Date: Wed, 18 Mar 2026 08:54:57 -0400 Subject: [PATCH] refactor: centralize unauthorized detection and simplify workspace rollback --- .../kanbn4droid/app/boards/BoardsDrawerModels.kt | 5 +++++ .../kanbn4droid/app/boards/BoardsRepository.kt | 3 +-- .../kanbn4droid/app/boards/BoardsViewModel.kt | 8 -------- .../kanbn4droid/app/boards/BoardsViewModelTest.kt | 3 +++ 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsDrawerModels.kt b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsDrawerModels.kt index e91b219..158647e 100644 --- a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsDrawerModels.kt +++ b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsDrawerModels.kt @@ -34,3 +34,8 @@ data class BoardsDrawerState( val isWorkspaceInteractionEnabled: Boolean = false, val isWorkspaceSwitchInFlight: Boolean = false, ) + +internal fun String.isUnauthorizedFailureMessage(): Boolean { + val normalized = lowercase() + return "401" in normalized || "403" in normalized || "authentication" in normalized || "unauthorized" in normalized +} diff --git a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsRepository.kt b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsRepository.kt index 661df92..8d266d9 100644 --- a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsRepository.kt +++ b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsRepository.kt @@ -219,8 +219,7 @@ class BoardsRepository( } private fun isUnauthorizedMessage(message: String): Boolean { - val normalized = message.lowercase() - return "401" in normalized || "403" in normalized || "authentication" in normalized || "unauthorized" in normalized + return message.isUnauthorizedFailureMessage() } private fun isNetworkMessage(message: String): Boolean { diff --git a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModel.kt b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModel.kt index 7b85697..b1dfaf8 100644 --- a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModel.kt +++ b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModel.kt @@ -89,9 +89,6 @@ class BoardsViewModel( } is BoardsApiResult.Failure -> { - if (!currentWorkspaceId.isNullOrBlank()) { - repository.switchWorkspace(currentWorkspaceId) - } _uiState.update { it.copy( drawer = it.drawer.copy( @@ -292,8 +289,3 @@ class BoardsViewModel( } } } - -private fun String.isUnauthorizedFailureMessage(): Boolean { - val normalized = lowercase() - return "401" in normalized || "403" in normalized || "authentication" in normalized || "unauthorized" in normalized -} diff --git a/app/src/test/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModelTest.kt b/app/src/test/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModelTest.kt index 2905340..3541646 100644 --- a/app/src/test/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModelTest.kt +++ b/app/src/test/java/space/hackenslacker/kanbn4droid/app/boards/BoardsViewModelTest.kt @@ -316,6 +316,7 @@ class BoardsViewModelTest { assertEquals("ws-1", viewModel.uiState.value.drawer.activeWorkspaceId) assertEquals("ws-1", sessionStore.getWorkspaceId()) + assertEquals(1, api.listBoardsCalls) } @Test @@ -342,6 +343,7 @@ class BoardsViewModelTest { val event = eventDeferred.await() assertTrue(event is BoardsUiEvent.ForceSignOut) assertEquals("ws-1", sessionStore.getWorkspaceId()) + assertEquals(1, api.listBoardsCalls) } @Test @@ -364,6 +366,7 @@ class BoardsViewModelTest { assertEquals(null, sessionStore.getWorkspaceId()) assertEquals(null, viewModel.uiState.value.drawer.activeWorkspaceId) + assertEquals(1, api.listBoardsCalls) } private fun newViewModel(