mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-1948 Tech | Object Types Screen returns ObjectWrapper.Type (#586)
This commit is contained in:
parent
5cae9bc07c
commit
c3981413a1
21 changed files with 185 additions and 275 deletions
|
@ -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<FragmentEditorBinding>(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<FragmentEditorBinding>(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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<OnObjectTypeAction> {
|
||||
override fun onItemClicked(item: ObjectWrapper.Type) {
|
||||
withParent<OnObjectSelectTypeAction> {
|
||||
onProceedWithUpdateType(item)
|
||||
}
|
||||
hideSoftInput()
|
||||
|
@ -48,8 +47,4 @@ class AppDefaultObjectTypeFragment : BaseObjectTypeChangeFragment() {
|
|||
arguments = bundleOf(ARG_EXCLUDE_TYPES to excludeTypes)
|
||||
}
|
||||
}
|
||||
|
||||
interface OnObjectTypeAction {
|
||||
fun onProceedWithUpdateType(item: ObjectTypeView)
|
||||
}
|
||||
}
|
|
@ -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<OnDataViewSelectSourceAction> {
|
||||
onProceedWithSelectSource(id = item.id)
|
||||
}
|
||||
|
|
|
@ -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<OnObjectSelectTypeAction> {
|
||||
onProceedWithDraftUpdateType(item)
|
||||
onProceedWithUpdateType(objType = item)
|
||||
}
|
||||
hideSoftInput()
|
||||
dismiss()
|
||||
|
|
|
@ -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<OnDataViewSelectSourceAction> {
|
||||
onProceedWithSelectSource(id = item.id)
|
||||
}
|
||||
|
|
|
@ -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<OnObjectSelectTypeAction> {
|
||||
onProceedWithUpdateType(item)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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<FragmentUserSettingsBinding>(),
|
||||
AppDefaultObjectTypeFragment.OnObjectTypeAction {
|
||||
OnObjectSelectTypeAction {
|
||||
|
||||
@Inject
|
||||
lateinit var factory: PersonalizationSettingsViewModel.Factory
|
||||
|
||||
private val vm by viewModels<PersonalizationSettingsViewModel> { 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?) {
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<ObjectWrapper.Type>()
|
||||
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ class ObjectTypeChangeViewModel(
|
|||
}
|
||||
|
||||
private val setup = MutableSharedFlow<Setup>(replay = 0)
|
||||
private val _objTypes = MutableStateFlow<List<ObjectWrapper.Type>>(emptyList())
|
||||
|
||||
val views = MutableStateFlow<List<ObjectTypeItemView>>(emptyList())
|
||||
val commands = MutableSharedFlow<Command>()
|
||||
|
@ -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()
|
||||
|
|
|
@ -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}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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<String>()
|
||||
)
|
||||
)
|
||||
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue