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