Skip to content

Commit ecb43fa

Browse files
Add BookmarkListRootFragment Unit Tests (commons-app#4822)
1 parent 2fc33b0 commit ecb43fa

File tree

1 file changed

+327
-0
lines changed

1 file changed

+327
-0
lines changed
Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
package fr.free.nrw.commons.bookmarks
2+
3+
import android.content.Context
4+
import android.os.Bundle
5+
import android.view.LayoutInflater
6+
import android.view.View
7+
import android.widget.ListAdapter
8+
import androidx.fragment.app.Fragment
9+
import androidx.fragment.app.FragmentManager
10+
import androidx.fragment.app.FragmentTransaction
11+
import com.google.android.material.tabs.TabLayout
12+
import com.nhaarman.mockitokotlin2.any
13+
import com.nhaarman.mockitokotlin2.times
14+
import com.nhaarman.mockitokotlin2.verify
15+
import com.nhaarman.mockitokotlin2.whenever
16+
import fr.free.nrw.commons.Media
17+
import fr.free.nrw.commons.R
18+
import fr.free.nrw.commons.TestAppAdapter
19+
import fr.free.nrw.commons.TestCommonsApplication
20+
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment
21+
import fr.free.nrw.commons.contributions.MainActivity
22+
import fr.free.nrw.commons.explore.ParentViewPager
23+
import fr.free.nrw.commons.media.MediaDetailPagerFragment
24+
import org.junit.Assert
25+
import org.junit.Before
26+
import org.junit.Test
27+
import org.junit.runner.RunWith
28+
import org.mockito.ArgumentMatchers
29+
import org.mockito.Mock
30+
import org.mockito.MockitoAnnotations
31+
import org.powermock.api.mockito.PowerMockito.mock
32+
import org.powermock.reflect.Whitebox
33+
import org.robolectric.Robolectric
34+
import org.robolectric.RobolectricTestRunner
35+
import org.robolectric.RuntimeEnvironment
36+
import org.robolectric.annotation.Config
37+
import org.robolectric.annotation.LooperMode
38+
import org.wikipedia.AppAdapter
39+
import java.lang.reflect.Field
40+
41+
@RunWith(RobolectricTestRunner::class)
42+
@Config(sdk = [21], application = TestCommonsApplication::class)
43+
@LooperMode(LooperMode.Mode.PAUSED)
44+
class BookmarkListRootFragmentUnitTest {
45+
46+
private lateinit var fragment: BookmarkListRootFragment
47+
private lateinit var fragmentManager: FragmentManager
48+
private lateinit var layoutInflater: LayoutInflater
49+
private lateinit var context: Context
50+
private lateinit var activity: MainActivity
51+
private lateinit var view: View
52+
private lateinit var bookmarkFragment: BookmarkFragment
53+
54+
@Mock
55+
private lateinit var listFragment: Fragment
56+
57+
@Mock
58+
private lateinit var mediaDetails: MediaDetailPagerFragment
59+
60+
@Mock
61+
private lateinit var childFragmentManager: FragmentManager
62+
63+
@Mock
64+
private lateinit var childFragmentTransaction: FragmentTransaction
65+
66+
@Mock
67+
private lateinit var bookmarksPagerAdapter: BookmarksPagerAdapter
68+
69+
@Mock
70+
private lateinit var bundle: Bundle
71+
72+
@Mock
73+
private lateinit var media: Media
74+
75+
@Mock
76+
private lateinit var tabLayout: TabLayout
77+
78+
@Mock
79+
private lateinit var viewPager: ParentViewPager
80+
81+
@Mock
82+
private lateinit var adapter: BookmarksPagerAdapter
83+
84+
@Before
85+
fun setUp() {
86+
MockitoAnnotations.initMocks(this)
87+
AppAdapter.set(TestAppAdapter())
88+
activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
89+
context = RuntimeEnvironment.application.applicationContext
90+
91+
fragment = BookmarkListRootFragment()
92+
fragmentManager = activity.supportFragmentManager
93+
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
94+
fragmentTransaction.add(fragment, null)
95+
fragmentTransaction.commitNowAllowingStateLoss()
96+
97+
bookmarkFragment = BookmarkFragment()
98+
99+
Whitebox.setInternalState(fragment, "mChildFragmentManager", childFragmentManager)
100+
Whitebox.setInternalState(fragment, "mParentFragment", bookmarkFragment)
101+
Whitebox.setInternalState(fragment, "listFragment", listFragment)
102+
Whitebox.setInternalState(fragment, "mediaDetails", mediaDetails)
103+
Whitebox.setInternalState(fragment, "bookmarksPagerAdapter", bookmarksPagerAdapter)
104+
Whitebox.setInternalState(bookmarkFragment, "tabLayout", tabLayout)
105+
Whitebox.setInternalState(bookmarkFragment, "viewPager", viewPager)
106+
Whitebox.setInternalState(bookmarkFragment, "adapter", adapter)
107+
108+
whenever(childFragmentManager.beginTransaction()).thenReturn(childFragmentTransaction)
109+
whenever(childFragmentTransaction.hide(any())).thenReturn(childFragmentTransaction)
110+
whenever(childFragmentTransaction.add(ArgumentMatchers.anyInt(), any()))
111+
.thenReturn(childFragmentTransaction)
112+
whenever(childFragmentTransaction.addToBackStack(any()))
113+
.thenReturn(childFragmentTransaction)
114+
whenever(childFragmentTransaction.show(any())).thenReturn(childFragmentTransaction)
115+
whenever(childFragmentTransaction.replace(ArgumentMatchers.anyInt(), any()))
116+
.thenReturn(childFragmentTransaction)
117+
whenever(childFragmentTransaction.remove(any())).thenReturn(childFragmentTransaction)
118+
119+
layoutInflater = LayoutInflater.from(activity)
120+
view = fragment.onCreateView(layoutInflater, null, null) as View
121+
}
122+
123+
@Test
124+
@Throws(Exception::class)
125+
fun checkFragmentNotNull() {
126+
Assert.assertNotNull(fragment)
127+
}
128+
129+
@Test
130+
@Throws(Exception::class)
131+
fun testConstructorCase0() {
132+
whenever(bundle.getInt("order")).thenReturn(0)
133+
fragment = BookmarkListRootFragment(bundle, bookmarksPagerAdapter)
134+
verify(bundle).getString("categoryName")
135+
verify(bundle).getInt("order")
136+
verify(bundle).getInt("orderItem")
137+
}
138+
139+
@Test
140+
@Throws(Exception::class)
141+
fun testConstructorCase2() {
142+
whenever(bundle.getInt("order")).thenReturn(2)
143+
whenever(bundle.getInt("orderItem")).thenReturn(2)
144+
fragment = BookmarkListRootFragment(bundle, bookmarksPagerAdapter)
145+
verify(bundle).getString("categoryName")
146+
verify(bundle).getInt("order")
147+
verify(bundle).getInt("orderItem")
148+
}
149+
150+
@Test
151+
@Throws(Exception::class)
152+
fun testOnViewCreated() {
153+
fragment.onViewCreated(view, null)
154+
verify(childFragmentManager).beginTransaction()
155+
verify(childFragmentTransaction).hide(mediaDetails)
156+
verify(childFragmentTransaction).add(R.id.explore_container, listFragment)
157+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
158+
verify(childFragmentTransaction).commit()
159+
verify(childFragmentManager).executePendingTransactions()
160+
}
161+
162+
@Test
163+
@Throws(Exception::class)
164+
fun `testSetFragment_Case fragment_isAdded && otherFragment != null`() {
165+
whenever(mediaDetails.isAdded).thenReturn(true)
166+
fragment.setFragment(mediaDetails, listFragment)
167+
verify(childFragmentManager).beginTransaction()
168+
verify(childFragmentTransaction).hide(listFragment)
169+
verify(childFragmentTransaction).show(mediaDetails)
170+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
171+
verify(childFragmentTransaction).commit()
172+
verify(childFragmentManager).executePendingTransactions()
173+
}
174+
175+
@Test
176+
@Throws(Exception::class)
177+
fun `testSetFragment_Case fragment_isAdded && otherFragment == null`() {
178+
whenever(mediaDetails.isAdded).thenReturn(true)
179+
fragment.setFragment(mediaDetails, null)
180+
verify(childFragmentManager).beginTransaction()
181+
verify(childFragmentTransaction).show(mediaDetails)
182+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
183+
verify(childFragmentTransaction).commit()
184+
verify(childFragmentManager).executePendingTransactions()
185+
}
186+
187+
@Test
188+
@Throws(Exception::class)
189+
fun `testSetFragment_Case fragment_isNotAdded && otherFragment != null`() {
190+
whenever(mediaDetails.isAdded).thenReturn(false)
191+
fragment.setFragment(mediaDetails, listFragment)
192+
verify(childFragmentManager).beginTransaction()
193+
verify(childFragmentTransaction).hide(listFragment)
194+
verify(childFragmentTransaction).add(R.id.explore_container, mediaDetails)
195+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
196+
verify(childFragmentTransaction).commit()
197+
verify(childFragmentManager).executePendingTransactions()
198+
}
199+
200+
@Test
201+
@Throws(Exception::class)
202+
fun `testSetFragment_Case fragment_isNotAdded && otherFragment == null`() {
203+
whenever(mediaDetails.isAdded).thenReturn(false)
204+
fragment.setFragment(mediaDetails, null)
205+
verify(childFragmentManager).beginTransaction()
206+
verify(childFragmentTransaction).replace(R.id.explore_container, mediaDetails)
207+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
208+
verify(childFragmentTransaction).commit()
209+
verify(childFragmentManager).executePendingTransactions()
210+
}
211+
212+
@Test
213+
@Throws(Exception::class)
214+
fun testGetMediaAtPositionCaseNull() {
215+
whenever(bookmarksPagerAdapter.mediaAdapter).thenReturn(null)
216+
Assert.assertEquals(fragment.getMediaAtPosition(0), null)
217+
}
218+
219+
@Test
220+
@Throws(Exception::class)
221+
fun testGetMediaAtPositionCaseNonNull() {
222+
val listAdapter = mock(ListAdapter::class.java)
223+
whenever(bookmarksPagerAdapter.mediaAdapter).thenReturn(listAdapter)
224+
whenever(listAdapter.getItem(0)).thenReturn(media)
225+
Assert.assertEquals(fragment.getMediaAtPosition(0), media)
226+
}
227+
228+
@Test
229+
@Throws(Exception::class)
230+
fun testGetTotalMediaCountCaseNull() {
231+
whenever(bookmarksPagerAdapter.mediaAdapter).thenReturn(null)
232+
Assert.assertEquals(fragment.totalMediaCount, 0)
233+
}
234+
235+
@Test
236+
@Throws(Exception::class)
237+
fun testGetTotalMediaCountCaseNonNull() {
238+
val listAdapter = mock(ListAdapter::class.java)
239+
whenever(bookmarksPagerAdapter.mediaAdapter).thenReturn(listAdapter)
240+
whenever(listAdapter.count).thenReturn(1)
241+
Assert.assertEquals(fragment.totalMediaCount, 1)
242+
}
243+
244+
@Test
245+
@Throws(Exception::class)
246+
fun testGetContributionStateAt() {
247+
Assert.assertEquals(fragment.getContributionStateAt(0), null)
248+
}
249+
250+
@Test
251+
@Throws(Exception::class)
252+
fun testRefreshNominatedMedia() {
253+
whenever(listFragment.isVisible).thenReturn(false)
254+
fragment.refreshNominatedMedia(0)
255+
verify(childFragmentManager, times(2)).beginTransaction()
256+
verify(childFragmentTransaction).remove(mediaDetails)
257+
verify(childFragmentTransaction, times(2)).commit()
258+
verify(childFragmentManager, times(2)).executePendingTransactions()
259+
verify(childFragmentTransaction).hide(listFragment)
260+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
261+
}
262+
263+
@Test
264+
@Throws(Exception::class)
265+
fun testViewPagerNotifyDataSetChanged() {
266+
fragment.viewPagerNotifyDataSetChanged()
267+
verify(mediaDetails).notifyDataSetChanged()
268+
}
269+
270+
@Test
271+
@Throws(Exception::class)
272+
fun testOnMediaClicked() {
273+
fragment.onMediaClicked(0)
274+
}
275+
276+
@Test
277+
@Throws(Exception::class)
278+
fun testOnBackStackChanged() {
279+
fragment.onBackStackChanged()
280+
}
281+
282+
@Test
283+
@Throws(Exception::class)
284+
fun testOnItemClick() {
285+
fragment.onItemClick(null, null, 0, 0)
286+
verify(childFragmentManager).beginTransaction()
287+
verify(childFragmentTransaction).commit()
288+
verify(childFragmentManager).executePendingTransactions()
289+
verify(childFragmentTransaction).hide(listFragment)
290+
verify(childFragmentTransaction).addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
291+
}
292+
293+
@Test
294+
@Throws(Exception::class)
295+
fun `testBackPressed Case NonNull isVisible and backButton clicked`() {
296+
whenever(mediaDetails.isVisible).thenReturn(true)
297+
whenever(mediaDetails.backButtonClicked()).thenReturn(true)
298+
Assert.assertEquals(fragment.backPressed(), true)
299+
}
300+
301+
@Test
302+
@Throws(Exception::class)
303+
fun `testBackPressed Case NonNull isVisible and backButton not clicked`() {
304+
Whitebox.setInternalState(fragment, "listFragment", mock(BookmarkPicturesFragment::class.java))
305+
whenever(mediaDetails.isVisible).thenReturn(true)
306+
whenever(mediaDetails.backButtonClicked()).thenReturn(false)
307+
whenever(mediaDetails.removedItems).thenReturn(ArrayList(0))
308+
Assert.assertEquals(fragment.backPressed(), false)
309+
}
310+
311+
@Test
312+
@Throws(Exception::class)
313+
fun `testBackPressed Case NonNull isNotVisible and backButton clicked`() {
314+
whenever(mediaDetails.isVisible).thenReturn(false)
315+
Assert.assertEquals(fragment.backPressed(), false)
316+
}
317+
318+
@Test
319+
@Throws(Exception::class)
320+
fun `testBackPressed Case Null`() {
321+
val field: Field = BookmarkListRootFragment::class.java.getDeclaredField("mediaDetails")
322+
field.isAccessible = true
323+
field.set(fragment, null)
324+
Assert.assertEquals(fragment.backPressed(), false)
325+
}
326+
327+
}

0 commit comments

Comments
 (0)