mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Upload tests (#2086)
* Add unit tests for upload flows * Tests for upload model * Test fixes * Remove empty test cases * Changes based on comments
This commit is contained in:
parent
1070137741
commit
f3a90c004c
19 changed files with 533 additions and 252 deletions
|
|
@ -24,7 +24,8 @@ class TestCommonsApplication : CommonsApplication() {
|
|||
override fun onCreate() {
|
||||
if (mockApplicationComponent == null) {
|
||||
mockApplicationComponent = DaggerCommonsApplicationComponent.builder()
|
||||
.appModule(MockCommonsApplicationModule(this)).build()
|
||||
.appModule(MockCommonsApplicationModule(this))
|
||||
.build()
|
||||
}
|
||||
super.onCreate()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package fr.free.nrw.commons.mwapi
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.preference.PreferenceManager
|
||||
import com.google.gson.Gson
|
||||
|
|
@ -15,9 +16,12 @@ import org.junit.Assert.*
|
|||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.Mockito.mock
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.RuntimeEnvironment
|
||||
import org.robolectric.annotation.Config
|
||||
import timber.log.Timber
|
||||
import java.io.InputStream
|
||||
import java.net.URLDecoder
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import android.content.ContentResolver
|
||||
import android.content.SharedPreferences
|
||||
import fr.free.nrw.commons.caching.CacheController
|
||||
import fr.free.nrw.commons.mwapi.CategoryApi
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.InjectMocks
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.anyString
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.MockitoAnnotations
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
class FileProcessorTest {
|
||||
|
||||
@Mock
|
||||
internal var cacheController: CacheController? = null
|
||||
@Mock
|
||||
internal var gpsCategoryModel: GpsCategoryModel? = null
|
||||
@Mock
|
||||
internal var apiCall: CategoryApi? = null
|
||||
@Mock
|
||||
@field:[Inject Named("default_preferences")]
|
||||
internal var prefs: SharedPreferences? = null
|
||||
|
||||
@InjectMocks
|
||||
var fileProcessor: FileProcessor? = null
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun processFileCoordinates() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import fr.free.nrw.commons.HandlerService
|
||||
import fr.free.nrw.commons.auth.SessionManager
|
||||
import fr.free.nrw.commons.contributions.Contribution
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.InjectMocks
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
class UploadControllerTest {
|
||||
|
||||
@Mock
|
||||
internal var sessionManager: SessionManager? = null
|
||||
@Mock
|
||||
internal var context: Context? = null
|
||||
@Mock
|
||||
internal var prefs: SharedPreferences? = null
|
||||
|
||||
@InjectMocks
|
||||
var uploadController: UploadController? = null
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
val uploadService = mock(UploadService::class.java)
|
||||
val binder = mock(HandlerService.HandlerServiceLocalBinder::class.java)
|
||||
`when`(binder.service).thenReturn(uploadService)
|
||||
uploadController!!.uploadServiceConnection.onServiceConnected(mock(ComponentName::class.java), binder)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun prepareService() {
|
||||
uploadController!!.prepareService()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun cleanup() {
|
||||
uploadController!!.cleanup()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun startUpload() {
|
||||
val contribution = mock(Contribution::class.java)
|
||||
uploadController!!.startUpload(contribution)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,267 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import android.app.Application
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import fr.free.nrw.commons.auth.SessionManager
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
import org.mockito.ArgumentMatchers.anyString
|
||||
import org.mockito.InjectMocks
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.MockitoAnnotations
|
||||
import java.io.FileInputStream
|
||||
import java.io.InputStream
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
|
||||
class UploadModelTest {
|
||||
|
||||
@Mock
|
||||
@field:[Inject Named("licenses")]
|
||||
internal var licenses: List<String>? = null
|
||||
@Mock
|
||||
@field:[Inject Named("default_preferences")]
|
||||
internal var prefs: SharedPreferences? = null
|
||||
@Mock
|
||||
@field:[Inject Named("licenses_by_name")]
|
||||
internal var licensesByName: Map<String, String>? = null
|
||||
@Mock
|
||||
internal var context: Context? = null
|
||||
@Mock
|
||||
internal var mwApi: MediaWikiApi? = null
|
||||
@Mock
|
||||
internal var sessionManage: SessionManager? = null
|
||||
@Mock
|
||||
internal var fileUtilsWrapper: FileUtilsWrapper? = null
|
||||
@Mock
|
||||
internal var fileProcessor: FileProcessor? = null
|
||||
|
||||
@InjectMocks
|
||||
var uploadModel: UploadModel? = null
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
|
||||
`when`(context!!.applicationContext)
|
||||
.thenReturn(mock(Application::class.java))
|
||||
`when`(fileUtilsWrapper!!.createCopyPathAndCopy(any(Uri::class.java), any(Context::class.java)))
|
||||
.thenReturn("file.jpg")
|
||||
`when`(fileUtilsWrapper!!.createExternalCopyPathAndCopy(any(Uri::class.java), any(ContentResolver::class.java)))
|
||||
.thenReturn("extFile.jpg")
|
||||
`when`(fileUtilsWrapper!!.getFileExt(anyString()))
|
||||
.thenReturn("jpg")
|
||||
`when`(fileUtilsWrapper!!.getSHA1(any(InputStream::class.java)))
|
||||
.thenReturn("sha")
|
||||
`when`(fileUtilsWrapper!!.getFileInputStream(anyString()))
|
||||
.thenReturn(mock(FileInputStream::class.java))
|
||||
|
||||
}
|
||||
|
||||
@After
|
||||
@Throws(Exception::class)
|
||||
fun tearDown() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun receive() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.items.size == 2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun receiveDirect() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.items.size == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun verifyPreviousNotAvailableForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertFalse(uploadModel!!.isPreviousAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun verifyNextAvailableForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.isNextAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun verifyPreviousNotAvailable() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertFalse(uploadModel!!.isPreviousAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun verifyNextAvailable() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.isNextAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isSubmitAvailable() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.isNextAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isSubmitAvailableForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.isNextAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getCurrentStepForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.currentStep == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getCurrentStep() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.currentStep == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getStepCount() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.stepCount == 4)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getStepCountForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.stepCount == 3)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getDirectCount() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.count == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getCount() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.count == 2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getUploads() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.uploads.size == 2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getDirectUploads() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.uploads.size == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isTopCardState() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.isTopCardState)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isTopCardStateForDirectUpload() {
|
||||
val element = mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
assertTrue(uploadModel!!.isTopCardState)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun next() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.currentStep == 1)
|
||||
uploadModel!!.next()
|
||||
assertTrue(uploadModel!!.currentStep == 2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun previous() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.currentStep == 1)
|
||||
uploadModel!!.next()
|
||||
assertTrue(uploadModel!!.currentStep == 2)
|
||||
uploadModel!!.previous()
|
||||
assertTrue(uploadModel!!.currentStep == 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isShowingItem() {
|
||||
val element = mock(Uri::class.java)
|
||||
val element2 = mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadModel!!.receive(uriList, "image/jpeg", "external") { _, _ -> }
|
||||
assertTrue(uploadModel!!.isShowingItem)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun buildContributions() {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package fr.free.nrw.commons.upload
|
||||
|
||||
import android.net.Uri
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.InjectMocks
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
class UploadPresenterTest {
|
||||
|
||||
@Mock
|
||||
internal var uploadModel: UploadModel? = null
|
||||
@Mock
|
||||
internal var uploadController: UploadController? = null
|
||||
@Mock
|
||||
internal var mediaWikiApi: MediaWikiApi? = null
|
||||
|
||||
@InjectMocks
|
||||
var uploadPresenter: UploadPresenter? = null
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun receiveMultipleItems() {
|
||||
val element = Mockito.mock(Uri::class.java)
|
||||
val element2 = Mockito.mock(Uri::class.java)
|
||||
var uriList: List<Uri> = mutableListOf<Uri>(element, element2)
|
||||
uploadPresenter!!.receive(uriList, "image/jpeg", "external")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun receiveSingleItem() {
|
||||
val element = Mockito.mock(Uri::class.java)
|
||||
uploadPresenter!!.receive(element, "image/jpeg", "external")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun receiveDirect() {
|
||||
val element = Mockito.mock(Uri::class.java)
|
||||
uploadModel!!.receiveDirect(element, "image/jpeg", "external", "Q1", "Test", "Test"
|
||||
) { _, _ -> }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue