Skip to content

#3490 Depiction Search in upload shows No Results before it gets results #3491

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 19, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,20 @@

import fr.free.nrw.commons.explore.depictions.DepictsClient;
import fr.free.nrw.commons.repository.UploadRepository;
import fr.free.nrw.commons.upload.UploadModel;
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
import io.reactivex.Observable;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;

import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;

/**
Expand Down Expand Up @@ -88,7 +85,6 @@ public void searchForDepictions(String query) {
.subscribeOn(ioScheduler)
.observeOn(mainThreadScheduler)
.doOnSubscribe(disposable -> {
view.showError(true);
view.showProgress(true);
view.setDepictsList(null);
})
Expand All @@ -102,7 +98,11 @@ public void searchForDepictions(String query) {
.observeOn(mainThreadScheduler)
.subscribe(
depictedItemList::add,
Timber::e,
t -> {
view.showProgress(false);
view.showError(true);
Timber.e(t);
},
() -> {
view.showProgress(false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import fr.free.nrw.commons.wikidata.model.DepictSearchItem
* Model class for Depicted Item in Upload and Explore
*/
data class DepictedItem constructor(
val depictsLabel: String,
val description: String,
val depictsLabel: String?,
val description: String?,
var imageUrl: String,
var isSelected: Boolean,
val entityId: String
Expand All @@ -28,4 +28,8 @@ data class DepictedItem constructor(
else -> false
}

override fun hashCode(): Int {
return depictsLabel?.hashCode() ?: 0
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package fr.free.nrw.commons.wikidata.model

/**
* Model class for Depiction item returned from API after calling searchForDepicts
*/
class DepictSearchItem(
val id: String,
val pageid: String,
val url: String,
val label: String?,
val description: String?
)
113 changes: 57 additions & 56 deletions app/src/test/kotlin/fr/free/nrw/commons/upload/DepictsPresenterTest.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package fr.free.nrw.commons.upload

//import com.nhaarman.mockito_kotlin.verify
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.category.CategoryItem
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.DepictsFragment
Expand All @@ -20,26 +18,22 @@ import org.mockito.MockitoAnnotations

class DepictsPresenterTest {
@Mock
internal var repository: UploadRepository? = null
@Mock
internal var view: DepictsContract.View? = null
internal lateinit var repository: UploadRepository

var depictsPresenter: DepictsPresenter? = null
@Mock
internal lateinit var view: DepictsContract.View

var depictsFragment: DepictsFragment? = null
private lateinit var depictsPresenter: DepictsPresenter

var testScheduler: TestScheduler? = null
private lateinit var depictsFragment: DepictsFragment

var depictsClient : DepictsClient? = null
private lateinit var testScheduler: TestScheduler

val depictedItems: ArrayList<DepictedItem> = ArrayList()
private val depictedItems: ArrayList<DepictedItem> = ArrayList()

@Mock
lateinit var depictedItem: DepictedItem

var testObservable: Observable<DepictedItem>? = null

private val imageTitleList = ArrayList<UploadMediaDetail>()

/**
* initial setup
Expand All @@ -51,70 +45,77 @@ class DepictsPresenterTest {
testScheduler = TestScheduler()
depictedItem = DepictedItem("label", "desc", "", false, "entityId")
depictedItems.add(depictedItem)
testObservable = Observable.just(depictedItem)
depictsPresenter = DepictsPresenter(repository, testScheduler, testScheduler, depictsClient)
depictsPresenter = DepictsPresenter(repository, testScheduler, testScheduler, null)
depictsFragment = DepictsFragment()
depictsPresenter?.onAttachView(view)
depictsPresenter.onAttachView(view)
}

@Test
fun searchEnglishDepictionsTest() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("test")
verify(view)?.showProgress(true)
verify(view)?.showError(true)
verify(view)?.setDepictsList(null)
testScheduler?.triggerActions()
verify(view)?.showProgress(false)
whenever(repository.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository.selectedDepictions).thenReturn(depictedItems)
whenever(repository.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter.searchForDepictions("test")
verify(view).showProgress(true)
verify(view).setDepictsList(null)
testScheduler.triggerActions()
verify(view).showProgress(false)
}

@Test
fun searchOtherLanguageDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("वी")
verify(view)?.showProgress(true)
verify(view)?.showError(true)
verify(view)?.setDepictsList(null)
testScheduler?.triggerActions()
verify(view)?.showProgress(false)
whenever(repository.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository.selectedDepictions).thenReturn(depictedItems)
whenever(repository.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter.searchForDepictions("वी")
verify(view).showProgress(true)
verify(view).setDepictsList(null)
testScheduler.triggerActions()
verify(view).showProgress(false)
}

@Test
fun searchForNonExistingDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("******")
verify(view)?.showProgress(true)
verify(view)?.setDepictsList(null)
testScheduler?.triggerActions()
verify(view)?.setDepictsList(null)
verify(view)?.showProgress(false)
whenever(repository.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository.selectedDepictions).thenReturn(depictedItems)
whenever(repository.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter.searchForDepictions("******")
verify(view).showProgress(true)
verify(view).setDepictsList(null)
testScheduler.triggerActions()
verify(view).setDepictsList(null)
verify(view).showProgress(false)
}

@Test
fun setSingleDepiction() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.onDepictItemClicked(depictedItem)
depictsPresenter?.verifyDepictions()
verify(view)?.goToNextScreen()
whenever(repository.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository.selectedDepictions).thenReturn(depictedItems)
whenever(repository.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter.onDepictItemClicked(depictedItem)
depictsPresenter.verifyDepictions()
verify(view).goToNextScreen()
}

@Test
fun setMultipleDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.onDepictItemClicked(depictedItem)
whenever(repository.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator<CategoryItem> { _, _ -> 1 })
whenever(repository.selectedDepictions).thenReturn(depictedItems)
whenever(repository.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter.onDepictItemClicked(depictedItem)
val depictedItem2 = DepictedItem("label2", "desc2", "", false, "entityid2")
depictsPresenter?.onDepictItemClicked(depictedItem2)
depictsPresenter?.verifyDepictions()
verify(view)?.goToNextScreen()
depictsPresenter.onDepictItemClicked(depictedItem2)
depictsPresenter.verifyDepictions()
verify(view).goToNextScreen()
}

@Test
fun `on Search Exception Show Error And Stop Progress`() {
whenever(repository.searchAllEntities(ArgumentMatchers.anyString()))
.thenReturn(Observable.error(Exception()))
depictsPresenter.searchForDepictions("******")
testScheduler.triggerActions()
verify(view).showError(true)
verify(view).showProgress(false)
}
}