From 092079986a75d003c1494e56df29d23c0704d869 Mon Sep 17 00:00:00 2001 From: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Date: Tue, 15 Feb 2022 15:06:31 +0530 Subject: [PATCH] Add UploadMediaDetailAdapter Unit Tests (#4819) --- .../UploadMediaDetailAdapterUnitTest.kt | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt new file mode 100644 index 000000000..c95269c8b --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt @@ -0,0 +1,148 @@ +package fr.free.nrw.commons.upload + +import android.content.Context +import android.widget.GridLayout +import com.nhaarman.mockitokotlin2.verify +import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.TestCommonsApplication +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.MockitoAnnotations +import org.powermock.reflect.Whitebox +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import java.lang.reflect.Field + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [21], application = TestCommonsApplication::class) +@LooperMode(LooperMode.Mode.PAUSED) +class UploadMediaDetailAdapterUnitTest { + + private lateinit var adapter: UploadMediaDetailAdapter + private lateinit var context: Context + private lateinit var viewHolder: UploadMediaDetailAdapter.ViewHolder + private lateinit var activity: UploadActivity + private lateinit var uploadMediaDetails: List + + @Mock + private lateinit var uploadMediaDetail: UploadMediaDetail + + @Mock + private lateinit var eventListener: UploadMediaDetailAdapter.EventListener + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + uploadMediaDetails = mutableListOf(uploadMediaDetail, uploadMediaDetail) + activity = Robolectric.buildActivity(UploadActivity::class.java).get() + adapter = UploadMediaDetailAdapter("") + context = RuntimeEnvironment.application.applicationContext + Whitebox.setInternalState(adapter, "uploadMediaDetails", uploadMediaDetails) + Whitebox.setInternalState(adapter, "eventListener", eventListener) + viewHolder = adapter.onCreateViewHolder(GridLayout(activity), 0) + } + + @Test + @Throws(Exception::class) + fun checkAdapterNotNull() { + Assert.assertNotNull(adapter) + } + + @Test + @Throws(Exception::class) + fun testSetItems() { + val list = mutableListOf(uploadMediaDetail) + val uploadMediaDetails: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("uploadMediaDetails") + uploadMediaDetails.isAccessible = true + val selectedLanguages: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("selectedLanguages") + selectedLanguages.isAccessible = true + adapter.items = list + Assert.assertEquals(uploadMediaDetails.get(adapter), list) + val map: HashMap = selectedLanguages.get(adapter) as HashMap + Assert.assertEquals(map.size, 0) + } + + @Test + @Throws(Exception::class) + fun testGetItems() { + val list = mutableListOf(uploadMediaDetail) + val uploadMediaDetails: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("uploadMediaDetails") + uploadMediaDetails.isAccessible = true + uploadMediaDetails.set(adapter, list) + Assert.assertEquals(adapter.items, list) + } + + @Test + @Throws(Exception::class) + fun testGetItemCount() { + val list = mutableListOf(uploadMediaDetail) + val uploadMediaDetails: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("uploadMediaDetails") + uploadMediaDetails.isAccessible = true + uploadMediaDetails.set(adapter, list) + Assert.assertEquals(adapter.itemCount, list.size) + } + + @Test + @Throws(Exception::class) + fun testAddDescription() { + val list = mutableListOf(uploadMediaDetail) + val uploadMediaDetails: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("uploadMediaDetails") + uploadMediaDetails.isAccessible = true + uploadMediaDetails.set(adapter, list) + val selectedLanguages: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("selectedLanguages") + selectedLanguages.isAccessible = true + selectedLanguages.set(adapter, hashMapOf()) + adapter.addDescription(uploadMediaDetail) + val map: HashMap = selectedLanguages.get(adapter) as HashMap + Assert.assertEquals(map[list.size], null) + } + + @Test + @Throws(Exception::class) + fun testRemoveDescription() { + val list = mutableListOf(uploadMediaDetail) + val uploadMediaDetails: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("uploadMediaDetails") + uploadMediaDetails.isAccessible = true + uploadMediaDetails.set(adapter, list) + val selectedLanguages: Field = + UploadMediaDetailAdapter::class.java.getDeclaredField("selectedLanguages") + selectedLanguages.isAccessible = true + selectedLanguages.set(adapter, hashMapOf()) + adapter.removeDescription(uploadMediaDetail, list.size) + val map: HashMap = selectedLanguages.get(adapter) as HashMap + Assert.assertEquals(map[list.size], null) + } + + @Test + fun testOnBindViewHolderPosition0() { + Whitebox.setInternalState(adapter, "savedLanguageValue", "") + whenever(uploadMediaDetail.isManuallyAdded).thenReturn(false) + whenever(uploadMediaDetail.selectedLanguageIndex).thenReturn(-1) + adapter.onBindViewHolder(viewHolder, 0) + verify(eventListener).onPrimaryCaptionTextChange(false) + verify(uploadMediaDetail).isManuallyAdded + } + + @Test + fun testOnBindViewHolderPosition1() { + Whitebox.setInternalState(adapter, "savedLanguageValue", "en") + whenever(uploadMediaDetail.isManuallyAdded).thenReturn(true) + whenever(uploadMediaDetail.selectedLanguageIndex).thenReturn(1) + adapter.onBindViewHolder(viewHolder, 1) + verify(uploadMediaDetail).isManuallyAdded + } + +} \ No newline at end of file