mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Add ContributionsListFragment Unit Tests (#4533)
This commit is contained in:
parent
ebae63de5d
commit
3314905cfa
1 changed files with 353 additions and 0 deletions
|
|
@ -0,0 +1,353 @@
|
||||||
|
package fr.free.nrw.commons.contributions
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.Looper
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.ProgressBar
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.fragment.app.FragmentManager
|
||||||
|
import androidx.fragment.app.FragmentTransaction
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
|
import fr.free.nrw.commons.Media
|
||||||
|
import fr.free.nrw.commons.TestAppAdapter
|
||||||
|
import fr.free.nrw.commons.TestCommonsApplication
|
||||||
|
import fr.free.nrw.commons.upload.WikidataPlace
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.ArgumentMatchers.anyInt
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
import org.powermock.reflect.Whitebox
|
||||||
|
import org.robolectric.Robolectric
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.RuntimeEnvironment
|
||||||
|
import org.robolectric.Shadows
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
import org.robolectric.annotation.LooperMode
|
||||||
|
import org.wikipedia.AppAdapter
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner::class)
|
||||||
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
|
@LooperMode(LooperMode.Mode.PAUSED)
|
||||||
|
class ContributionsListFragmentUnitTests {
|
||||||
|
|
||||||
|
private lateinit var activity: MainActivity
|
||||||
|
private lateinit var fragment: ContributionsListFragment
|
||||||
|
private lateinit var context: Context
|
||||||
|
private lateinit var layoutInflater: LayoutInflater
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var savedInstanceState: Bundle
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var rvContributionsList: RecyclerView
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var adapter: ContributionsListAdapter
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var contribution: Contribution
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var media: Media
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var wikidataPlace: WikidataPlace
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var callback: ContributionsListFragment.Callback
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var layoutManager: RecyclerView.LayoutManager
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var gridLayoutManager: GridLayoutManager
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var noContributionsYet: TextView
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var progressBar: ProgressBar
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var fabPlus: FloatingActionButton
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var fabCamera: FloatingActionButton
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var fabGallery: FloatingActionButton
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var newConfig: Configuration
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var fabLayout: LinearLayout
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var contributionsListPresenter: ContributionsListPresenter
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
AppAdapter.set(TestAppAdapter())
|
||||||
|
|
||||||
|
context = RuntimeEnvironment.application.applicationContext
|
||||||
|
activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
|
||||||
|
layoutInflater = LayoutInflater.from(activity)
|
||||||
|
|
||||||
|
fragment = ContributionsListFragment()
|
||||||
|
val fragmentManager: FragmentManager = activity.supportFragmentManager
|
||||||
|
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
|
||||||
|
fragmentTransaction.add(fragment, null)
|
||||||
|
fragmentTransaction.commit()
|
||||||
|
|
||||||
|
Whitebox.setInternalState(fragment, "rvContributionsList", rvContributionsList)
|
||||||
|
Whitebox.setInternalState(fragment, "adapter", adapter)
|
||||||
|
Whitebox.setInternalState(fragment, "callback", callback)
|
||||||
|
Whitebox.setInternalState(fragment, "noContributionsYet", noContributionsYet)
|
||||||
|
Whitebox.setInternalState(fragment, "progressBar", progressBar)
|
||||||
|
Whitebox.setInternalState(fragment, "fabPlus", fabPlus)
|
||||||
|
Whitebox.setInternalState(fragment, "fabCamera", fabCamera)
|
||||||
|
Whitebox.setInternalState(fragment, "fabGallery", fabGallery)
|
||||||
|
Whitebox.setInternalState(fragment, "fab_layout", fabLayout)
|
||||||
|
Whitebox.setInternalState(
|
||||||
|
fragment,
|
||||||
|
"contributionsListPresenter",
|
||||||
|
contributionsListPresenter
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun checkFragmentNotNull() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
Assert.assertNotNull(fragment)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnCreateView() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.onCreateView(layoutInflater, null, savedInstanceState)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnDetach() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.onDetach()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testGetContributionStateAt() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(contribution)
|
||||||
|
fragment.getContributionStateAt(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnConfirmClicked() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(contribution.media).thenReturn(media)
|
||||||
|
`when`(media.wikiCode).thenReturn("")
|
||||||
|
`when`(contribution.wikidataPlace).thenReturn(wikidataPlace)
|
||||||
|
fragment.onConfirmClicked(contribution, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testGetTotalMediaCount() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.totalMediaCount
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testGetMediaAtPositionCaseNonNull() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(contribution)
|
||||||
|
`when`(contribution.media).thenReturn(media)
|
||||||
|
fragment.getMediaAtPosition(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testGetMediaAtPositionCaseNull() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(null)
|
||||||
|
fragment.getMediaAtPosition(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testShowAddImageToWikipediaInstructions() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"showAddImageToWikipediaInstructions",
|
||||||
|
Contribution::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testResumeUpload() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.resumeUpload(contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testPauseUpload() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.pauseUpload(contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAddImageToWikipedia() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.addImageToWikipedia(contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOpenMediaDetail() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.openMediaDetail(0, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testDeleteUpload() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.deleteUpload(contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testRetryUpload() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.retryUpload(contribution)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnViewStateRestored() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(rvContributionsList.layoutManager).thenReturn(layoutManager)
|
||||||
|
fragment.onViewStateRestored(savedInstanceState)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnSaveInstanceState() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(rvContributionsList.layoutManager).thenReturn(gridLayoutManager)
|
||||||
|
fragment.onSaveInstanceState(savedInstanceState)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testShowNoContributionsUI() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.showNoContributionsUI(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testShowProgress() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.showProgress(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testShowWelcomeTip() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
fragment.showWelcomeTip(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAnimateFAB() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(fabPlus.isShown).thenReturn(false)
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"animateFAB",
|
||||||
|
Boolean::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAnimateFABCaseShownAndOpen() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(fabPlus.isShown).thenReturn(true)
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"animateFAB",
|
||||||
|
Boolean::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAnimateFABCaseShownAndClose() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
`when`(fabPlus.isShown).thenReturn(true)
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"animateFAB",
|
||||||
|
Boolean::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testSetListeners() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"setListeners"
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testInitializeAnimations() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
|
||||||
|
"initializeAnimations"
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnConfigurationChanged() {
|
||||||
|
Shadows.shadowOf(Looper.getMainLooper()).idle()
|
||||||
|
newConfig.orientation = Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
fragment.onConfigurationChanged(newConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue