#3120 Suggest categories based on depictions (#3736)

This commit is contained in:
Seán Mac Gillicuddy 2020-05-20 15:26:16 +01:00 committed by GitHub
parent 01839dec6e
commit de3377c0fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 99 additions and 84 deletions

View file

@ -1,7 +1,10 @@
package fr.free.nrw.commons.category
import categoryItem
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import depictedItem
import fr.free.nrw.commons.explore.depictions.DepictsClient
import fr.free.nrw.commons.upload.GpsCategoryModel
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
@ -36,11 +39,11 @@ class CategoriesModelTest {
// Checking if both return "Test"
val expectedItems = expectedList.map { CategoryItem(it, false) }
categoriesModel.searchAll("tes", emptyList())
categoriesModel.searchAll("tes", emptyList(), emptyList())
.test()
.assertValues(expectedItems)
categoriesModel.searchAll("Tes", emptyList())
categoriesModel.searchAll("Tes", emptyList(), emptyList())
.test()
.assertValues(expectedItems)
}
@ -48,6 +51,7 @@ class CategoriesModelTest {
@Test
fun `searchAll with empty search terms creates results from gps, title search & recents`() {
val gpsCategoryModel: GpsCategoryModel = mock()
val depictedItem = depictedItem(commonsCategories = listOf("depictionCategory"))
whenever(gpsCategoryModel.categoriesFromLocation)
.thenReturn(BehaviorSubject.createDefault(listOf("gpsCategory")))
@ -55,13 +59,14 @@ class CategoriesModelTest {
.thenReturn(Observable.just(listOf("titleSearch")))
whenever(categoryDao.recentCategories(25)).thenReturn(listOf("recentCategories"))
CategoriesModel(categoryClient, categoryDao, gpsCategoryModel)
.searchAll("", listOf("tes"))
.searchAll("", listOf("tes"), listOf(depictedItem))
.test()
.assertValue(
listOf(
CategoryItem("gpsCategory", false),
CategoryItem("titleSearch", false),
CategoryItem("recentCategories", false)
categoryItem("depictionCategory"),
categoryItem("gpsCategory"),
categoryItem("titleSearch"),
categoryItem("recentCategories")
)
)
}

View file

@ -1,10 +1,9 @@
package fr.free.nrw.commons.explore.depictions
import com.nhaarman.mockitokotlin2.whenever
import depictedItem
import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao
import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.upload.depictedItem
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
import io.reactivex.Single
import io.reactivex.schedulers.TestScheduler
import org.junit.Before
@ -36,7 +35,6 @@ class SearchDepictionsPresenterTest {
fun setUp() {
MockitoAnnotations.initMocks(this)
testScheduler = TestScheduler()
val depictedItem: DepictedItem = depictedItem(instanceOfs = listOf())
searchDepictionsFragmentPresenter = SearchDepictionsFragmentPresenter(
jsonKvStore,
recentSearchesDao,
@ -56,5 +54,4 @@ class SearchDepictionsPresenterTest {
testScheduler.triggerActions()
verify(view)?.onSuccess(expectedList)
}
}

View file

@ -1,8 +1,8 @@
package fr.free.nrw.commons.upload
import categoryItem
import com.nhaarman.mockitokotlin2.*
import fr.free.nrw.commons.R
import fr.free.nrw.commons.category.CategoryItem
import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.categories.CategoriesContract
import fr.free.nrw.commons.upload.categories.CategoriesPresenter
@ -27,11 +27,6 @@ class CategoriesPresenterTest {
private lateinit var testScheduler: TestScheduler
private val categoryItems: ArrayList<CategoryItem> = ArrayList()
@Mock
lateinit var categoryItem: CategoryItem
/**
* initial setup
*/
@ -40,7 +35,6 @@ class CategoriesPresenterTest {
fun setUp() {
MockitoAnnotations.initMocks(this)
testScheduler = TestScheduler()
categoryItems.add(categoryItem)
categoriesPresenter = CategoriesPresenter(repository, testScheduler, testScheduler)
categoriesPresenter.onAttachView(view)
}
@ -62,7 +56,7 @@ class CategoriesPresenterTest {
emptyCaptionUploadItem
)
)
whenever(repository.searchAll("test", listOf("nonEmpty")))
whenever(repository.searchAll("test", listOf("nonEmpty"), repository.selectedDepictions))
.thenReturn(
Observable.just(
listOf(
@ -87,7 +81,7 @@ class CategoriesPresenterTest {
@Test
fun `searchForCategoriesTest sets Error when list is empty`() {
whenever(repository.uploads).thenReturn(listOf())
whenever(repository.searchAll(any(), any())).thenReturn(Observable.just(listOf()))
whenever(repository.searchAll(any(), any(), any())).thenReturn(Observable.just(listOf()))
whenever(repository.selectedCategories).thenReturn(listOf())
categoriesPresenter.searchForCategories("test")
testScheduler.triggerActions()
@ -124,10 +118,8 @@ class CategoriesPresenterTest {
*/
@Test
fun onCategoryItemClickedTest() {
val categoryItem = categoryItem()
categoriesPresenter.onCategoryItemClicked(categoryItem)
verify(repository).onCategoryClicked(categoryItem)
}
private fun categoryItem(name: String = "name", selected: Boolean = false) =
CategoryItem(name, selected)
}

View file

@ -4,11 +4,11 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.jraska.livedata.test
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import depictedItem
import fr.free.nrw.commons.explore.depictions.DepictsClient
import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.depicts.DepictsContract
import fr.free.nrw.commons.upload.depicts.DepictsPresenter
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
import fr.free.nrw.commons.wikidata.WikidataDisambiguationItems
import io.reactivex.Flowable
import io.reactivex.schedulers.TestScheduler
@ -62,8 +62,8 @@ class DepictsPresenterTest {
depictedItem(id="nonUnique"),
depictedItem(id="nonUnique"),
depictedItem(
id = "unique",
instanceOfs = listOf(WikidataDisambiguationItems.CATEGORY.id)
instanceOfs = listOf(WikidataDisambiguationItems.CATEGORY.id),
id = "unique"
)
)
whenever(repository.searchAllEntities("")).thenReturn(Flowable.just(searchResults))
@ -78,6 +78,7 @@ class DepictsPresenterTest {
.assertValue(listOf(selectedItem, depictedItem(id="nonUnique")))
}
@Test
fun `empty search results with empty term do not show error`() {
whenever(repository.searchAllEntities("")).thenReturn(Flowable.just(emptyList()))
@ -137,15 +138,4 @@ class DepictsPresenterTest {
depictsPresenter.verifyDepictions()
verify(view).noDepictionSelected()
}
}
fun depictedItem(
name: String = "label",
description: String = "desc",
imageUrl: String = "",
instanceOfs: List<String> = listOf(),
isSelected: Boolean = false,
id: String = "entityId"
) = DepictedItem(name, description, imageUrl, instanceOfs, isSelected, id)