Fixed the issue added tests (#4933)

This commit is contained in:
Ayan Sarkar 2022-04-14 17:59:14 +05:30 committed by GitHub
parent 31d63d1a2a
commit 17ac591233
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 80 additions and 17 deletions

View file

@ -51,26 +51,42 @@ class DepictsClient @Inject constructor(private val depictsInterface: DepictsInt
flatMap(::getEntities)
.map { entities ->
entities.entities().values.map { entity ->
if (entity.descriptions().byLanguageOrFirstOrEmpty() == "") {
val entities: Entities = getEntities(entity[WikidataProperties.INSTANCE_OF]
.toIds()[0]).blockingGet()
val nameAsDescription = entities.entities().values.first().labels()
.byLanguageOrFirstOrEmpty()
DepictedItem(
entity,
entity.labels().byLanguageOrFirstOrEmpty(),
nameAsDescription
)
} else {
DepictedItem(
entity,
entity.labels().byLanguageOrFirstOrEmpty(),
entity.descriptions().byLanguageOrFirstOrEmpty()
)
}
mapToDepictItem(entity)
}
}
/**
* Convert different entities into DepictedItem
*/
private fun mapToDepictItem(entity: Entities.Entity): DepictedItem {
return if (entity.descriptions().byLanguageOrFirstOrEmpty() == "") {
val instanceOfIDs = entity[WikidataProperties.INSTANCE_OF]
.toIds()
if (instanceOfIDs.isNotEmpty()) {
val entities: Entities = getEntities(instanceOfIDs[0]).blockingGet()
val nameAsDescription = entities.entities().values.first().labels()
.byLanguageOrFirstOrEmpty()
DepictedItem(
entity,
entity.labels().byLanguageOrFirstOrEmpty(),
nameAsDescription
)
} else {
DepictedItem(
entity,
entity.labels().byLanguageOrFirstOrEmpty(),
""
)
}
} else {
DepictedItem(
entity,
entity.labels().byLanguageOrFirstOrEmpty(),
entity.descriptions().byLanguageOrFirstOrEmpty()
)
}
}
/**
* Tries to get Entities.Label by default language from the map.
* If that returns null, Tries to retrieve first element from the map.

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.explore.depictions
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import depictSearchItem
import entity
import fr.free.nrw.commons.mwapi.Binding
import fr.free.nrw.commons.mwapi.Result
import fr.free.nrw.commons.mwapi.SparqlResponse
@ -15,6 +16,7 @@ import org.junit.Test
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.wikipedia.wikidata.*
import java.lang.reflect.Method
class DepictsClientTest {
@ -108,4 +110,49 @@ class DepictsClientTest {
emptyList(), false, "Q10")
))
}
@Test
fun `Test mapToDepictItem when description is not empty`() {
val method: Method = DepictsClient::class.java.getDeclaredMethod(
"mapToDepictItem",
Entities.Entity::class.java
)
method.isAccessible = true
method.invoke(depictsClient, entity(descriptions = mapOf("en" to "Test")))
}
@Test
fun `Test mapToDepictItem when description is empty and P31 doesn't exists`() {
val method: Method = DepictsClient::class.java.getDeclaredMethod(
"mapToDepictItem",
Entities.Entity::class.java
)
method.isAccessible = true
method.invoke(depictsClient, entity())
}
@Test
fun `Test mapToDepictItem when description is empty and P31 exists`() {
val entities = mock<Entities>()
val entity = mock<Entities.Entity>()
val statementPartial = mock<Statement_partial>()
whenever(entity.statements).thenReturn(mapOf("P31" to listOf(statementPartial)))
whenever(statementPartial.mainSnak).thenReturn(
Snak_partial("test", "P31",
DataValue.EntityId(
WikiBaseEntityValue("wikibase-entityid", "Q10", 10L)
)
)
)
whenever(depictsInterface.getEntities("Q10")).thenReturn(Single.just(entities))
whenever(entities.entities())
.thenReturn(mapOf("test" to entity))
whenever(entity.id()).thenReturn("Q10")
val method: Method = DepictsClient::class.java.getDeclaredMethod(
"mapToDepictItem",
Entities.Entity::class.java
)
method.isAccessible = true
method.invoke(depictsClient, entity)
}
}