Skip to content

Commit

Permalink
Merge branch 'develop' into feat/new_user_properties_for_analytics
Browse files Browse the repository at this point in the history
  • Loading branch information
borichellow committed Feb 26, 2025
2 parents 389894b + db3bd82 commit 96cfab5
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,10 @@
package com.wire.kalium.logic.data.conversation.folders

import com.benasher44.uuid.uuid4
import com.wire.kalium.logger.KaliumLogger.Companion.ApplicationFlow.CONVERSATIONS_FOLDERS
import com.wire.kalium.logger.obfuscateId
import com.wire.kalium.common.error.CoreFailure
import com.wire.kalium.common.error.NetworkFailure
import com.wire.kalium.logic.data.conversation.ConversationDetailsWithEvents
import com.wire.kalium.logic.data.conversation.ConversationFolder
import com.wire.kalium.logic.data.conversation.ConversationMapper
import com.wire.kalium.logic.data.conversation.FolderType
import com.wire.kalium.logic.data.conversation.FolderWithConversations
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.id.toDao
import com.wire.kalium.logic.di.MapperProvider
import com.wire.kalium.common.error.wrapApiRequest
import com.wire.kalium.common.error.wrapStorageRequest
import com.wire.kalium.common.functional.Either
import com.wire.kalium.common.functional.flatMap
import com.wire.kalium.common.functional.flatMapLeft
Expand All @@ -38,8 +30,16 @@ import com.wire.kalium.common.functional.mapRight
import com.wire.kalium.common.functional.onFailure
import com.wire.kalium.common.functional.onSuccess
import com.wire.kalium.common.logger.kaliumLogger
import com.wire.kalium.common.error.wrapApiRequest
import com.wire.kalium.common.error.wrapStorageRequest
import com.wire.kalium.logger.KaliumLogger.Companion.ApplicationFlow.CONVERSATIONS_FOLDERS
import com.wire.kalium.logger.obfuscateId
import com.wire.kalium.logic.data.conversation.ConversationDetailsWithEvents
import com.wire.kalium.logic.data.conversation.ConversationFolder
import com.wire.kalium.logic.data.conversation.ConversationMapper
import com.wire.kalium.logic.data.conversation.FolderType
import com.wire.kalium.logic.data.conversation.FolderWithConversations
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.id.toDao
import com.wire.kalium.logic.di.MapperProvider
import com.wire.kalium.network.api.authenticated.properties.LabelListResponseDTO
import com.wire.kalium.network.api.authenticated.properties.PropertyKey
import com.wire.kalium.network.api.base.authenticated.properties.PropertiesApi
Expand All @@ -57,7 +57,12 @@ internal interface ConversationFolderRepository {
suspend fun updateConversationFolders(folderWithConversations: List<FolderWithConversations>): Either<CoreFailure, Unit>
suspend fun fetchConversationFolders(): Either<CoreFailure, Unit>
suspend fun addConversationToFolder(conversationId: QualifiedID, folderId: String): Either<CoreFailure, Unit>
suspend fun removeConversationFromFolder(conversationId: QualifiedID, folderId: String): Either<CoreFailure, Unit>
suspend fun removeConversationFromFolder(
conversationId: QualifiedID,
folderId: String,
isFavorite: Boolean = false
): Either<CoreFailure, Unit>

suspend fun removeFolder(folderId: String): Either<CoreFailure, Unit>
suspend fun syncConversationFoldersFromLocal(): Either<CoreFailure, Unit>
suspend fun observeFolders(): Flow<Either<CoreFailure, List<ConversationFolder>>>
Expand Down Expand Up @@ -138,14 +143,22 @@ internal class ConversationFolderDataSource internal constructor(
}
}

