Fixes #3790- Use WorkManagers to upload contributions (#4298)

* Fixes #3790
Use WorkManagers to process upload contributions
** Removed UploadService and Added UploadWorker to process contributions Upload
** Made nescessary changes to remove the usages of the Service from the classes
** UI Fxies- Minor changes in the retry and cancel uplaod icons to give them a clickable area of 48 dp

* Fixes #3790
Use WorkManagers to process upload contributions
** Removed UploadService and Added UploadWorker to process contributions Upload
** Made nescessary changes to remove the usages of the Service from the classes
** UI Fxies- Minor changes in the retry and cancel uplaod icons to give them a clickable area of 48 dp

* Updated JavaDocs in UploadWorker, Fixed Test cases

* Updated JavaDocs in UploadWorker, Fixed Test cases

* Updated gradle

* Revert "Updated gradle"

This reverts commit c8979fe6dc.

* rolledback to compileSDKVersion 28, fixed tests

* Don't call the show notifications on the main thread

* Bug Fix- Duplicate contributions, handle upload stash errors
This commit is contained in:
Ashish 2021-04-08 18:29:07 +05:30 committed by GitHub
parent fd2a7a9c56
commit ecbff7e3b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 692 additions and 802 deletions

View file

@ -124,7 +124,7 @@ class BookmarkPictureDaoTest {
whenever(client.query(any(), any(), any(), any(), anyOrNull())).thenReturn(createCursor(1))
assertFalse(testObject.updateBookmark(exampleBookmark))
verify(client).delete(eq(exampleBookmark.contentUri), isNull(), isNull())
verify(client).delete(eq(exampleBookmark.contentUri!!), isNull(), isNull())
}
@Test

View file

@ -2,28 +2,21 @@ package fr.free.nrw.commons.contributions
import android.database.Cursor
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.loader.content.CursorLoader
import androidx.loader.content.Loader
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import io.reactivex.Completable
import io.reactivex.Scheduler
import io.reactivex.Single
import io.reactivex.schedulers.TestScheduler
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers
import org.mockito.ArgumentMatchers.*
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import java.util.concurrent.TimeUnit
/**
* The unit test class for ContributionsPresenter
@ -58,7 +51,7 @@ class ContributionsPresenterTest {
scheduler=TestScheduler()
cursor = Mockito.mock(Cursor::class.java)
contribution = Mockito.mock(Contribution::class.java)
contributionsPresenter = ContributionsPresenter(repository,scheduler,scheduler)
contributionsPresenter = ContributionsPresenter(repository, scheduler)
loader = Mockito.mock(CursorLoader::class.java)
contributionsPresenter.onAttachView(view)
liveData=MutableLiveData()

View file

@ -152,7 +152,7 @@ class RecentSearchesDaoTest {
testObject.save(recentSearch)
verify(client).update(eq(recentSearch.contentUri), captor.capture(), isNull(), isNull())
verify(client).update(eq(recentSearch.contentUri!!), captor.capture(), isNull(), isNull())
captor.firstValue.let { cv ->
assertEquals(2, cv.size())
assertEquals(recentSearch.query, cv.getAsString(COLUMN_NAME))

View file

@ -1,29 +1,28 @@
package fr.free.nrw.commons.upload
import android.content.ComponentName
import android.content.ContentResolver
import android.content.Context
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.contributions.Contribution
import fr.free.nrw.commons.kvstore.JsonKvStore
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: JsonKvStore? = null
internal lateinit var store: JsonKvStore
@Mock
internal lateinit var contentResolver: ContentResolver
@InjectMocks
var uploadController: UploadController? = null
@ -31,20 +30,6 @@ class UploadControllerTest {
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
val uploadService = mock(UploadService::class.java)
val binder = mock(UploadService.UploadServiceLocalBinder::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
@ -53,6 +38,7 @@ class UploadControllerTest {
val media = mock<Media>()
whenever(contribution.media).thenReturn(media)
whenever(media.author).thenReturn("Creator")
uploadController!!.startUpload(contribution)
whenever(context?.contentResolver).thenReturn(contentResolver)
uploadController?.prepareMedia(contribution)
}
}