diff --git a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsModalSheetLayout.kt b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsModalSheetLayout.kt index 3237eabd28e..3a0e1b9edfb 100644 --- a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsModalSheetLayout.kt +++ b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsModalSheetLayout.kt @@ -85,7 +85,7 @@ fun ConversationOptionsModalSheetLayout( ) ArchiveConversationDialog( dialogState = viewModel.archiveConversationDialogState, - onArchiveButtonClicked = { viewModel.moveToArchive(it.conversationId, !it.isArchived, !it.isMember) } + onArchiveButtonClicked = { viewModel.moveToArchive(it.conversationId, !it.isArchived, it.isMember) } ) HandleActions(viewModel.actions) { action -> when (action) { @@ -119,7 +119,7 @@ fun ConversationOptionsModalSheetLayout( updateConversationArchiveStatus = { sheetState.hide { when { - it.isArchived -> viewModel.moveToArchive(it.conversationId, false, !it.isMember) + it.isArchived -> viewModel.moveToArchive(it.conversationId, false, it.isMember) else -> viewModel.archiveConversationDialogState.show(it) } } diff --git a/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsMenuViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsMenuViewModelTest.kt index 871654c74de..e3bb4a0ae5c 100644 --- a/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsMenuViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationOptionsMenuViewModelTest.kt @@ -258,6 +258,44 @@ class ConversationOptionsMenuViewModelTest { } } + @Test + fun `given user is not a member, when moving to archive, then archive only locally`() = runTest(dispatcherProvider.main()) { + val (arrangement, viewModel) = Arrangement() + .withUpdateArchivedStatus(ArchiveStatusUpdateResult.Success) + .arrange() + + viewModel.actions.test { + viewModel.moveToArchive(conversationId, true, false) + + coVerify(exactly = 1) { arrangement.updateConversationArchivedStatus(conversationId, true, true, any()) } + assertIs(awaitItem()).also { + assertIs(it.message).also { + assertEquals(true, it.isArchiving) + } + } + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `given user is not a member, when removing from archive, then unarchive only locally`() = runTest(dispatcherProvider.main()) { + val (arrangement, viewModel) = Arrangement() + .withUpdateArchivedStatus(ArchiveStatusUpdateResult.Success) + .arrange() + + viewModel.actions.test { + viewModel.moveToArchive(conversationId, false, false) + + coVerify(exactly = 1) { arrangement.updateConversationArchivedStatus(conversationId, false, true, any()) } + assertIs(awaitItem()).also { + assertIs(it.message).also { + assertEquals(false, it.isArchiving) + } + } + cancelAndIgnoreRemainingEvents() + } + } + @Test fun `given success, when changing muted state, then call proper action`() = runTest(dispatcherProvider.main()) { val (arrangement, viewModel) = Arrangement()