mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Convert upload to kotlin (part 3) (#6104)
* Convert UploadCategoriesFragment to kotlin * Convert UploadBaseFragment to kotlin * Convert UploadItem to kotlin * Convert UploadModel to kotlin * Convert UploadMediaDetailAdapter to kotlin * Convert UploadActivity to kotlin * Convert UploadMediaPresenter to kotlin * Convert UploadMediaDetailFragment to kotlin * Fix NPE that broke uploads
This commit is contained in:
parent
6d64357d45
commit
0e735512bb
37 changed files with 3236 additions and 3564 deletions
|
|
@ -13,8 +13,8 @@ import com.nhaarman.mockitokotlin2.verify
|
|||
import fr.free.nrw.commons.CameraPosition
|
||||
import fr.free.nrw.commons.TestCommonsApplication
|
||||
import fr.free.nrw.commons.kvstore.JsonKvStore
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_LOCATION
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_ZOOM
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_LOCATION
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
|
||||
import io.reactivex.android.plugins.RxAndroidPlugins
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import org.junit.Assert
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ class SettingsFragmentUnitTests {
|
|||
RecentLanguagesAdapter(
|
||||
context,
|
||||
listOf(Language("English", "en")),
|
||||
hashMapOf<String, String>(),
|
||||
mutableMapOf(),
|
||||
),
|
||||
)
|
||||
val method: Method =
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class LanguagesAdapterTest {
|
|||
private lateinit var context: Context
|
||||
|
||||
@Mock
|
||||
private lateinit var selectedLanguages: HashMap<Integer, String>
|
||||
private lateinit var selectedLanguages: MutableMap<Int, String>
|
||||
|
||||
@Mock
|
||||
private lateinit var parent: ViewGroup
|
||||
|
|
@ -41,7 +41,7 @@ class LanguagesAdapterTest {
|
|||
|
||||
private lateinit var languagesAdapter: LanguagesAdapter
|
||||
private lateinit var convertView: View
|
||||
private var selectLanguages: HashMap<Integer, String> = HashMap()
|
||||
private var selectLanguages: MutableMap<Int, String> = mutableMapOf()
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
|
|
@ -94,8 +94,8 @@ class LanguagesAdapterTest {
|
|||
|
||||
@Test
|
||||
fun testSelectLanguageNotEmpty() {
|
||||
selectLanguages[Integer(0)] = "es"
|
||||
selectLanguages[Integer(1)] = "de"
|
||||
selectLanguages[0] = "es"
|
||||
selectLanguages[1] = "de"
|
||||
languagesAdapter = LanguagesAdapter(context, selectLanguages)
|
||||
|
||||
Assertions.assertEquals(false, languagesAdapter.isEnabled(languagesAdapter.getIndexOfLanguageCode("es")))
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ class UploadMediaDetailAdapterUnitTest {
|
|||
RecentLanguagesAdapter(
|
||||
context,
|
||||
listOf(Language("English", "en")),
|
||||
hashMapOf<String, String>(),
|
||||
mutableMapOf(),
|
||||
),
|
||||
)
|
||||
val method: Method =
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import android.net.Uri
|
||||
import com.nhaarman.mockitokotlin2.argumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.isA
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import fr.free.nrw.commons.R
|
||||
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
|
||||
|
|
@ -24,6 +26,7 @@ import org.junit.Test
|
|||
import org.junit.runner.RunWith
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.ArgumentMatchers
|
||||
import org.mockito.ArgumentMatchers.anyInt
|
||||
import org.mockito.Mock
|
||||
import org.mockito.MockedStatic
|
||||
import org.mockito.Mockito
|
||||
|
|
@ -55,7 +58,7 @@ class UploadMediaPresenterTest {
|
|||
private lateinit var place: Place
|
||||
|
||||
@Mock
|
||||
private var location: LatLng? = null
|
||||
private lateinit var location: LatLng
|
||||
|
||||
@Mock
|
||||
private lateinit var uploadItem: UploadItem
|
||||
|
|
@ -63,18 +66,12 @@ class UploadMediaPresenterTest {
|
|||
@Mock
|
||||
private lateinit var imageCoordinates: ImageCoordinates
|
||||
|
||||
@Mock
|
||||
private lateinit var uploadMediaDetails: List<UploadMediaDetail>
|
||||
|
||||
private lateinit var testObservableUploadItem: Observable<UploadItem>
|
||||
private lateinit var testSingleImageResult: Single<Int>
|
||||
|
||||
private lateinit var testScheduler: TestScheduler
|
||||
private lateinit var mockedCountry: MockedStatic<Coordinates2Country>
|
||||
|
||||
@Mock
|
||||
private lateinit var jsonKvStore: JsonKvStore
|
||||
|
||||
@Mock
|
||||
lateinit var mockActivity: UploadActivity
|
||||
|
||||
|
|
@ -91,7 +88,6 @@ class UploadMediaPresenterTest {
|
|||
uploadMediaPresenter =
|
||||
UploadMediaPresenter(
|
||||
repository,
|
||||
jsonKvStore,
|
||||
testScheduler,
|
||||
testScheduler,
|
||||
)
|
||||
|
|
@ -120,10 +116,7 @@ class UploadMediaPresenterTest {
|
|||
uploadMediaPresenter.receiveImage(uploadableFile, place, location)
|
||||
verify(view).showProgress(true)
|
||||
testScheduler.triggerActions()
|
||||
verify(view).onImageProcessed(
|
||||
ArgumentMatchers.any(UploadItem::class.java),
|
||||
ArgumentMatchers.any(Place::class.java),
|
||||
)
|
||||
verify(view).onImageProcessed(isA())
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -167,7 +160,7 @@ class UploadMediaPresenterTest {
|
|||
@Test
|
||||
fun emptyFileNameTest() {
|
||||
uploadMediaPresenter.handleCaptionResult(EMPTY_CAPTION, uploadItem)
|
||||
verify(view).showMessage(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt())
|
||||
verify(view).showMessage(R.string.add_caption_toast, R.color.color_error)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -226,12 +219,11 @@ class UploadMediaPresenterTest {
|
|||
@Test
|
||||
fun fetchImageAndTitleTest() {
|
||||
whenever(repository.getUploads()).thenReturn(listOf(uploadItem))
|
||||
whenever(repository.getUploadItem(ArgumentMatchers.anyInt()))
|
||||
.thenReturn(uploadItem)
|
||||
whenever(repository.getUploadItem(ArgumentMatchers.anyInt())).thenReturn(uploadItem)
|
||||
whenever(uploadItem.uploadMediaDetails).thenReturn(mutableListOf())
|
||||
|
||||
uploadMediaPresenter.fetchTitleAndDescription(0)
|
||||
verify(view).updateMediaDetails(ArgumentMatchers.any())
|
||||
verify(view).updateMediaDetails(isA())
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -273,12 +265,9 @@ class UploadMediaPresenterTest {
|
|||
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),
|
||||
)
|
||||
val captor = argumentCaptor<UploadItem>()
|
||||
verify(view).onImageProcessed(captor.capture())
|
||||
|
||||
assertEquals("Exptected contry code", "de", captor.value.countryCode)
|
||||
assertEquals("Exptected contry code", "de", captor.firstValue.countryCode)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,6 +140,6 @@ class UploadModelUnitTest {
|
|||
@Ignore
|
||||
@Test
|
||||
fun testSetSelectedExistingDepictions() {
|
||||
uploadModel.selectedExistingDepictions = listOf("")
|
||||
uploadModel.selectedExistingDepictions = mutableListOf("")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import com.nhaarman.mockitokotlin2.any
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import fr.free.nrw.commons.Media
|
||||
import fr.free.nrw.commons.category.CategoriesModel
|
||||
import fr.free.nrw.commons.category.CategoryItem
|
||||
|
|
@ -17,6 +19,7 @@ import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
|
|||
import io.reactivex.Completable
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.Single
|
||||
import org.junit.Assert.assertSame
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
|
|
@ -118,7 +121,9 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testGetUploads() {
|
||||
assertEquals(repository.getUploads(), uploadModel.uploads)
|
||||
val result = listOf(uploadItem)
|
||||
whenever(uploadModel.uploads).thenReturn(result)
|
||||
assertSame(result, repository.getUploads())
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -136,10 +141,10 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testSearchAll() {
|
||||
assertEquals(
|
||||
repository.searchAll("", listOf(), listOf()),
|
||||
categoriesModel.searchAll("", listOf(), listOf()),
|
||||
)
|
||||
val empty = Observable.empty<List<CategoryItem>>()
|
||||
whenever(categoriesModel.searchAll(any(), any(), any())).thenReturn(empty)
|
||||
assertSame(empty, repository.searchAll("", listOf(), listOf()))
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -164,7 +169,9 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testGetLicenses() {
|
||||
assertEquals(repository.getLicenses(), uploadModel.licenses)
|
||||
whenever(uploadModel.licenses).thenReturn(listOf())
|
||||
repository.getLicenses()
|
||||
verify(uploadModel).licenses
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -208,10 +215,10 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testGetUploadItemCaseNonNull() {
|
||||
`when`(uploadModel.items).thenReturn(listOf(uploadItem))
|
||||
`when`(uploadModel.items).thenReturn(mutableListOf(uploadItem))
|
||||
assertEquals(
|
||||
repository.getUploadItem(0),
|
||||
uploadModel.items[0],
|
||||
uploadItem,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -220,19 +227,6 @@ class UploadRepositoryUnitTest {
|
|||
assertEquals(repository.getUploadItem(-1), null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSetSelectedLicense() {
|
||||
assertEquals(repository.setSelectedLicense(""), uploadModel.setSelectedLicense(""))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSetSelectedExistingDepictions() {
|
||||
assertEquals(
|
||||
repository.setSelectedExistingDepictions(listOf("")),
|
||||
uploadModel.setSelectedExistingDepictions(listOf("")),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnDepictItemClicked() {
|
||||
assertEquals(
|
||||
|
|
@ -243,12 +237,14 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testGetSelectedDepictions() {
|
||||
assertEquals(repository.getSelectedDepictions(), uploadModel.selectedDepictions)
|
||||
repository.getSelectedDepictions()
|
||||
verify(uploadModel).selectedDepictions
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testGetSelectedExistingDepictions() {
|
||||
assertEquals(repository.getSelectedExistingDepictions(), uploadModel.selectedExistingDepictions)
|
||||
repository.getSelectedExistingDepictions()
|
||||
verify(uploadModel).selectedExistingDepictions
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -324,8 +320,8 @@ class UploadRepositoryUnitTest {
|
|||
|
||||
@Test
|
||||
fun testIsWMLSupportedForThisPlace() {
|
||||
`when`(uploadModel.items).thenReturn(listOf(uploadItem))
|
||||
`when`(uploadItem.isWLMUpload).thenReturn(true)
|
||||
whenever(uploadModel.items).thenReturn(mutableListOf(uploadItem))
|
||||
whenever(uploadItem.isWLMUpload).thenReturn(true)
|
||||
assertEquals(
|
||||
repository.isWMLSupportedForThisPlace(),
|
||||
true,
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import fr.free.nrw.commons.upload.ImageCoordinates
|
|||
import fr.free.nrw.commons.upload.UploadActivity
|
||||
import fr.free.nrw.commons.upload.UploadItem
|
||||
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_ZOOM
|
||||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
|
||||
import org.junit.Assert
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
|
@ -100,7 +100,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
private lateinit var place: Place
|
||||
|
||||
@Mock
|
||||
private var location: fr.free.nrw.commons.location.LatLng? = null
|
||||
private lateinit var location: LatLng
|
||||
|
||||
@Mock
|
||||
private lateinit var defaultKvStore: JsonKvStore
|
||||
|
|
@ -153,12 +153,6 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
Assert.assertNotNull(fragment)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testSetCallback() {
|
||||
fragment.setCallback(null)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnCreate() {
|
||||
|
|
@ -194,7 +188,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
Whitebox.setInternalState(fragment, "presenter", presenter)
|
||||
val method: Method =
|
||||
UploadMediaDetailFragment::class.java.getDeclaredMethod(
|
||||
"init",
|
||||
"initializeFragment",
|
||||
)
|
||||
method.isAccessible = true
|
||||
method.invoke(fragment)
|
||||
|
|
@ -209,7 +203,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
`when`(callback.totalNumberOfSteps).thenReturn(5)
|
||||
val method: Method =
|
||||
UploadMediaDetailFragment::class.java.getDeclaredMethod(
|
||||
"init",
|
||||
"initializeFragment",
|
||||
)
|
||||
method.isAccessible = true
|
||||
method.invoke(fragment)
|
||||
|
|
@ -229,22 +223,6 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
method.invoke(fragment, R.string.media_detail_step_title, R.string.media_details_tooltip)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnNextButtonClicked() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
Whitebox.setInternalState(fragment, "presenter", presenter)
|
||||
fragment.onNextButtonClicked()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnPreviousButtonClicked() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
Whitebox.setInternalState(fragment, "presenter", presenter)
|
||||
fragment.onPreviousButtonClicked()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testShowSimilarImageFragment() {
|
||||
|
|
@ -258,7 +236,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
fun testOnImageProcessed() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
`when`(uploadItem.mediaUri).thenReturn(mediaUri)
|
||||
fragment.onImageProcessed(uploadItem, place)
|
||||
fragment.onImageProcessed(uploadItem)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -366,7 +344,10 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
`when`(uploadItem.gpsCoords).thenReturn(imageCoordinates)
|
||||
val activityResult = ActivityResult(Activity.RESULT_OK, intent)
|
||||
|
||||
val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod("onCameraPosition", ActivityResult::class.java)
|
||||
val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod(
|
||||
"onCameraPosition",
|
||||
ActivityResult::class.java
|
||||
)
|
||||
handleResultMethod.isAccessible = true
|
||||
|
||||
handleResultMethod.invoke(fragment, activityResult)
|
||||
|
|
@ -382,7 +363,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
val cameraPosition = Mockito.mock(CameraPosition::class.java)
|
||||
val latLng = Mockito.mock(LatLng::class.java)
|
||||
|
||||
Whitebox.setInternalState(fragment, "callback", callback)
|
||||
Whitebox.setInternalState(fragment, "fragmentCallback", callback)
|
||||
Whitebox.setInternalState(cameraPosition, "latitude", latLng.latitude)
|
||||
Whitebox.setInternalState(cameraPosition, "longitude", latLng.longitude)
|
||||
Whitebox.setInternalState(fragment, "editableUploadItem", uploadItem)
|
||||
|
|
@ -394,9 +375,12 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
`when`(latLng.longitude).thenReturn(0.0)
|
||||
`when`(uploadItem.gpsCoords).thenReturn(imageCoordinates)
|
||||
|
||||
val activityResult = ActivityResult(Activity.RESULT_OK,intent)
|
||||
val activityResult = ActivityResult(Activity.RESULT_OK, intent)
|
||||
|
||||
val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod("onCameraPosition", ActivityResult::class.java)
|
||||
val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod(
|
||||
"onCameraPosition",
|
||||
ActivityResult::class.java
|
||||
)
|
||||
handleResultMethod.isAccessible = true
|
||||
|
||||
handleResultMethod.invoke(fragment, activityResult)
|
||||
|
|
@ -407,7 +391,7 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
@Throws(Exception::class)
|
||||
fun testUpdateMediaDetails() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
fragment.updateMediaDetails(null)
|
||||
fragment.updateMediaDetails(mock())
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -417,21 +401,6 @@ class UploadMediaDetailFragmentUnitTest {
|
|||
fragment.onDestroyView()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnLlContainerTitleClicked() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
fragment.onLlContainerTitleClicked()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnIbMapClicked() {
|
||||
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||
Whitebox.setInternalState(fragment, "presenter", presenter)
|
||||
fragment.onIbMapClicked()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testOnPrimaryCaptionTextChange() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue