mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
#3077 Hide disambiguation items from depiction search - when fetching depictions get the entity instead of the search result (#3741)
This commit is contained in:
parent
34f02499e4
commit
057d11a0e0
31 changed files with 359 additions and 582 deletions
|
|
@ -52,15 +52,6 @@ class SubDepictionListPresenterTest {
|
|||
subDepictionListPresenter?.onAttachView(view)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fetchThumbnailForEntityId() {
|
||||
val singleString: Single<String> = Single.just(String())
|
||||
Mockito.`when`(depictsClient?.getP18ForItem(ArgumentMatchers.anyString())).thenReturn(singleString)
|
||||
subDepictionListPresenter?.fetchThumbnailForEntityId("Q9394", 0)
|
||||
testScheduler?.triggerActions()
|
||||
view?.onImageUrlFetched("url", 0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun initSubDepictionListForParentClass() {
|
||||
Mockito.`when`(okHttpJsonApiClient?.getParentQIDs(ArgumentMatchers.anyString())).thenReturn(testObservable)
|
||||
|
|
|
|||
|
|
@ -1,68 +1,60 @@
|
|||
package fr.free.nrw.commons.explore.depictions
|
||||
|
||||
import org.mockito.Mockito.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
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.Observable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.schedulers.TestScheduler
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentMatchers
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
class SearchDepictionsPresenterTest {
|
||||
|
||||
@Mock
|
||||
internal var view: SearchDepictionsFragmentContract.View? = null
|
||||
internal lateinit var view: SearchDepictionsFragmentContract.View
|
||||
|
||||
var searchDepictionsFragmentPresenter: SearchDepictionsFragmentPresenter? = null
|
||||
private lateinit var searchDepictionsFragmentPresenter: SearchDepictionsFragmentPresenter
|
||||
|
||||
var testScheduler: TestScheduler? = null
|
||||
|
||||
var jsonKvStore: JsonKvStore? = null
|
||||
|
||||
//var mediaWikiApi: MediaWikiApi? = null
|
||||
private lateinit var testScheduler: TestScheduler
|
||||
|
||||
@Mock
|
||||
var recentSearchesDao: RecentSearchesDao? = null
|
||||
private lateinit var jsonKvStore: JsonKvStore
|
||||
|
||||
@Mock
|
||||
var depictsClient: DepictsClient? = null
|
||||
lateinit var recentSearchesDao: RecentSearchesDao
|
||||
|
||||
var testObservable: Observable<DepictedItem>? = null
|
||||
|
||||
var mediaList: ArrayList<DepictedItem> = ArrayList()
|
||||
@Mock
|
||||
lateinit var depictsClient: DepictsClient
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
testScheduler = TestScheduler()
|
||||
val depictedItem: DepictedItem = DepictedItem("label", "description", "url", false, "Q9394")
|
||||
mediaList.add(depictedItem)
|
||||
testObservable = Observable.just(depictedItem)
|
||||
searchDepictionsFragmentPresenter = SearchDepictionsFragmentPresenter(jsonKvStore, recentSearchesDao, depictsClient, testScheduler, testScheduler)
|
||||
searchDepictionsFragmentPresenter?.onAttachView(view)
|
||||
val depictedItem: DepictedItem = depictedItem(instanceOfs = listOf())
|
||||
searchDepictionsFragmentPresenter = SearchDepictionsFragmentPresenter(
|
||||
jsonKvStore,
|
||||
recentSearchesDao,
|
||||
depictsClient,
|
||||
testScheduler,
|
||||
testScheduler
|
||||
)
|
||||
searchDepictionsFragmentPresenter.onAttachView(view)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateDepictionList() {
|
||||
Mockito.`when`(depictsClient?.searchForDepictions(ArgumentMatchers.anyString(), ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt())).thenReturn(testObservable)
|
||||
searchDepictionsFragmentPresenter?.updateDepictionList("rabbit", 25, false)
|
||||
testScheduler?.triggerActions()
|
||||
verify(view)?.onSuccess(mediaList)
|
||||
val expectedList = listOf(depictedItem())
|
||||
whenever(depictsClient.searchForDepictions("rabbit", 25, 0))
|
||||
.thenReturn(Single.just(expectedList))
|
||||
searchDepictionsFragmentPresenter.updateDepictionList("rabbit", 25, false)
|
||||
testScheduler.triggerActions()
|
||||
verify(view)?.onSuccess(expectedList)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fetchThumbnailForEntityId() {
|
||||
val singleString: Single<String> = Single.just(String())
|
||||
Mockito.`when`(depictsClient?.getP18ForItem(ArgumentMatchers.anyString())).thenReturn(singleString)
|
||||
searchDepictionsFragmentPresenter?.fetchThumbnailForEntityId("Q9394", 0)
|
||||
testScheduler?.triggerActions()
|
||||
verify(view)?.onImageUrlFetched("", 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,15 @@ package fr.free.nrw.commons.upload
|
|||
|
||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||
import com.jraska.livedata.test
|
||||
import com.nhaarman.mockitokotlin2.never
|
||||
import com.nhaarman.mockitokotlin2.times
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import fr.free.nrw.commons.explore.depictions.DepictsClient
|
||||
import fr.free.nrw.commons.explore.depictions.DepictsClient.NO_DEPICTED_IMAGE
|
||||
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.Single
|
||||
import io.reactivex.schedulers.TestScheduler
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
|
|
@ -48,7 +45,7 @@ class DepictsPresenterTest {
|
|||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
testScheduler = TestScheduler()
|
||||
depictsPresenter = DepictsPresenter(repository, testScheduler, testScheduler, depictsClient)
|
||||
depictsPresenter = DepictsPresenter(repository, testScheduler, testScheduler)
|
||||
depictsPresenter.onAttachView(view)
|
||||
}
|
||||
|
||||
|
|
@ -60,8 +57,15 @@ class DepictsPresenterTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `search results emission returns distinct results + selected items`() {
|
||||
val searchResults = listOf(depictedItem(), depictedItem())
|
||||
fun `search results emission returns distinct results + selected items without disambiguations`() {
|
||||
val searchResults = listOf(
|
||||
depictedItem(id="nonUnique"),
|
||||
depictedItem(id="nonUnique"),
|
||||
depictedItem(
|
||||
id = "unique",
|
||||
instanceOfs = listOf(WikidataDisambiguationItems.CATEGORY.id)
|
||||
)
|
||||
)
|
||||
whenever(repository.searchAllEntities("")).thenReturn(Flowable.just(searchResults))
|
||||
val selectedItem = depictedItem(id = "selected")
|
||||
whenever(repository.selectedDepictions).thenReturn(listOf(selectedItem))
|
||||
|
|
@ -71,22 +75,7 @@ class DepictsPresenterTest {
|
|||
verify(view).showError(false)
|
||||
depictsPresenter.depictedItems
|
||||
.test()
|
||||
.assertValue(listOf(selectedItem, depictedItem()))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `searchResults retrieve imageUrls from cache`() {
|
||||
val depictedItem = depictedItem()
|
||||
whenever(depictsClient.getP18ForItem(depictedItem.id)).thenReturn(Single.just("url"))
|
||||
depictsPresenter.fetchThumbnailForEntityId(depictedItem)
|
||||
testScheduler.triggerActions()
|
||||
val searchResults = listOf(depictedItem(), depictedItem())
|
||||
whenever(repository.searchAllEntities("")).thenReturn(Flowable.just(searchResults))
|
||||
depictsPresenter.searchForDepictions("")
|
||||
testScheduler.triggerActions()
|
||||
depictsPresenter.depictedItems
|
||||
.test()
|
||||
.assertValue(listOf(depictedItem(imageUrl = "url")))
|
||||
.assertValue(listOf(selectedItem, depictedItem(id="nonUnique")))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -149,42 +138,14 @@ class DepictsPresenterTest {
|
|||
verify(view).noDepictionSelected()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `image urls fetched from network update the view`() {
|
||||
val depictedItem = depictedItem()
|
||||
whenever(depictsClient.getP18ForItem(depictedItem.id)).thenReturn(Single.just("url"))
|
||||
depictsPresenter.fetchThumbnailForEntityId(depictedItem)
|
||||
testScheduler.triggerActions()
|
||||
verify(view).onUrlFetched(depictedItem, "url")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `image urls fetched from network filter NO_DEPICTED_IMAGE`() {
|
||||
val depictedItem = depictedItem()
|
||||
whenever(depictsClient.getP18ForItem(depictedItem.id))
|
||||
.thenReturn(Single.just(NO_DEPICTED_IMAGE))
|
||||
depictsPresenter.fetchThumbnailForEntityId(depictedItem)
|
||||
testScheduler.triggerActions()
|
||||
verify(view, never()).onUrlFetched(depictedItem, NO_DEPICTED_IMAGE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `successive image urls fetched from cache`() {
|
||||
val depictedItem = depictedItem()
|
||||
whenever(depictsClient.getP18ForItem(depictedItem.id)).thenReturn(Single.just("url"))
|
||||
depictsPresenter.fetchThumbnailForEntityId(depictedItem)
|
||||
testScheduler.triggerActions()
|
||||
verify(view).onUrlFetched(depictedItem, "url")
|
||||
depictsPresenter.fetchThumbnailForEntityId(depictedItem)
|
||||
testScheduler.triggerActions()
|
||||
verify(view, times(2)).onUrlFetched(depictedItem, "url")
|
||||
}
|
||||
}
|
||||
|
||||
fun depictedItem(
|
||||
name: String = "label",
|
||||
description: String = "desc",
|
||||
imageUrl: String = "",
|
||||
instanceOfs: List<String> = listOf(),
|
||||
isSelected: Boolean = false,
|
||||
id: String = "entityId"
|
||||
) = DepictedItem(name, description, imageUrl, isSelected, id)
|
||||
) = DepictedItem(name, description, imageUrl, instanceOfs, isSelected, id)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue