From c3981413a1b574fd451969d2147215c25cf4a985 Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Wed, 22 Nov 2023 16:53:36 +0100 Subject: [PATCH] DROID-1948 Tech | Object Types Screen returns ObjectWrapper.Type (#586) --- .../anytype/ui/editor/EditorFragment.kt | 11 +-- .../ui/objects/ObjectTypeChangeFragment.kt | 4 +- .../pickers/AppDefaultObjectTypeFragment.kt | 11 +-- .../pickers/DataViewSelectSourceFragment.kt | 4 +- .../pickers/DraftObjectSelectTypeFragment.kt | 6 +- .../EmptyDataViewSelectSourceFragment.kt | 4 +- .../types/pickers/ObjectSelectTypeFragment.kt | 5 +- .../types/pickers/OnObjectSelectTypeAction.kt | 6 +- .../anytype/ui/sets/ObjectSetFragment.kt | 10 +- .../PersonalizationSettingsFragment.kt | 11 +-- .../anytype/domain/misc/GetObjectTypeTest.kt | 89 ++++++++---------- .../presentation/editor/EditorViewModel.kt | 40 +++++--- .../objects/ObjectTypeChangeViewModel.kt | 27 +++--- .../presentation/sets/ObjectSetViewModel.kt | 8 +- .../presentation/collections/MockSet.kt | 8 +- .../collections/ObjectCreateTest.kt | 30 ++++-- .../editor/EditorFeaturedRelationsTest.kt | 73 ++++----------- .../editor/editor/EditorNoteLayoutTest.kt | 3 + .../main/ObjectSetDataViewObjectCreateTest.kt | 9 +- .../sets/main/SetByRelationTest.kt | 9 +- .../types/ObjectTypeChangeViewModelTest.kt | 92 +++---------------- 21 files changed, 185 insertions(+), 275 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index 58a52dd864..a44fdf6567 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -48,6 +48,7 @@ import com.anytypeio.anytype.BuildConfig import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.SyncStatus import com.anytypeio.anytype.core_models.ThemeColor import com.anytypeio.anytype.core_models.Url @@ -701,7 +702,7 @@ open class EditorFragment : NavigationFragment(R.layout.f ) binding.objectTypesToolbar.setupClicks( - onItemClick = vm::onObjectTypeChanged, + onItemClick = vm::onTypesWidgetItemClicked, onSearchClick = vm::onObjectTypesWidgetSearchClicked, onDoneClick = vm::onObjectTypesWidgetDoneClicked ) @@ -2088,12 +2089,8 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.proceedToCreateObjectAndAddToTextAsLink(name) } - override fun onProceedWithUpdateType(item: ObjectTypeView) { - vm.onObjectTypeChanged(item) - } - - override fun onProceedWithDraftUpdateType(item: ObjectTypeView) { - vm.onObjectTypeChanged(item) + override fun onProceedWithUpdateType(objType: ObjectWrapper.Type) { + vm.onObjectTypeChanged(objType) } override fun onAddRelationToTarget(target: Id, relationKey: Key) { diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/ObjectTypeChangeFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/ObjectTypeChangeFragment.kt index 0a43ed812f..fbebaef5f9 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/ObjectTypeChangeFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/ObjectTypeChangeFragment.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_ui.features.objects.ObjectTypeVerticalAdapter import com.anytypeio.anytype.core_ui.reactive.textChanges import com.anytypeio.anytype.core_utils.ext.argOrNull @@ -20,7 +21,6 @@ import com.anytypeio.anytype.databinding.FragmentObjectTypeChangeBinding import com.anytypeio.anytype.presentation.objects.ObjectTypeChangeViewModel import com.anytypeio.anytype.presentation.objects.ObjectTypeChangeViewModel.Command import com.anytypeio.anytype.presentation.objects.ObjectTypeChangeViewModelFactory -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import javax.inject.Inject abstract class BaseObjectTypeChangeFragment : @@ -28,7 +28,7 @@ abstract class BaseObjectTypeChangeFragment : abstract fun setTitle() abstract fun startWithParams() - abstract fun onItemClicked(item: ObjectTypeView) + abstract fun onItemClicked(item: ObjectWrapper.Type) @Inject lateinit var factory: ObjectTypeChangeViewModelFactory diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/AppDefaultObjectTypeFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/AppDefaultObjectTypeFragment.kt index c06be93e21..1f1415a122 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/AppDefaultObjectTypeFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/AppDefaultObjectTypeFragment.kt @@ -3,11 +3,10 @@ package com.anytypeio.anytype.ui.objects.types.pickers import androidx.core.os.bundleOf import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id -import com.anytypeio.anytype.core_models.Key +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.hideSoftInput import com.anytypeio.anytype.core_utils.ext.withParent import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.ui.objects.BaseObjectTypeChangeFragment /** @@ -23,8 +22,8 @@ class AppDefaultObjectTypeFragment : BaseObjectTypeChangeFragment() { ) } - override fun onItemClicked(item: ObjectTypeView) { - withParent { + override fun onItemClicked(item: ObjectWrapper.Type) { + withParent { onProceedWithUpdateType(item) } hideSoftInput() @@ -48,8 +47,4 @@ class AppDefaultObjectTypeFragment : BaseObjectTypeChangeFragment() { arguments = bundleOf(ARG_EXCLUDE_TYPES to excludeTypes) } } - - interface OnObjectTypeAction { - fun onProceedWithUpdateType(item: ObjectTypeView) - } } \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DataViewSelectSourceFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DataViewSelectSourceFragment.kt index 852e257776..d0f36c65e6 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DataViewSelectSourceFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DataViewSelectSourceFragment.kt @@ -3,10 +3,10 @@ package com.anytypeio.anytype.ui.objects.types.pickers import androidx.core.os.bundleOf import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.hideSoftInput import com.anytypeio.anytype.core_utils.ext.withParent import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.ui.objects.BaseObjectTypeChangeFragment /** @@ -24,7 +24,7 @@ class DataViewSelectSourceFragment : BaseObjectTypeChangeFragment() { ) } - override fun onItemClicked(item: ObjectTypeView) { + override fun onItemClicked(item: ObjectWrapper.Type) { withParent { onProceedWithSelectSource(id = item.id) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DraftObjectSelectTypeFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DraftObjectSelectTypeFragment.kt index c0760cf9e7..61ca1fa896 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DraftObjectSelectTypeFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/DraftObjectSelectTypeFragment.kt @@ -3,10 +3,10 @@ package com.anytypeio.anytype.ui.objects.types.pickers import androidx.core.os.bundleOf import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.hideSoftInput import com.anytypeio.anytype.core_utils.ext.withParent import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.ui.objects.BaseObjectTypeChangeFragment /** @@ -24,9 +24,9 @@ class DraftObjectSelectTypeFragment : BaseObjectTypeChangeFragment() { ) } - override fun onItemClicked(item: ObjectTypeView) { + override fun onItemClicked(item: ObjectWrapper.Type) { withParent { - onProceedWithDraftUpdateType(item) + onProceedWithUpdateType(objType = item) } hideSoftInput() dismiss() diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/EmptyDataViewSelectSourceFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/EmptyDataViewSelectSourceFragment.kt index ab76747b92..be7a31dd78 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/EmptyDataViewSelectSourceFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/EmptyDataViewSelectSourceFragment.kt @@ -1,10 +1,10 @@ package com.anytypeio.anytype.ui.objects.types.pickers import com.anytypeio.anytype.R +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.hideSoftInput import com.anytypeio.anytype.core_utils.ext.withParent import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.ui.objects.BaseObjectTypeChangeFragment /** @@ -22,7 +22,7 @@ class EmptyDataViewSelectSourceFragment : BaseObjectTypeChangeFragment() { ) } - override fun onItemClicked(item: ObjectTypeView) { + override fun onItemClicked(item: ObjectWrapper.Type) { withParent { onProceedWithSelectSource(id = item.id) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/ObjectSelectTypeFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/ObjectSelectTypeFragment.kt index f0fa7cbfd2..51844aa898 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/ObjectSelectTypeFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/ObjectSelectTypeFragment.kt @@ -3,11 +3,10 @@ package com.anytypeio.anytype.ui.objects.types.pickers import androidx.core.os.bundleOf import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id -import com.anytypeio.anytype.core_models.Key +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.hideSoftInput import com.anytypeio.anytype.core_utils.ext.withParent import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.ui.objects.BaseObjectTypeChangeFragment /** @@ -25,7 +24,7 @@ class ObjectSelectTypeFragment : BaseObjectTypeChangeFragment() { ) } - override fun onItemClicked(item: ObjectTypeView) { + override fun onItemClicked(item: ObjectWrapper.Type) { withParent { onProceedWithUpdateType(item) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/OnObjectSelectTypeAction.kt b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/OnObjectSelectTypeAction.kt index 22df4c0a97..5c8d7bc274 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/OnObjectSelectTypeAction.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/objects/types/pickers/OnObjectSelectTypeAction.kt @@ -1,8 +1,8 @@ package com.anytypeio.anytype.ui.objects.types.pickers -import com.anytypeio.anytype.presentation.objects.ObjectTypeView +import com.anytypeio.anytype.core_models.ObjectWrapper + interface OnObjectSelectTypeAction { - fun onProceedWithUpdateType(item: ObjectTypeView) - fun onProceedWithDraftUpdateType(item: ObjectTypeView) + fun onProceedWithUpdateType(objType: ObjectWrapper.Type) } \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt index 583a8f124d..83a5d3cc1e 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt @@ -42,6 +42,7 @@ import com.anytypeio.anytype.BuildConfig import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.SyncStatus import com.anytypeio.anytype.core_ui.extensions.setEmojiOrNull import com.anytypeio.anytype.core_ui.features.dataview.ViewerGridAdapter @@ -1246,15 +1247,10 @@ open class ObjectSetFragment : inflater, container, false ) - override fun onProceedWithUpdateType(item: ObjectTypeView) { - vm.onNewTypeForViewerClicked(item.id) + override fun onProceedWithUpdateType(objType: ObjectWrapper.Type) { + vm.onNewTypeForViewerClicked(objType) } - override fun onProceedWithDraftUpdateType(item: ObjectTypeView) { - // Do nothing. - } - - private fun observeSelectingTemplate() { val navController = findNavController() val navBackStackEntry = navController.getBackStackEntry(R.id.objectSetScreen) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/settings/PersonalizationSettingsFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/settings/PersonalizationSettingsFragment.kt index 5603f959f8..e5409e5f25 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/settings/PersonalizationSettingsFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/settings/PersonalizationSettingsFragment.kt @@ -7,29 +7,28 @@ import android.view.ViewGroup import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.anytypeio.anytype.R -import com.anytypeio.anytype.core_models.Id -import com.anytypeio.anytype.core_models.Key +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_utils.ext.toast import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetFragment import com.anytypeio.anytype.core_utils.ui.proceed import com.anytypeio.anytype.databinding.FragmentUserSettingsBinding import com.anytypeio.anytype.di.common.componentManager -import com.anytypeio.anytype.presentation.objects.ObjectTypeView import com.anytypeio.anytype.presentation.settings.PersonalizationSettingsViewModel import com.anytypeio.anytype.ui.dashboard.ClearCacheAlertFragment import com.anytypeio.anytype.ui.objects.types.pickers.AppDefaultObjectTypeFragment +import com.anytypeio.anytype.ui.objects.types.pickers.OnObjectSelectTypeAction import javax.inject.Inject class PersonalizationSettingsFragment : BaseBottomSheetFragment(), - AppDefaultObjectTypeFragment.OnObjectTypeAction { + OnObjectSelectTypeAction { @Inject lateinit var factory: PersonalizationSettingsViewModel.Factory private val vm by viewModels { factory } - override fun onProceedWithUpdateType(item: ObjectTypeView) { - vm.proceedWithUpdateType(type = item.id, key = item.key, name = item.name) + override fun onProceedWithUpdateType(objType: ObjectWrapper.Type) { + vm.proceedWithUpdateType(type = objType.id, key = objType.uniqueKey, name = objType.name) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/domain/src/test/java/com/anytypeio/anytype/domain/misc/GetObjectTypeTest.kt b/domain/src/test/java/com/anytypeio/anytype/domain/misc/GetObjectTypeTest.kt index 2c134d7c47..776e5d65a4 100644 --- a/domain/src/test/java/com/anytypeio/anytype/domain/misc/GetObjectTypeTest.kt +++ b/domain/src/test/java/com/anytypeio/anytype/domain/misc/GetObjectTypeTest.kt @@ -52,30 +52,35 @@ class GetObjectTypeTest { fun `should return all object types`() { val type1 = ObjectWrapper.Type( - mapOf(Relations.ID to MockDataFactory.randomUuid()) + mapOf( + Relations.ID to MockDataFactory.randomUuid(), + Relations.UNIQUE_KEY to MockDataFactory.randomUuid() + ) ) val type2 = ObjectWrapper.Type( - mapOf(Relations.ID to MockDataFactory.randomUuid()) + mapOf( + Relations.ID to MockDataFactory.randomUuid(), + Relations.UNIQUE_KEY to MockDataFactory.randomUuid() + ) ) val type3 = ObjectWrapper.Type( - mapOf(Relations.ID to MockDataFactory.randomUuid()) + mapOf( + Relations.ID to MockDataFactory.randomUuid(), + Relations.UNIQUE_KEY to MockDataFactory.randomUuid() + ) ) runBlocking { stubGetObjectTypes(types = listOf(type1, type2, type3)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertEquals( - expected = listOf(type1, type2, type3), - actual = results - ) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertEquals( + expected = listOf(type1, type2, type3), actual = results + ) + }) val secondTimeResult = usecase.execute(params = defaultParams) assertEquals(firstTimeResult, secondTimeResult) @@ -106,15 +111,11 @@ class GetObjectTypeTest { stubGetObjectTypes(types = listOf(type1)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertEquals( - expected = sourceObject, - actual = results.first().sourceObject - ) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertEquals( + expected = sourceObject, actual = results.first().sourceObject + ) + }) } } @@ -134,15 +135,11 @@ class GetObjectTypeTest { stubGetObjectTypes(types = listOf(type1)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertEquals( - expected = sourceObject, - actual = results.first().sourceObject - ) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertEquals( + expected = sourceObject, actual = results.first().sourceObject + ) + }) } } @@ -164,15 +161,11 @@ class GetObjectTypeTest { stubGetObjectTypes(types = listOf(type1)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertEquals( - expected = sourceObject, - actual = results.first().sourceObject - ) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertEquals( + expected = sourceObject, actual = results.first().sourceObject + ) + }) } } @@ -191,12 +184,9 @@ class GetObjectTypeTest { stubGetObjectTypes(types = listOf(type1)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertNull(results.first().sourceObject) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertNull(results.first().sourceObject) + }) } } @@ -214,12 +204,9 @@ class GetObjectTypeTest { stubGetObjectTypes(types = listOf(type1)) val firstTimeResult = usecase.execute(params = defaultParams) - firstTimeResult.fold( - onFailure = { Assert.fail() }, - onSuccess = { results -> - assertNull(results.first().sourceObject) - } - ) + firstTimeResult.fold(onFailure = { Assert.fail() }, onSuccess = { results -> + assertNull(results.first().sourceObject) + }) } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt index a2045294a9..3dfaf5b9ef 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt @@ -4305,12 +4305,22 @@ class EditorViewModel( ) } + fun onTypesWidgetItemClicked(item: ObjectTypeView) { + Timber.d("onTypesWidgetItemClicked, item:[$item]") + val objType = _objectTypes.firstOrNull { item.id == it.id } + if (objType != null) { + onObjectTypeChanged(objType) + } else { + Timber.e("Error while getting object type from objectTypes list") + } + } + fun onObjectTypeChanged( - item: ObjectTypeView + objType: ObjectWrapper.Type ) { - Timber.d("onObjectTypeChanged, item:[$item]") + Timber.d("onObjectTypeChanged, item:[$objType]") viewModelScope.launch { - when (item.key) { + when (objType.uniqueKey) { ObjectTypeIds.SET -> { proceedWithConvertingToSet() } @@ -4318,7 +4328,7 @@ class EditorViewModel( proceedWithConvertingToCollection() } else -> { - proceedWithObjectTypeChangeAndApplyTemplate(item) + proceedWithObjectTypeChangeAndApplyTemplate(objType) } } } @@ -4846,6 +4856,8 @@ class EditorViewModel( getObjectTypes.async(params).fold( onFailure = { Timber.e(it, "Error while getting library object types") }, onSuccess = { types -> + _objectTypes.clear() + _objectTypes.addAll(types) val views = types.getObjectTypeViewsForSBPage( isWithCollection = false, isWithBookmark = false, @@ -5909,6 +5921,8 @@ class EditorViewModel( sendHideObjectTypeWidgetEvent() } + private val _objectTypes = mutableListOf() + private fun proceedWithGettingObjectTypesForObjectTypeWidget() { viewModelScope.launch { val excludeTypes = orchestrator.stores.details.current().details[context]?.type ?: emptyList() @@ -5925,6 +5939,8 @@ class EditorViewModel( getObjectTypes.async(params).fold( onFailure = { Timber.e(it, "Error while getting library object types") }, onSuccess = { types -> + _objectTypes.clear() + _objectTypes.addAll(types) val views = types.getObjectTypeViewsForSBPage( isWithCollection = true, isWithBookmark = false, @@ -5956,24 +5972,24 @@ class EditorViewModel( if (isObjectTypesWidgetVisible) controlPanelInteractor.onEvent(ObjectTypesWidgetEvent.Hide) } - private fun proceedWithObjectTypeChange(item: ObjectTypeView, onSuccess: (() -> Unit)? = null) { + private fun proceedWithObjectTypeChange(objType: ObjectWrapper.Type, onSuccess: (() -> Unit)? = null) { val startTime = System.currentTimeMillis() val internalFlags = getInternalFlagsFromDetails() val containsTypeFlag = internalFlags.contains(InternalFlags.ShouldSelectType) viewModelScope.launch { val params = SetObjectType.Params( context = context, - objectTypeKey = item.key + objectTypeKey = objType.uniqueKey ) setObjectType.async(params).fold( - onFailure = { Timber.e(it, "Error while updating object type: [${item.key}]") }, + onFailure = { Timber.e(it, "Error while updating object type: [${objType.uniqueKey}]") }, onSuccess = { response -> - Timber.d("proceedWithObjectTypeChange success, key:[${item.key}]") + Timber.d("proceedWithObjectTypeChange success, key:[${objType.uniqueKey}]") dispatcher.send(response) sendAnalyticsObjectTypeSelectOrChangeEvent( analytics = analytics, startTime = startTime, - sourceObject = item.sourceObject, + sourceObject = objType.sourceObject, containsFlagType = containsTypeFlag ) onSuccess?.invoke() @@ -5982,12 +5998,12 @@ class EditorViewModel( } } - private fun proceedWithObjectTypeChangeAndApplyTemplate(item: ObjectTypeView) { - proceedWithObjectTypeChange(item) { + private fun proceedWithObjectTypeChangeAndApplyTemplate(objType: ObjectWrapper.Type) { + proceedWithObjectTypeChange(objType) { val internalFlags = getInternalFlagsFromDetails() if (internalFlags.contains(InternalFlags.ShouldSelectTemplate)) { onProceedWithApplyingTemplateByObjectId( - template = item.defaultTemplate + template = objType.defaultTemplateId ) } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectTypeChangeViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectTypeChangeViewModel.kt index 5c13a73921..8f0ba19fdb 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectTypeChangeViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectTypeChangeViewModel.kt @@ -47,6 +47,7 @@ class ObjectTypeChangeViewModel( } private val setup = MutableSharedFlow(replay = 0) + private val _objTypes = MutableStateFlow>(emptyList()) val views = MutableStateFlow>(emptyList()) val commands = MutableSharedFlow() @@ -60,6 +61,7 @@ class ObjectTypeChangeViewModel( setup = setup, query = query ) + _objTypes.value = myTypes + marketplaceTypes val filteredLibraryTypes = filterLibraryTypesByExcluded( libraryTypes = myTypes, excludeTypes = setup.excludeTypes @@ -158,9 +160,13 @@ class ObjectTypeChangeViewModel( } ) } else { - proceedWithDispatchingType( - item = item - ) + val objType = _objTypes.value.firstOrNull { it.id == item.id } + if (objType == null) { + Timber.e("Object Type Change Screen, type is not found in types list") + sendToast("Error while choosing object type by key:${item.key}") + } else { + proceedWithDispatchingType(item = objType) + } } } } @@ -170,16 +176,7 @@ class ObjectTypeChangeViewModel( val type = struct?.mapToObjectWrapperType() if (type != null) { commands.emit(Command.TypeAdded(type = type.name.orEmpty())) - proceedWithDispatchingType( - item = ObjectTypeView( - id = result.id, - key = type.uniqueKey, - name = type.name.orEmpty(), - description = type.description.orEmpty(), - emoji = type.iconEmoji, - defaultTemplate = type.defaultTemplateId - ) - ) + proceedWithDispatchingType(item = type) } else { Timber.e("Type is not valid") sendToast("Error while adding object type by id:${result.id} to space") @@ -187,7 +184,7 @@ class ObjectTypeChangeViewModel( } private suspend fun proceedWithDispatchingType( - item: ObjectTypeView + item: ObjectWrapper.Type ) { commands.emit(Command.DispatchType(item)) } @@ -299,7 +296,7 @@ class ObjectTypeChangeViewModel( sealed class Command { data class DispatchType( - val item: ObjectTypeView + val item: ObjectWrapper.Type ) : Command() data class TypeAdded(val type: String) : Command() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt index 0a20204537..5cdc514265 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt @@ -1578,14 +1578,14 @@ class ObjectSetViewModel( } } - fun onNewTypeForViewerClicked(typeId: Id) { - Timber.d("onNewTypeForViewerClicked, typeId:[$typeId]") + fun onNewTypeForViewerClicked(objType: ObjectWrapper.Type) { + Timber.d("onNewTypeForViewerClicked, objType:[$objType]") viewModelScope.launch { - val type = storeOfObjectTypes.get(typeId) + val type = storeOfObjectTypes.get(objType.id) if (type != null) { selectedTypeFlow.value = SelectedType(type.id, type.defaultTemplateId) } else { - Timber.e("Couldn't find type in store by id:$typeId") + Timber.e("Couldn't find type in store by id:${objType.id}") } } } diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/MockSet.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/MockSet.kt index d87bb9d061..f0fd5dd3b5 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/MockSet.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/MockSet.kt @@ -21,7 +21,10 @@ import com.anytypeio.anytype.presentation.sets.subscription.DefaultDataViewSubsc import com.anytypeio.anytype.test_utils.MockDataFactory import net.bytebuddy.utility.RandomString -class MockSet(context: String, val setOfValue: String = "setOf-${RandomString.make()}") { +class MockSet(context: String, + val setOfValue: String = "setOf-${RandomString.make()}", + val setOfKey: String = "setOfKey-${RandomString.make()}" + ) { val root = context val title = @@ -184,7 +187,8 @@ class MockSet(context: String, val setOfValue: String = "setOf-${RandomString.ma ), setOf to Block.Fields( map = mapOf( - Relations.UNIQUE_KEY to setOf, + Relations.ID to setOf, + Relations.UNIQUE_KEY to setOfKey, Relations.TYPE to ObjectTypeIds.OBJECT_TYPE, Relations.RECOMMENDED_LAYOUT to ObjectType.Layout.BASIC.code.toDouble(), Relations.LAYOUT to ObjectType.Layout.OBJECT_TYPE.code.toDouble(), diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt index 7daba1a719..d3ef76bd94 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt @@ -47,9 +47,14 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { fun `Should create and open Object with NOTE Layout when clicking on New button in Set By Type`() = runTest { - val typeUniqueKey = "type-unique-key-${RandomString.make()}" + val setOfId = "setOf-id-${RandomString.make()}" + val setOfKey = "setOf-key-${RandomString.make()}" - mockObjectSet = MockSet(context = root, setOfValue = typeUniqueKey) + mockObjectSet = MockSet( + context = root, + setOfValue = setOfId, + setOfKey = setOfKey + ) // SETUP stubSpaceManager(mockObjectSet.spaceId) @@ -72,16 +77,16 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { val newObjectId = "objNewNote-${RandomString.make()}" val result = CreateDataViewObject.Result( objectId = newObjectId, - objectType = TypeKey(typeUniqueKey), + objectType = TypeKey(setOfKey), struct = mapOf( Relations.ID to newObjectId, - Relations.UNIQUE_KEY to typeUniqueKey, + Relations.UNIQUE_KEY to setOfKey, Relations.LAYOUT to ObjectType.Layout.NOTE.code.toDouble(), ) ) doReturn(Resultat.success(result)).`when`(createDataViewObject).async( CreateDataViewObject.Params.SetByType( - type = TypeKey(typeUniqueKey), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) @@ -100,7 +105,7 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { verifyBlocking(createDataViewObject, times(1)) { async( CreateDataViewObject.Params.SetByType( - type = TypeKey(typeUniqueKey), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) @@ -114,7 +119,14 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { fun `Should create and open Not-Note Object when clicking on New button in Set by Type`() = runTest { - mockObjectSet = MockSet(context = root, setOfValue = ObjectTypeIds.PAGE) + val setOfId = "setOf-id-${RandomString.make()}" + val setOfKey = ObjectTypeIds.PAGE + + mockObjectSet = MockSet( + context = root, + setOfValue = setOfId, + setOfKey = setOfKey + ) // SETUP stubSpaceManager(mockObjectSet.spaceId) @@ -140,7 +152,7 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { ) doReturn(Resultat.success(result)).`when`(createDataViewObject).async( CreateDataViewObject.Params.SetByType( - type = TypeKey(ObjectTypeIds.PAGE), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) @@ -160,7 +172,7 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { verifyBlocking(createDataViewObject, times(1)) { async( CreateDataViewObject.Params.SetByType( - type = TypeKey(ObjectTypeIds.PAGE), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorFeaturedRelationsTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorFeaturedRelationsTest.kt index c90fbad233..d11c6b39d4 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorFeaturedRelationsTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorFeaturedRelationsTest.kt @@ -6,9 +6,7 @@ import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Relation import com.anytypeio.anytype.core_models.Relations import com.anytypeio.anytype.core_models.StubObjectType -import com.anytypeio.anytype.core_models.StubRelationObject import com.anytypeio.anytype.core_models.ext.content -import com.anytypeio.anytype.presentation.BuildConfig import com.anytypeio.anytype.presentation.MockTypicalDocumentFactory import com.anytypeio.anytype.presentation.editor.EditorViewModel import com.anytypeio.anytype.presentation.editor.editor.model.BlockView @@ -76,6 +74,7 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val doc = listOf(page, header, title, block, featuredBlock) val objectTypeId = MockDataFactory.randomString() + val objectTypeKey = MockDataFactory.randomString() val objectTypeName = MockDataFactory.randomString() val objectTypeDescription = MockDataFactory.randomString() @@ -83,11 +82,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val r2 = MockTypicalDocumentFactory.relationObject("De") val r3 = MockTypicalDocumentFactory.relationObject("HJ") - val relationObjectType = StubObjectType( - id = objectTypeId, - name = "Object Type" - ) - val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() val value3 = MockDataFactory.randomString() @@ -103,6 +97,8 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectTypeKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -127,10 +123,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { listOf(r1, r2, r3) ) - storeOfObjectTypes.merge( - types = listOf(relationObjectType) - ) - val vm = buildViewModel() vm.onStart(root) @@ -203,6 +195,7 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val doc = listOf(page, header, title, block) val objectTypeId = MockDataFactory.randomString() + val objectTypeKey = MockDataFactory.randomString() val objectTypeName = MockDataFactory.randomString() val objectTypeDescription = MockDataFactory.randomString() @@ -210,11 +203,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val r2 = MockTypicalDocumentFactory.relationObject("De") val r3 = MockTypicalDocumentFactory.relationObject("HJ") - val relationObjectType = StubObjectType( - id = objectTypeId, - name = "Object Type" - ) - val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() val value3 = MockDataFactory.randomString() @@ -230,6 +218,8 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectTypeKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -253,10 +243,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { listOf(r1, r2, r3) ) - storeOfObjectTypes.merge( - listOf(relationObjectType) - ) - val vm = buildViewModel() vm.onStart(root) @@ -311,18 +297,13 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val doc = listOf(page, header, title, block, featuredBlock) val objectTypeId = MockDataFactory.randomString() + val objectTypeKey = MockDataFactory.randomString() val objectTypeName = MockDataFactory.randomString() val objectTypeDescription = MockDataFactory.randomString() val r1 = MockTypicalDocumentFactory.relationObject("Ad") val r2 = MockTypicalDocumentFactory.relationObject("De") val r3 = MockTypicalDocumentFactory.relationObject("HJ") - val relationObjectType = StubRelationObject( - key = Block.Fields.TYPE_KEY, - name = "Object Type", - format = Relation.Format.OBJECT - ) - val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() @@ -332,13 +313,15 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { r1.key to value1, r2.key to value2, r3.key to value3, - relationObjectType.key to objectTypeId, + Relations.TYPE to objectTypeId, Relations.FEATURED_RELATIONS to emptyList() ) ) val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectTypeKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -359,7 +342,7 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { ) storeOfRelations.merge( - listOf(r1, r2, r3, relationObjectType) + listOf(r1, r2, r3) ) val vm = buildViewModel() @@ -417,17 +400,13 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val doc = listOf(page, header, title, block, featuredBlock) val objectTypeId = MockDataFactory.randomString() + val objectTypeKey = MockDataFactory.randomString() val objectTypeName = "Movie" val objectTypeDescription = MockDataFactory.randomString() val r1 = MockTypicalDocumentFactory.relationObject("Ad") val r2 = MockTypicalDocumentFactory.relationObject("De") val r3 = MockTypicalDocumentFactory.relationObject("HJ") - val relationObjectType = StubRelationObject( - key = Block.Fields.TYPE_KEY, - name = "Object Type", - format = Relation.Format.OBJECT - ) val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() @@ -437,13 +416,15 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { r1.key to value1, r2.key to value2, r3.key to value3, - relationObjectType.key to objectTypeId, - Relations.FEATURED_RELATIONS to listOf(relationObjectType.key, r3.key) + Relations.TYPE to objectTypeId, + Relations.FEATURED_RELATIONS to listOf(Relations.TYPE, r3.key) ) ) val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectTypeKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -464,7 +445,7 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { ) storeOfRelations.merge( - listOf(r1, r2, relationObjectType) + listOf(r1, r2) ) val vm = buildViewModel() @@ -542,14 +523,10 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val doc = listOf(page, header, title, block, featuredBlock) val objectTypeId = MockDataFactory.randomString() + val objectTypeKey = MockDataFactory.randomString() val objectTypeName = MockDataFactory.randomString() val objectTypeDescription = MockDataFactory.randomString() - val relationObjectType = StubObjectType( - id = objectTypeId, - name = "Object Type" - ) - val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() val value3 = MockDataFactory.randomString() @@ -566,6 +543,8 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectTypeKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -590,10 +569,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { listOf(r1, r2, r3) ) - storeOfObjectTypes.merge( - listOf(relationObjectType) - ) - val vm = buildViewModel() vm.onStart(root) @@ -678,10 +653,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { val r2 = MockTypicalDocumentFactory.relationObject("De") val r3 = MockTypicalDocumentFactory.relationObject("HJ") - val relationObjectType = StubObjectType( - id = objectTypeId - ) - val value1 = MockDataFactory.randomString() val value2 = MockDataFactory.randomString() val value3 = MockDataFactory.randomString() @@ -710,10 +681,6 @@ class EditorFeaturedRelationsTest : EditorPresentationTestSetup() { listOf(r1, r2, r3) ) - storeOfObjectTypes.merge( - types = listOf(relationObjectType) - ) - val vm = buildViewModel() vm.onStart(root) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorNoteLayoutTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorNoteLayoutTest.kt index 8c73b3f461..1c42b8b162 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorNoteLayoutTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorNoteLayoutTest.kt @@ -113,6 +113,7 @@ class EditorNoteLayoutTest : EditorPresentationTestSetup() { val objectTypeFields = Block.Fields( mapOf( Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to objectType.uniqueKey, Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) @@ -229,6 +230,8 @@ class EditorNoteLayoutTest : EditorPresentationTestSetup() { val objectTypeFields = Block.Fields( mapOf( + Relations.ID to objectTypeId, + Relations.UNIQUE_KEY to MockDataFactory.randomString(), Relations.NAME to objectTypeName, Relations.DESCRIPTION to objectTypeDescription ) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetDataViewObjectCreateTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetDataViewObjectCreateTest.kt index 9dfde5c5f6..7a701078fb 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetDataViewObjectCreateTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetDataViewObjectCreateTest.kt @@ -24,11 +24,14 @@ class ObjectSetDataViewObjectCreateTest : ObjectSetViewModelTestSetup() { private lateinit var viewModel: ObjectSetViewModel private lateinit var mockObjectSet: MockSet + private val setOfId = "setOfId" + private val setOfKey = "setOfKey" + @Before fun setup() { MockitoAnnotations.openMocks(this) viewModel = givenViewModel() - mockObjectSet = MockSet(context = root) + mockObjectSet = MockSet(context = root, setOfValue = setOfId, setOfKey = setOfKey) } @After @@ -57,7 +60,7 @@ class ObjectSetDataViewObjectCreateTest : ObjectSetViewModelTestSetup() { ) doReturn(Unit).`when`(createDataViewObject).async( CreateDataViewObject.Params.SetByType( - type = TypeKey(mockObjectSet.setOf), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) @@ -80,7 +83,7 @@ class ObjectSetDataViewObjectCreateTest : ObjectSetViewModelTestSetup() { verifyBlocking(createDataViewObject, times(1)) { async( CreateDataViewObject.Params.SetByType( - type = TypeKey(mockObjectSet.setOf), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/SetByRelationTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/SetByRelationTest.kt index fbd34188c8..6e4264f3cd 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/SetByRelationTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/SetByRelationTest.kt @@ -25,11 +25,14 @@ class SetByRelationTest : ObjectSetViewModelTestSetup() { private lateinit var viewModel: ObjectSetViewModel private lateinit var mockObjectSet: MockSet + private val setOfId = "setOfId" + private val setOfKey = "setOfKey" + @Before fun setup() { closable = MockitoAnnotations.openMocks(this) viewModel = givenViewModel() - mockObjectSet = MockSet(context = root) + mockObjectSet = MockSet(context = root, setOfValue = setOfId, setOfKey = setOfKey) } @After @@ -60,7 +63,7 @@ class SetByRelationTest : ObjectSetViewModelTestSetup() { ) doReturn(Unit).`when`(createDataViewObject).async( CreateDataViewObject.Params.SetByType( - type = TypeKey(mockObjectSet.setOf), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) @@ -83,7 +86,7 @@ class SetByRelationTest : ObjectSetViewModelTestSetup() { verifyBlocking(createDataViewObject, times(1)) { async( CreateDataViewObject.Params.SetByType( - type = TypeKey(mockObjectSet.setOf), + type = TypeKey(setOfKey), filters = mockObjectSet.filters, template = null ) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/types/ObjectTypeChangeViewModelTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/types/ObjectTypeChangeViewModelTest.kt index 52e571e466..7ea5190bd5 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/types/ObjectTypeChangeViewModelTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/types/ObjectTypeChangeViewModelTest.kt @@ -10,6 +10,7 @@ import com.anytypeio.anytype.core_models.MarketplaceObjectTypeIds import com.anytypeio.anytype.core_models.ObjectTypeIds import com.anytypeio.anytype.core_models.Relations import com.anytypeio.anytype.core_models.StubObjectType +import com.anytypeio.anytype.core_models.ext.mapToObjectWrapperType import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.block.interactor.sets.GetObjectTypes import com.anytypeio.anytype.domain.block.repo.BlockRepository @@ -31,8 +32,12 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import org.mockito.ArgumentMatchers.anyList import org.mockito.Mock +import org.mockito.Mockito import org.mockito.MockitoAnnotations +import org.mockito.kotlin.any +import org.mockito.kotlin.anyArray import org.mockito.kotlin.doReturn import org.mockito.kotlin.stub import org.mockito.kotlin.times @@ -474,10 +479,10 @@ class ObjectTypeChangeViewModelTest { } doReturn listOf(marketplaceType3.map) } - val expectedType = StubObjectType( - id = expectedInstalledTypeId, - uniqueKey = expectedInstalledTypeUniqueKey, - name = "added type name", + val expectedType = mapOf( + Relations.ID to expectedInstalledTypeId, + Relations.UNIQUE_KEY to expectedInstalledTypeUniqueKey, + Relations.NAME to "added type name", ) blockRepository.stub { onBlocking { @@ -528,18 +533,13 @@ class ObjectTypeChangeViewModelTest { vm.onItemClicked(item) assertEquals( expected = - ObjectTypeChangeViewModel.Command.TypeAdded(type = expectedType.name!!), + ObjectTypeChangeViewModel.Command.TypeAdded(type = "added type name"), actual = awaitItem() ) + val expected = expectedType.mapToObjectWrapperType()!! assertEquals( expected = ObjectTypeChangeViewModel.Command.DispatchType( - ObjectTypeView( - id = expectedType.id, - key = expectedType.uniqueKey, - name = expectedType.name.orEmpty(), - description = expectedType.description.orEmpty(), - emoji = null - ) + expected ), actual = awaitItem() ) @@ -554,74 +554,6 @@ class ObjectTypeChangeViewModelTest { } } - @Test - fun `should dispatch selected type if one is user types is selected`() = runTest { - - // SETUP - - val marketplaceType1 = StubObjectType() - val marketplaceType2 = StubObjectType() - val installedType1 = StubObjectType(sourceObject = marketplaceType1.id) - val installedType2 = StubObjectType(sourceObject = marketplaceType2.id) - - - stubSpaceManager(spaceId) - val vm = givenViewModel() - - val expectedMyTypesFilters = ObjectSearchConstants.filterTypes( - spaces = listOf(spaceId), - recommendedLayouts = SupportedLayouts.editorLayouts - ) - val expectedMyTypeKeys = ObjectSearchConstants.defaultKeysObjectType - - blockRepository.stub { - onBlocking { - searchObjects( - filters = expectedMyTypesFilters, - sorts = ObjectSearchConstants.defaultObjectSearchSorts(), - limit = 0, - offset = 0, - fulltext = "", - keys = expectedMyTypeKeys - ) - } doReturn listOf( - installedType1.map, installedType2.map - ) - } - - // TESTING - - vm.onStart( - isWithBookmark = false, - isWithCollection = false, - isSetSource = false, - excludeTypes = emptyList(), - selectedTypes = emptyList() - ) - - vm.commands.test { - val item = ObjectTypeView( - id = installedType1.id, - key = installedType1.uniqueKey.orEmpty(), - name = installedType1.name.orEmpty(), - description = installedType1.description.orEmpty(), - emoji = installedType1.iconEmoji.orEmpty(), - ) - vm.onItemClicked(item) - assertEquals( - expected = ObjectTypeChangeViewModel.Command.DispatchType(item), - actual = awaitItem() - ) - } - - verifyBlocking(blockRepository, times(0)) { - addObjectListToSpace( - objects = listOf(installedType1.id), - space = spaceId - ) - } - } - private fun givenViewModel() = ObjectTypeChangeViewModel( getObjectTypes = getObjectTypes, addObjectTypeToSpace = addObjectToSpace,