#3101: Add image upload limit of 20 to custom selector (#5369)

* Add basic image limit warning to custom selector

* Block upload button when image limit is exceeded

* Complete basic functionality for upload limit: Disabled button, warning sign & toast

* Consolidate functionality between upload limit and not for upload marking

* Upload Limit: write unit tests and optimize control flow

* Upload Limit Tests: improve logic coverage and alter to stay valid if limit is changed

* Upload Limit: polish javadocs and add explanation to warning toast.

* Upload Limit: refactor variable names

* Upload Limit: change warning toast to dialog box, repurposing welcome dialog code & layout

* Upload Limit: remove error icon when the mark as not for upload button is pressed
This commit is contained in:
u7469570 2023-11-20 20:13:05 +11:00 committed by GitHub
parent 3118a8368b
commit 60764f6f73
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 216 additions and 51 deletions

View file

@ -7,8 +7,10 @@ import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.customselector.model.Image
import fr.free.nrw.commons.customselector.ui.adapter.ImageAdapter
import kotlinx.android.synthetic.main.bottom_sheet_nearby.bottom_sheet
import org.junit.Before
import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.runner.RunWith
import org.mockito.Mockito
@ -18,6 +20,7 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Field
import java.lang.reflect.Method
/**
@ -210,4 +213,68 @@ class CustomSelectorActivityTest {
method.isAccessible = true
method.invoke(activity)
}
/**
* Test displayUploadLimitWarning Function.
*/
@Test
@Throws(Exception::class)
fun testDisplayUploadLimitWarning() {
val method: Method = CustomSelectorActivity::class.java.getDeclaredMethod(
"displayUploadLimitWarning"
)
method.isAccessible = true
method.invoke(activity)
}
/**
* Logic tests for the upload limit functionality.
*/
@Test
@Throws(Exception::class)
fun testUploadLimit() {
val overLimit: Field =
CustomSelectorActivity::class.java.getDeclaredField("uploadLimitExceeded")
overLimit.isAccessible = true
val exceededBy: Field =
CustomSelectorActivity::class.java.getDeclaredField("uploadLimitExceededBy")
exceededBy.isAccessible = true
val limit: Field =
CustomSelectorActivity::class.java.getDeclaredField("uploadLimit")
limit.isAccessible = true
// all tests check integration with not for upload marking
// test with list size limit
for (i in 1..limit.getInt(activity)) {
images.add(Image(i.toLong(), i.toString(), uri,
"abc/abc", 1, "bucket1"))
}
activity.onFolderClick(1, "test", 0)
activity.onSelectedImagesChanged(images,0)
assertEquals(false, overLimit.getBoolean(activity))
assertEquals(0, exceededBy.getInt(activity))
activity.onSelectedImagesChanged(images, 1)
assertEquals(false, overLimit.getBoolean(activity))
assertEquals(0, exceededBy.getInt(activity))
// test with list size limit+1
images.add(image)
activity.onSelectedImagesChanged(images,0)
assertEquals(true, overLimit.getBoolean(activity))
assertEquals(1, exceededBy.getInt(activity))
activity.onSelectedImagesChanged(images,1)
assertEquals(true, overLimit.getBoolean(activity))
assertEquals(1, exceededBy.getInt(activity))
//test with list size 1
images.clear()
images.add(image)
activity.onSelectedImagesChanged(images,0)
assertEquals(false, overLimit.getBoolean(activity))
assertEquals(0, exceededBy.getInt(activity))
activity.onSelectedImagesChanged(images,1)
assertEquals(false, overLimit.getBoolean(activity))
assertEquals(0, exceededBy.getInt(activity))
}
}