Rewrote reverseGeoCode() method to use Coordinates2Country library (#5093)

* rewrote reverseGeoCode() method to use Coordinates2Country library; wrote simple TC for receiveImage() method to check if country coordinates are set

* removed unused slf4j import in UploadMediaPresenter class

* updated mock in for setCorrectCountryCodeForReceivedImage() TC to match against exact location arguments

* added javadoc for getCountryNamesAndCodes() method in UploadMediaPresenter; implemented "lazy loading" for countryNamesAndCodes field

* removed unused field added by me from UploadMediaPresenterTest
This commit is contained in:
Daniel Kolibár 2022-10-29 12:37:11 +02:00 committed by GitHub
parent cc24caa83c
commit aa97629cbf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 80 additions and 25 deletions

View file

@ -1,31 +1,37 @@
package fr.free.nrw.commons.upload
import android.net.Uri
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.filepicker.UploadableFile
import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.location.LatLng
import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailsContract
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaPresenter
import fr.free.nrw.commons.utils.ImageUtils.*
import io.github.coordinates2country.Coordinates2Country
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.schedulers.TestScheduler
import junit.framework.TestCase.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers
import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
import org.mockito.Mockito
import org.junit.runner.RunWith
import org.mockito.*
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.powermock.api.mockito.PowerMockito
import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.modules.junit4.PowerMockRunner
import java.util.*
/**
* The class contains unit test cases for UploadMediaPresenter
*/
@RunWith(PowerMockRunner::class)
@PrepareForTest(Coordinates2Country::class)
class UploadMediaPresenterTest {
@Mock
internal lateinit var repository: UploadRepository
@ -151,7 +157,7 @@ class UploadMediaPresenterTest {
//Bad Picture test
//Empty Caption test
uploadMediaPresenter.handleImageResult(-7, uploadItem)
verify(view)?.showBadImagePopup(ArgumentMatchers.anyInt(), eq(uploadItem))
verify(view)?.showBadImagePopup(ArgumentMatchers.anyInt(), ArgumentMatchers.eq(uploadItem))
}
@ -239,4 +245,43 @@ class UploadMediaPresenterTest {
verify(view).showSimilarImageFragment("original", "possible", similar)
}
@Test
fun setCorrectCountryCodeForReceivedImage() {
val germanyAsPlace = Place(null,null, null, null, LatLng(50.1, 10.2, 1.0f), null, null, null, true)
germanyAsPlace.isMonument = true
PowerMockito.mockStatic(Coordinates2Country::class.java)
whenever(
Coordinates2Country.country(
ArgumentMatchers.eq(germanyAsPlace.getLocation().latitude),
ArgumentMatchers.eq(germanyAsPlace.getLocation().longitude)
)
).thenReturn("Germany")
val item: Observable<UploadItem> = Observable.just(UploadItem(Uri.EMPTY, null, null, germanyAsPlace, 0, null, null, null))
whenever(
repository.preProcessImage(
ArgumentMatchers.any(UploadableFile::class.java),
ArgumentMatchers.any(Place::class.java),
ArgumentMatchers.any(UploadMediaPresenter::class.java)
)
).thenReturn(item)
uploadMediaPresenter.receiveImage(uploadableFile, germanyAsPlace)
verify(view).showProgress(true)
testScheduler.triggerActions()
val captor: ArgumentCaptor<UploadItem> = ArgumentCaptor.forClass(UploadItem::class.java)
verify(view).onImageProcessed(
captor.capture(),
ArgumentMatchers.any(Place::class.java)
)
assertEquals("Exptected contry code", "de", captor.value.countryCode);
verify(view).showProgress(false)
}
}