override suspend fun removeConversationFromFolder(conversationId: QualifiedID, folderId: String): Either<CoreFailure, Unit> {
override suspend fun removeConversationFromFolder(
conversationId: QualifiedID,
folderId: String,
isFavorite: Boolean
): Either<CoreFailure, Unit> {
kaliumLogger.withFeatureId(CONVERSATIONS_FOLDERS)
.v("Removing conversation ${conversationId.toLogString()} from folder ${folderId.obfuscateId()}")
return wrapStorageRequest {
conversationFolderDAO.removeConversationFromFolder(conversationId.toDao(), folderId)
val conversations = conversationFolderDAO.observeConversationListFromFolder(folderId).first()
if (conversations.isEmpty()) {
conversationFolderDAO.removeFolder(folderId)
if (!isFavorite) {
val conversations = conversationFolderDAO.observeConversationListFromFolder(folderId).first()
if (conversations.isEmpty()) {
conversationFolderDAO.removeFolder(folderId)
} else {
Unit
}
} else {
Unit
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@
package com.wire.kalium.logic.feature.conversation.folder

import com.wire.kalium.common.error.CoreFailure
import com.wire.kalium.logic.data.conversation.folders.ConversationFolderRepository
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.common.functional.flatMap
import com.wire.kalium.common.functional.fold
import com.wire.kalium.logic.data.conversation.folders.ConversationFolderRepository
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.util.KaliumDispatcher
import com.wire.kalium.util.KaliumDispatcherImpl
import kotlinx.coroutines.withContext
Expand Down Expand Up @@ -53,7 +53,11 @@ internal class RemoveConversationFromFavoritesUseCaseImpl(
conversationFolderRepository.getFavoriteConversationFolder().fold(
{ RemoveConversationFromFavoritesUseCase.Result.Failure(it) },
{ folder ->
conversationFolderRepository.removeConversationFromFolder(conversationId, folder.id)
conversationFolderRepository.removeConversationFromFolder(
conversationId = conversationId,
folderId = folder.id,
isFavorite = true
)
.flatMap {
conversationFolderRepository.syncConversationFoldersFromLocal()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,26 @@ class ConversationFolderRepositoryTest {
coVerify { arrangement.conversationFolderDAO.removeFolder(eq(folderId)) }.wasInvoked()
}

@Test
fun givenLastConversationRemovedFromFavorite_whenRemovingConversation_thenFavoriteShouldNotBeDeleted() = runTest {
// given
val folderId = "folder1"
val conversationId = TestConversation.ID

val arrangement = Arrangement()
.withRemoveConversationFromFolder()
.withConversationsFromFolder(folderId, emptyList())

// when
val result = arrangement.repository.removeConversationFromFolder(conversationId, folderId, true)

// then
result.shouldSucceed()

coVerify { arrangement.conversationFolderDAO.removeConversationFromFolder(eq(conversationId.toDao()), eq(folderId)) }.wasInvoked()
coVerify { arrangement.conversationFolderDAO.removeFolder(eq(folderId)) }.wasNotInvoked()
}

@Test
fun givenRemainingConversationsInFolder_whenRemovingConversation_thenFolderShouldNotBeDeleted() = runTest {
// given
Expand All @@ -292,6 +312,7 @@ class ConversationFolderRepositoryTest {
coVerify { arrangement.conversationFolderDAO.removeFolder(eq(folderId)) }.wasNotInvoked()
}


private class Arrangement {

@Mock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
package com.wire.kalium.logic.feature.conversation.folder

import com.wire.kalium.common.error.CoreFailure
import com.wire.kalium.common.functional.Either
import com.wire.kalium.logic.data.conversation.ConversationFolder
import com.wire.kalium.logic.data.conversation.folders.ConversationFolderRepository
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.framework.TestConversation
import com.wire.kalium.logic.framework.TestFolder
import com.wire.kalium.common.functional.Either
import io.mockative.Mock
import io.mockative.coEvery
import io.mockative.coVerify
Expand Down Expand Up @@ -54,7 +54,7 @@ class RemoveConversationFromFavoritesUseCaseTest {
}.wasInvoked(exactly = once)

coVerify {
arrangement.conversationFolderRepository.removeConversationFromFolder(testConversationId, TestFolder.FAVORITE.id)
arrangement.conversationFolderRepository.removeConversationFromFolder(testConversationId, TestFolder.FAVORITE.id, true)
}.wasInvoked(exactly = once)
}

Expand Down Expand Up @@ -95,7 +95,7 @@ class RemoveConversationFromFavoritesUseCaseTest {
}.wasInvoked(exactly = once)

coVerify {
arrangement.conversationFolderRepository.removeConversationFromFolder(testConversationId, TestFolder.FAVORITE.id)
arrangement.conversationFolderRepository.removeConversationFromFolder(testConversationId, TestFolder.FAVORITE.id, true)
}.wasInvoked(exactly = once)
}

Expand All @@ -119,7 +119,7 @@ class RemoveConversationFromFavoritesUseCaseTest {
either: Either<CoreFailure, Unit>
) = apply {
coEvery {
conversationFolderRepository.removeConversationFromFolder(conversationId, folderId)
conversationFolderRepository.removeConversationFromFolder(conversationId, folderId, true)
}.returns(either)
}

Expand Down

0 comments on commit 96cfab5

Please sign in to comment.