#3699 Multiple upload: Only one file's caption is used for all files, others ignored - share model data with the UI - inline and remove Remote/LocalDataSource (#3707)

This commit is contained in:
Seán Mac Gillicuddy 2020-05-08 11:21:17 +01:00 committed by GitHub
parent 11ff5fb055
commit 4443810823
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 341 additions and 704 deletions

View file

@ -33,7 +33,7 @@ class u {
var imageProcessingService: ImageProcessingService? = null
@Mock
internal lateinit var uploadItem: UploadModel.UploadItem
internal lateinit var uploadItem: UploadItem
@Before
@Throws(Exception::class)

View file

@ -2,6 +2,7 @@ package fr.free.nrw.commons.upload
import com.nhaarman.mockitokotlin2.verify
import fr.free.nrw.commons.Utils
import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.license.MediaLicenseContract
import fr.free.nrw.commons.upload.license.MediaLicensePresenter
@ -24,13 +25,16 @@ import org.powermock.modules.junit4.PowerMockRunner
@PrepareForTest(Utils::class)
class MediaLicensePresenterTest {
@Mock
internal var repository: UploadRepository? = null
internal lateinit var repository: UploadRepository
@Mock
internal var view: MediaLicenseContract.View? = null
internal lateinit var defaultKvStore: JsonKvStore
@Mock
internal lateinit var view: MediaLicenseContract.View
@InjectMocks
var mediaLicensePresenter: MediaLicensePresenter? = null
lateinit var mediaLicensePresenter: MediaLicensePresenter
/**
* initial setup test environemnt
@ -39,7 +43,7 @@ class MediaLicensePresenterTest {
@Throws(Exception::class)
fun setUp() {
MockitoAnnotations.initMocks(this)
mediaLicensePresenter?.onAttachView(view)
mediaLicensePresenter.onAttachView(view)
PowerMockito.mockStatic(Utils::class.java)
PowerMockito.`when`(Utils.licenseNameFor(ArgumentMatchers.anyString())).thenReturn(1)
}
@ -50,9 +54,9 @@ class MediaLicensePresenterTest {
*/
@Test
fun getLicenseTest() {
mediaLicensePresenter?.getLicenses()
verify(view)?.setLicenses(ArgumentMatchers.anyList())
verify(view)?.setSelectedLicense(ArgumentMatchers.any())
mediaLicensePresenter.getLicenses()
verify(view).setLicenses(ArgumentMatchers.anyList())
verify(view).setSelectedLicense(ArgumentMatchers.any())
}
/**
@ -60,7 +64,7 @@ class MediaLicensePresenterTest {
*/
@Test
fun selectLicenseTest() {
mediaLicensePresenter?.selectLicense(ArgumentMatchers.anyString())
verify(view)?.updateLicenseSummary(ArgumentMatchers.any(), ArgumentMatchers.anyInt())
mediaLicensePresenter.selectLicense(ArgumentMatchers.anyString())
verify(view).updateLicenseSummary(ArgumentMatchers.any(), ArgumentMatchers.anyInt())
}
}
}

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.upload
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.nearby.Place
import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailsContract
@ -41,16 +42,19 @@ class UploadMediaPresenterTest {
private lateinit var place: Place
@Mock
private lateinit var uploadItem: UploadModel.UploadItem
private lateinit var uploadItem: UploadItem
@Mock
private lateinit var uploadMediaDetails: List<UploadMediaDetail>
private lateinit var testObservableUploadItem: Observable<UploadModel.UploadItem>
private lateinit var testObservableUploadItem: Observable<UploadItem>
private lateinit var testSingleImageResult: Single<Int>
private lateinit var testScheduler: TestScheduler
@Mock
private lateinit var jsonKvStore: JsonKvStore
/**
* initial setup unit test environment
*/
@ -61,7 +65,8 @@ class UploadMediaPresenterTest {
testObservableUploadItem = Observable.just(uploadItem)
testSingleImageResult = Single.just(1)
testScheduler = TestScheduler()
uploadMediaPresenter = UploadMediaPresenter(repository, testScheduler, testScheduler)
uploadMediaPresenter = UploadMediaPresenter(repository,
jsonKvStore,testScheduler, testScheduler)
uploadMediaPresenter.onAttachView(view)
}
@ -81,7 +86,7 @@ class UploadMediaPresenterTest {
verify(view).showProgress(true)
testScheduler.triggerActions()
verify(view).onImageProcessed(
ArgumentMatchers.any(UploadModel.UploadItem::class.java),
ArgumentMatchers.any(UploadItem::class.java),
ArgumentMatchers.any(Place::class.java)
)
verify(view).showProgress(false)
@ -92,10 +97,11 @@ class UploadMediaPresenterTest {
*/
@Test
fun verifyImageQualityTest() {
whenever(repository.getImageQuality(ArgumentMatchers.any(UploadModel.UploadItem::class.java)))
whenever(repository.uploads).thenReturn(listOf(uploadItem))
whenever(repository.getImageQuality(uploadItem))
.thenReturn(testSingleImageResult)
whenever(uploadItem.imageQuality).thenReturn(ArgumentMatchers.anyInt())
uploadMediaPresenter.verifyImageQuality(uploadItem)
uploadMediaPresenter.verifyImageQuality(0)
verify(view).showProgress(true)
testScheduler.triggerActions()
verify(view).showProgress(false)
@ -107,21 +113,21 @@ class UploadMediaPresenterTest {
@Test
fun handleImageResult() {
//Positive case test
uploadMediaPresenter.handleImageResult(IMAGE_KEEP)
uploadMediaPresenter.handleImageResult(IMAGE_KEEP, uploadItem)
verify(view).onImageValidationSuccess()
//Duplicate file name
uploadMediaPresenter.handleImageResult(FILE_NAME_EXISTS)
verify(view).showDuplicatePicturePopup()
uploadMediaPresenter.handleImageResult(FILE_NAME_EXISTS, uploadItem)
verify(view).showDuplicatePicturePopup(uploadItem)
//Empty Caption test
uploadMediaPresenter.handleImageResult(EMPTY_CAPTION)
uploadMediaPresenter.handleImageResult(EMPTY_CAPTION, uploadItem)
verify(view).showMessage(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt())
//Bad Picture test
//Empty Caption test
uploadMediaPresenter.handleImageResult(-7)
verify(view)?.showBadImagePopup(ArgumentMatchers.anyInt())
uploadMediaPresenter.handleImageResult(-7, uploadItem)
verify(view)?.showBadImagePopup(ArgumentMatchers.anyInt(), eq(uploadItem))
}
@ -138,7 +144,6 @@ class UploadMediaPresenterTest {
testScheduler.triggerActions()
verify(view).showProgress(true)
verify(view).onImageValidationSuccess()
uploadMediaPresenter.setUploadItem(0, uploadItem)
}
}
@ -155,7 +160,6 @@ class UploadMediaPresenterTest {
testScheduler.triggerActions()
verify(view).showProgress(true)
verify(view).onImageValidationSuccess()
uploadMediaPresenter.setUploadItem(0, uploadItem)
}
}
@ -164,12 +168,13 @@ class UploadMediaPresenterTest {
*/
@Test
fun fetchPreviousImageAndTitleTestPositive() {
whenever(repository.uploads).thenReturn(listOf(uploadItem))
whenever(repository.getPreviousUploadItem(ArgumentMatchers.anyInt()))
.thenReturn(uploadItem)
whenever(uploadItem.uploadMediaDetails).thenReturn(uploadMediaDetails)
whenever(uploadItem.uploadMediaDetails).thenReturn(listOf())
uploadMediaPresenter.fetchPreviousTitleAndDescription(0)
verify(view).setCaptionsAndDescriptions(ArgumentMatchers.any())
verify(view).updateMediaDetails(ArgumentMatchers.any())
}
/**
@ -188,9 +193,9 @@ class UploadMediaPresenterTest {
*/
@Test
fun handleBadImageBaseTestInvalidLocation() {
uploadMediaPresenter.handleBadImage(8)
verify(repository).saveValue(ArgumentMatchers.anyString(), eq(false))
verify(view).showBadImagePopup(8)
uploadMediaPresenter.handleBadImage(8, uploadItem)
verify(jsonKvStore).putBoolean(ArgumentMatchers.anyString(), eq(false))
verify(view).showBadImagePopup(8, uploadItem)
}
/**
@ -198,7 +203,7 @@ class UploadMediaPresenterTest {
*/
@Test
fun handleBadImageBaseTestEmptyTitle() {
uploadMediaPresenter.handleBadImage(-3)
uploadMediaPresenter.handleBadImage(-3, uploadItem)
verify(view).showMessage(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt())
}
@ -207,8 +212,8 @@ class UploadMediaPresenterTest {
*/
@Test
fun handleBadImageBaseTestFileNameExists() {
uploadMediaPresenter.handleBadImage(-4)
verify(view).showDuplicatePicturePopup()
uploadMediaPresenter.handleBadImage(-4, uploadItem)
verify(view).showDuplicatePicturePopup(uploadItem)
}
@ -222,13 +227,4 @@ class UploadMediaPresenterTest {
verify(view).showSimilarImageFragment("original", "possible", similar)
}
/**
* Test set upload item
*/
@Test
fun setUploadItemTest() {
uploadMediaPresenter.setUploadItem(0, uploadItem)
verify(repository).updateUploadItem(0, uploadItem)
}
}