Skip to content

Commit

Permalink
feat: archive locally for non members [WPB-5006] (#2366)
Browse files Browse the repository at this point in the history
  • Loading branch information
Garzas committed Oct 25, 2023
1 parent a089fdf commit d939a9b
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 25 deletions.
Expand Up @@ -153,10 +153,11 @@ internal fun ConversationMainSheetContent(
with(conversationSheetContent) {
updateConversationArchiveStatus(
DialogState(
conversationId,
title,
conversationTypeDetail,
isArchived
conversationId = conversationId,
conversationName = title,
conversationTypeDetail = conversationTypeDetail,
isArchived = isArchived,
isMember = conversationSheetContent.selfRole != null
)
)
}
Expand All @@ -174,10 +175,11 @@ internal fun ConversationMainSheetContent(
onItemClick = {
clearConversationContent(
DialogState(
conversationSheetContent.conversationId,
conversationSheetContent.title,
conversationSheetContent.conversationTypeDetail,
conversationSheetContent.isArchived
conversationId = conversationSheetContent.conversationId,
conversationName = conversationSheetContent.title,
conversationTypeDetail = conversationSheetContent.conversationTypeDetail,
isArchived = conversationSheetContent.isArchived,
isMember = conversationSheetContent.selfRole != null
)
)
}
Expand Down
Expand Up @@ -387,7 +387,14 @@ class GroupConversationDetailsViewModel @Inject constructor(
viewModelScope.launch {
val shouldArchive = dialogState.isArchived.not()
requestInProgress = true
val result = withContext(dispatcher.io()) { updateConversationArchivedStatus(conversationId, shouldArchive, timestamp) }
val result = withContext(dispatcher.io()) {
updateConversationArchivedStatus(
conversationId = conversationId,
shouldArchiveConversation = shouldArchive,
onlyLocally = !dialogState.isMember,
archivedStatusTimestamp = timestamp
)
}
requestInProgress = false
when (result) {
ArchiveStatusUpdateResult.Failure -> onMessage(
Expand Down
Expand Up @@ -414,8 +414,14 @@ class ConversationListViewModel @Inject constructor(
with(dialogState) {
viewModelScope.launch {
val isArchiving = !isArchived

requestInProgress = true
val result = updateConversationArchivedStatus(conversationId, isArchiving, timestamp)
val result = updateConversationArchivedStatus(
conversationId = conversationId,
shouldArchiveConversation = isArchiving,
onlyLocally = !dialogState.isMember,
archivedStatusTimestamp = timestamp
)
requestInProgress = false
when (result) {
is ArchiveStatusUpdateResult.Failure -> {
Expand Down
Expand Up @@ -32,5 +32,6 @@ data class DialogState(
val conversationId: ConversationId,
val conversationName: String,
val conversationTypeDetail: ConversationTypeDetail,
val isArchived: Boolean
val isArchived: Boolean,
val isMember: Boolean
)
Expand Up @@ -300,7 +300,13 @@ class OtherUserProfileScreenViewModel @Inject constructor(
viewModelScope.launch {
val shouldArchive = !dialogState.isArchived
requestInProgress = true
val result = withContext(dispatchers.io()) { updateConversationArchivedStatus(dialogState.conversationId, shouldArchive) }
val result = withContext(dispatchers.io()) {
updateConversationArchivedStatus(
conversationId = dialogState.conversationId,
shouldArchiveConversation = shouldArchive,
onlyLocally = !dialogState.isMember
)
}
requestInProgress = false
when (result) {
ArchiveStatusUpdateResult.Failure -> {
Expand Down
Expand Up @@ -147,7 +147,8 @@ class GroupConversationDetailsViewModelTest {
conversationId = conversationDetails.conversation.id,
isCreator = conversationDetails.isSelfUserCreator
),
isArchived = conversationDetails.conversation.archived
isArchived = conversationDetails.conversation.archived,
isMember = true
)

val (arrangement, viewModel) = GroupConversationDetailsViewModelArrangement()
Expand All @@ -167,7 +168,8 @@ class GroupConversationDetailsViewModelTest {
arrangement.updateConversationArchivedStatus(
conversationId = viewModel.conversationId,
shouldArchiveConversation = !conversationDetails.conversation.archived,
archivedStatusTimestamp = archivingEventTimestamp
archivedStatusTimestamp = archivingEventTimestamp,
onlyLocally = false
)
}
}
Expand All @@ -194,7 +196,8 @@ class GroupConversationDetailsViewModelTest {
conversationId = conversationDetails.conversation.id,
isCreator = conversationDetails.isSelfUserCreator
),
isArchived = conversationDetails.conversation.archived
isArchived = conversationDetails.conversation.archived,
isMember = true
)

val (arrangement, viewModel) = GroupConversationDetailsViewModelArrangement()
Expand All @@ -214,7 +217,8 @@ class GroupConversationDetailsViewModelTest {
arrangement.updateConversationArchivedStatus(
conversationId = viewModel.conversationId,
shouldArchiveConversation = false,
archivedStatusTimestamp = archivingEventTimestamp
archivedStatusTimestamp = archivingEventTimestamp,
onlyLocally = false
)
}
}
Expand Down Expand Up @@ -692,7 +696,7 @@ internal class GroupConversationDetailsViewModelArrangement {
coEvery { isMLSEnabledUseCase() } returns true
coEvery { updateConversationMutedStatus(any(), any(), any()) } returns ConversationUpdateStatusResult.Success
coEvery { observeSelfDeletionTimerSettingsForConversation(any(), any()) } returns flowOf(SelfDeletionTimer.Disabled)
coEvery { updateConversationArchivedStatus(any(), any()) } returns ArchiveStatusUpdateResult.Success
coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success
}

suspend fun withConversationDetailUpdate(conversationDetails: ConversationDetails) = apply {
Expand All @@ -719,8 +723,8 @@ internal class GroupConversationDetailsViewModelArrangement {
}

suspend fun withUpdateArchivedStatus(result: ArchiveStatusUpdateResult) = apply {
coEvery { updateConversationArchivedStatus(any(), any()) } returns result
coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns result
coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns result
}

fun arrange() = this to viewModel
Expand Down
Expand Up @@ -337,11 +337,12 @@ class ConversationListViewModelTest {
conversationItem.conversationId,
conversationItem.conversationInfo.name,
ConversationTypeDetail.Private(null, conversationItem.userId, BlockingState.NOT_BLOCKED),
!isArchiving
!isArchiving,
true
)
val archivingTimestamp = 123456789L

coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success
coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns ArchiveStatusUpdateResult.Success

conversationListViewModel.homeSnackBarState.test {
conversationListViewModel.moveConversationToArchive(dialogState, archivingTimestamp)
Expand All @@ -351,6 +352,7 @@ class ConversationListViewModelTest {
updateConversationArchivedStatus.invoke(
dialogState.conversationId,
!dialogState.isArchived,
onlyLocally = false,
archivingTimestamp
)
}
Expand All @@ -363,11 +365,12 @@ class ConversationListViewModelTest {
conversationItem.conversationId,
conversationItem.conversationInfo.name,
ConversationTypeDetail.Private(null, conversationItem.userId, BlockingState.NOT_BLOCKED),
!isArchiving
!isArchiving,
isMember = true
)
val archivingTimestamp = 123456789L

coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Failure
coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns ArchiveStatusUpdateResult.Failure

conversationListViewModel.homeSnackBarState.test {
conversationListViewModel.moveConversationToArchive(dialogState, archivingTimestamp)
Expand All @@ -377,7 +380,8 @@ class ConversationListViewModelTest {
updateConversationArchivedStatus.invoke(
dialogState.conversationId,
!dialogState.isArchived,
archivingTimestamp
false,
archivingTimestamp,
)
}
}
Expand Down
Expand Up @@ -144,7 +144,7 @@ internal class OtherUserProfileViewModelArrangement {
)
)
coEvery { observeSelfUser() } returns flowOf(TestUser.SELF_USER)
coEvery { updateConversationArchivedStatus(any(), any()) } returns ArchiveStatusUpdateResult.Success
coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success
every { userTypeMapper.toMembership(any()) } returns Membership.None
coEvery { getOneToOneConversation(USER_ID) } returns flowOf(
GetOneToOneConversationUseCase.Result.Success(OtherUserProfileScreenViewModelTest.CONVERSATION)
Expand Down

0 comments on commit d939a9b

Please sign in to comment.