Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: remove not needed usage of observe self user [WPB-15414] #3863

Merged
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.legalhold.LegalHoldStateForSelfUser
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldStateForSelfUserUseCase
import com.wire.kalium.logic.feature.personaltoteamaccount.CanMigrateFromPersonalToTeamUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

Expand All @@ -50,12 +50,13 @@ class HomeViewModel @Inject constructor(
override val savedStateHandle: SavedStateHandle,
private val globalDataStore: GlobalDataStore,
private val dataStore: UserDataStore,
private val getSelfUser: GetSelfUserUseCase,
private val observeSelf: ObserveSelfUserUseCase,
private val needsToRegisterClient: NeedsToRegisterClientUseCase,
private val canMigrateFromPersonalToTeam: CanMigrateFromPersonalToTeamUseCase,
private val observeLegalHoldStatusForSelfUser: ObserveLegalHoldStateForSelfUserUseCase,
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase,
private val analyticsManager: AnonymousAnalyticsManager
private val analyticsManager: AnonymousAnalyticsManager,
) : SavedStateViewModel(savedStateHandle) {

@VisibleForTesting
Expand Down Expand Up @@ -97,7 +98,7 @@ class HomeViewModel @Inject constructor(

fun checkRequirements(onRequirement: (HomeRequirement) -> Unit) {
viewModelScope.launch {
val selfUser = observeSelf().first()
val selfUser = getSelfUser() ?: return@launch
when {
shouldTriggerMigrationForUser(selfUser.id) ->
onRequirement(HomeRequirement.Migration(selfUser.id))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,19 @@ import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.data.user.type.UserType
import com.wire.kalium.logic.feature.conversation.CreateGroupConversationUseCase
import com.wire.kalium.logic.feature.user.GetDefaultProtocolUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.collections.immutable.toImmutableSet
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

@Suppress("LongParameterList", "TooManyFunctions")
@HiltViewModel
class NewConversationViewModel @Inject constructor(
private val createGroupConversation: CreateGroupConversationUseCase,
private val observeSelfUser: ObserveSelfUserUseCase,
private val getSelfUser: GetSelfUserUseCase,
getDefaultProtocol: GetDefaultProtocolUseCase
) : ViewModel() {

Expand All @@ -78,16 +77,20 @@ class NewConversationViewModel @Inject constructor(
var createGroupState: CreateGroupState by mutableStateOf(CreateGroupState())

init {
setConversationCreationParam()
observeGroupNameChanges()
}

private fun setConversationCreationParam() {
viewModelScope.launch {
val selfUser = observeSelfUser().first()
val isSelfTeamMember = selfUser.teamId != null
val isSelfExternalTeamMember = selfUser.userType == UserType.EXTERNAL
val selfUser = getSelfUser()
val isSelfTeamMember = selfUser?.teamId != null
val isSelfExternalTeamMember = selfUser?.userType == UserType.EXTERNAL
newGroupState = newGroupState.copy(
isSelfTeamMember = isSelfTeamMember,
isGroupCreatingAllowed = !isSelfExternalTeamMember
)
}
observeGroupNameChanges()
}

private fun observeGroupNameChanges() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,29 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.ui.navArgs
import com.wire.android.util.fileDateTime
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.util.DateTimeUtil
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class E2eiCertificateDetailsViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val observerSelfUser: ObserveSelfUserUseCase,
private val getSelfUser: GetSelfUserUseCase,
) : ViewModel() {
private val navArgs: E2eiCertificateDetailsScreenNavArgs =
savedStateHandle.navArgs()

private var selfUserHandle: String? = null

init {
getSelfUserId()
getSelfUserHandle()
}

private fun getSelfUserId() {
private fun getSelfUserHandle() {
viewModelScope.launch {
selfUserHandle = observerSelfUser().first().handle
selfUserHandle = getSelfUser()?.handle
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,10 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
importMediaState = importMediaState.copy(importedAssets = importMediaState.importedAssets.removeAt(index))
}

private fun loadUserAvatar() = viewModelScope.launch(dispatchers.io()) {
private fun loadUserAvatar() = viewModelScope.launch {
getSelf().collect { selfUser ->
withContext(dispatchers.main()) {
avatarAsset = selfUser.previewPicture?.let {
ImageAsset.UserAvatarAsset(it)
}
avatarAsset = selfUser.previewPicture?.let {
ImageAsset.UserAvatarAsset(it)
}
}
}
Expand Down Expand Up @@ -225,6 +223,7 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
appLogger.e("$TAG: Failed to import asset message: Unknown error")
null
}

is HandleUriAssetUseCase.Result.Success -> ImportedMediaAsset(result.assetBundle, null)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.di.CurrentAccount
import com.wire.android.model.ImageAsset
import com.wire.android.ui.home.conversations.details.participants.usecase.ObserveConversationRoleForUserUseCase
import com.wire.android.ui.navArgs
Expand All @@ -38,15 +39,13 @@ import com.wire.kalium.logic.feature.conversation.AddServiceToConversationUseCas
import com.wire.kalium.logic.feature.conversation.RemoveMemberFromConversationUseCase
import com.wire.kalium.logic.feature.service.GetServiceByIdUseCase
import com.wire.kalium.logic.feature.service.ObserveIsServiceMemberUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.functional.nullableFold
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
Expand All @@ -57,22 +56,20 @@ import javax.inject.Inject
@HiltViewModel
class ServiceDetailsViewModel @Inject constructor(
private val dispatchers: DispatcherProvider,
private val observeSelfUser: ObserveSelfUserUseCase,
@CurrentAccount private val selfUserId: UserId,
private val getServiceById: GetServiceByIdUseCase,
private val observeIsServiceMember: ObserveIsServiceMemberUseCase,
private val observeConversationRoleForUser: ObserveConversationRoleForUserUseCase,
private val removeMemberFromConversation: RemoveMemberFromConversationUseCase,
private val addServiceToConversation: AddServiceToConversationUseCase,
private val serviceDetailsMapper: ServiceDetailsMapper,
serviceDetailsMapper: ServiceDetailsMapper,
savedStateHandle: SavedStateHandle
) : ViewModel() {

private val serviceDetailsNavArgs: ServiceDetailsNavArgs = savedStateHandle.navArgs()
private val serviceId: ServiceId = serviceDetailsMapper.fromBotServiceToServiceId(serviceDetailsNavArgs.botService)
private val conversationId: QualifiedID = serviceDetailsNavArgs.conversationId

private lateinit var selfUserId: UserId

var serviceDetailsState by mutableStateOf(ServiceDetailsState())
private val _infoMessage = MutableSharedFlow<UIText>()
val infoMessage = _infoMessage.asSharedFlow()
Expand All @@ -86,7 +83,6 @@ class ServiceDetailsViewModel @Inject constructor(
isAvatarLoading = true
)

selfUserId = observeSelfUser().first().id
getServiceDetailsAndUpdateViewState()?.let {
observeIsServiceConversationMember()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.legalhold.LegalHoldStateForSelfUser
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldStateForSelfUserUseCase
import com.wire.kalium.logic.feature.personaltoteamaccount.CanMigrateFromPersonalToTeamUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand Down Expand Up @@ -126,7 +127,10 @@ class HomeViewModelTest {
lateinit var dataStore: UserDataStore

@MockK
lateinit var getSelf: ObserveSelfUserUseCase
lateinit var observeSelfUser: ObserveSelfUserUseCase

@MockK
lateinit var getSelf: GetSelfUserUseCase

@MockK
lateinit var needsToRegisterClient: NeedsToRegisterClientUseCase
Expand All @@ -148,12 +152,13 @@ class HomeViewModelTest {
savedStateHandle = savedStateHandle,
globalDataStore = globalDataStore,
dataStore = dataStore,
observeSelf = getSelf,
observeSelf = observeSelfUser,
needsToRegisterClient = needsToRegisterClient,
observeLegalHoldStatusForSelfUser = observeLegalHoldStatusForSelfUser,
shouldTriggerMigrationForUser = shouldTriggerMigrationForUser,
analyticsManager = analyticsManager,
canMigrateFromPersonalToTeam = canMigrateFromPersonalToTeam
canMigrateFromPersonalToTeam = canMigrateFromPersonalToTeam,
getSelfUser = getSelf,
)
}

Expand All @@ -164,7 +169,7 @@ class HomeViewModelTest {
}

fun withGetSelf(result: Flow<SelfUser>) = apply {
coEvery { getSelf.invoke() } returns result
coEvery { observeSelfUser.invoke() } returns result
}

private fun withCanMigrateFromPersonalToTeamReturning(result: Boolean) = apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,12 @@ import com.wire.kalium.logic.data.user.UserAvailabilityStatus
import com.wire.kalium.logic.data.user.type.UserType
import com.wire.kalium.logic.feature.conversation.CreateGroupConversationUseCase
import com.wire.kalium.logic.feature.user.GetDefaultProtocolUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.IsMLSEnabledUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.flow.flowOf
import kotlinx.datetime.Instant

internal class NewConversationViewModelArrangement {
Expand All @@ -62,7 +61,7 @@ internal class NewConversationViewModelArrangement {
lateinit var isMLSEnabledUseCase: IsMLSEnabledUseCase

@MockK
lateinit var observeSelfUserUseCase: ObserveSelfUserUseCase
lateinit var getSelf: GetSelfUserUseCase

@MockK(relaxed = true)
lateinit var onGroupCreated: (ConversationId) -> Unit
Expand Down Expand Up @@ -172,10 +171,10 @@ internal class NewConversationViewModelArrangement {
}

fun withGetSelfUser(isTeamMember: Boolean, userType: UserType = UserType.INTERNAL) = apply {
coEvery { observeSelfUserUseCase() } returns flowOf(SELF_USER.copy(
coEvery { getSelf() } returns SELF_USER.copy(
teamId = if (isTeamMember) TeamId("teamId") else null,
userType = userType,
))
)
}

fun withDefaultProtocol(supportedProtocol: SupportedProtocol) = apply {
Expand All @@ -184,7 +183,7 @@ internal class NewConversationViewModelArrangement {

fun arrange() = this to NewConversationViewModel(
createGroupConversation = createGroupConversation,
observeSelfUser = observeSelfUserUseCase,
getSelfUser = getSelf,
getDefaultProtocol = getDefaultProtocol
).also {
it.createGroupState = createGroupState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import com.wire.kalium.logic.feature.conversation.AddServiceToConversationUseCas
import com.wire.kalium.logic.feature.conversation.RemoveMemberFromConversationUseCase
import com.wire.kalium.logic.feature.service.GetServiceByIdUseCase
import com.wire.kalium.logic.feature.service.ObserveIsServiceMemberUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.functional.Either
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand Down Expand Up @@ -282,9 +281,6 @@ class ServiceDetailsViewModelTest {

private class Arrangement {

@MockK
lateinit var observeSelfUser: ObserveSelfUserUseCase

@MockK
lateinit var getServiceById: GetServiceByIdUseCase

Expand All @@ -305,10 +301,12 @@ class ServiceDetailsViewModelTest {
@MockK
lateinit var savedStateHandle: SavedStateHandle

private val selfUser = TestUser.SELF_USER

private val viewModel by lazy {
ServiceDetailsViewModel(
TestDispatcherProvider(),
observeSelfUser,
selfUserId = selfUser.id,
getServiceById,
observeIsServiceMember,
observeConversationRoleForUser,
Expand All @@ -322,32 +320,31 @@ class ServiceDetailsViewModelTest {
init {
MockKAnnotations.init(this, relaxUnitFun = true)
mockUri()
coEvery { observeSelfUser() } returns flowOf(TestUser.SELF_USER)
}

fun withService(service: BotService) = apply {
every { savedStateHandle.navArgs<ServiceDetailsNavArgs>() } returns ServiceDetailsNavArgs(service, CONVERSATION_ID)
}

suspend fun withConversationRoleForUser(roleData: ConversationRoleData) = apply {
fun withConversationRoleForUser(roleData: ConversationRoleData) = apply {
coEvery {
observeConversationRoleForUser.invoke(any(), any())
} returns flowOf(roleData)
}

suspend fun withServiceDetails(serviceDetails: ServiceDetails?) = apply {
fun withServiceDetails(serviceDetails: ServiceDetails?) = apply {
coEvery { getServiceById(any()) } returns serviceDetails
}

suspend fun withIsServiceMember(eitherMember: Either<StorageFailure, UserId?>) = apply {
fun withIsServiceMember(eitherMember: Either<StorageFailure, UserId?>) = apply {
coEvery { observeIsServiceMember(any(), any()) } returns flowOf(eitherMember)
}

suspend fun withRemoveService(result: RemoveMemberFromConversationUseCase.Result) = apply {
fun withRemoveService(result: RemoveMemberFromConversationUseCase.Result) = apply {
coEvery { removeMemberFromConversation(any(), any()) } returns result
}

suspend fun withAddService(result: AddServiceToConversationUseCase.Result) = apply {
fun withAddService(result: AddServiceToConversationUseCase.Result) = apply {
coEvery { addServiceToConversation(any(), any()) } returns result
}

Expand Down
2 changes: 1 addition & 1 deletion kalium
Submodule kalium updated 55 files
+1 −1 .github/workflows/gradle-android-instrumented-tests.yml
+1 −1 .github/workflows/gradle-android-unit-tests.yml
+1 −1 .github/workflows/gradle-ios-tests.yml
+2 −2 .github/workflows/gradle-jvm-tests.yml
+3 −3 android/src/main/kotlin/com/wire/kalium/presentation/MainActivity.kt
+1 −2 cli/src/commonMain/kotlin/com/wire/kalium/cli/commands/GenerateEventsCommand.kt
+1 −1 gradle/libs.versions.toml
+9 −4 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/client/E2EIClientProvider.kt
+18 −5 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/conversation/JoinExistingMLSConversationsUseCase.kt
+4 −3 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/conversation/MLSConversationRepository.kt
+4 −6 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/user/UserRepository.kt
+2 −1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/CreateBackupUseCase.kt
+2 −1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/CreateObfuscatedCopyUseCase.kt
+2 −3 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/RestoreBackupUseCase.kt
+0 −1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt
+6 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/client/RegisterClientUseCase.kt
+5 −3 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/protocol/OneOnOneProtocolSelector.kt
+15 −17 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/team/SyncSelfTeamUseCase.kt
+2 −8 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/GetSelfUserUseCase.kt
+2 −7 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveSelfUserUseCase.kt
+2 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/UpdateSelfUserSupportedProtocolsUseCase.kt
+6 −4 logic/src/commonTest/kotlin/com/wire/kalium/logic/client/E2EIClientProviderTest.kt
+2 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/conversation/ConversationRepositoryTest.kt
+73 −0 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/conversation/MLSConversationRepositoryTest.kt
+2 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/backup/CreateBackupUseCaseTest.kt
+2 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/backup/RestoreBackupUseCaseTest.kt
+2 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/RegisterClientUseCaseTest.kt
+36 −0 ...src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/JoinExistingMLSConversationsUseCaseTest.kt
+10 −11 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/protocol/OneOnOneProtocolSelectorTest.kt
+45 −46 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/team/SyncSelfTeamUseCaseTest.kt
+2 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/user/UpdateSupportedProtocolsUseCaseTest.kt
+4 −3 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/provider/E2EIClientProviderArrangement.kt
+3 −3 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/UserRepositoryArrangement.kt
+5 −0 network/src/commonMain/kotlin/com/wire/kalium/network/exceptions/KaliumException.kt
+1 −0 network/src/commonMain/kotlin/com/wire/kalium/network/exceptions/NetworkErrorLabel.kt
+22 −9 persistence/src/commonMain/db_user/com/wire/kalium/persistence/Clients.sq
+34 −15 persistence/src/commonMain/db_user/com/wire/kalium/persistence/Users.sq
+48 −27 persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/UserDAOImpl.kt
+22 −4 persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/client/ClientDAOImpl.kt
+78 −0 persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/UserDAOTest.kt
+1 −1 persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/client/ClientDAOTest.kt
+1 −1 persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/message/draft/MessageDraftDAOTest.kt
+1 −0 testservice/.gitignore
+21 −0 testservice/Dockerfile
+8 −22 testservice/Jenkinsfile
+11 −32 testservice/README.md
+5 −0 testservice/ansible/README.md
+2 −0 testservice/ansible/hosts.ini
+4 −0 testservice/ansible/roles/common/files/20auto-upgrades
+5 −0 testservice/ansible/roles/common/handlers/main.yml
+37 −0 testservice/ansible/roles/common/tasks/main.yml
+18 −0 testservice/ansible/roles/kalium-testservice/files/kalium-testservice.service
+94 −0 testservice/ansible/roles/kalium-testservice/tasks/main.yml
+13 −0 testservice/ansible/site.yml
+1 −0 testservice/src/main/kotlin/com/wire/kalium/testservice/managed/InstanceService.kt
Loading