1+ package fr.free.nrw.commons.campaigns
2+
3+ import com.nhaarman.mockito_kotlin.verify
4+ import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient
5+ import io.reactivex.Single
6+ import io.reactivex.schedulers.TestScheduler
7+ import org.junit.Before
8+ import org.junit.Test
9+ import org.mockito.Mock
10+ import org.mockito.Mockito
11+ import org.mockito.MockitoAnnotations
12+ import java.text.SimpleDateFormat
13+ import java.util.*
14+ import kotlin.collections.ArrayList
15+
16+ class CampaignsPresenterTest {
17+ @Mock
18+ var okHttpJsonApiClient: OkHttpJsonApiClient ? = null
19+
20+ lateinit var campaignsPresenter: CampaignsPresenter
21+
22+ @Mock
23+ internal var view: ICampaignsView ? = null
24+
25+ @Mock
26+ internal var campaignResponseDTO: CampaignResponseDTO ? = null
27+ lateinit var campaignsSingle: Single <CampaignResponseDTO >
28+
29+ @Mock
30+ var campaign: Campaign ? = null
31+
32+ lateinit var testScheduler: TestScheduler
33+
34+ /* *
35+ * initial setup, test environment
36+ */
37+ @Before
38+ @Throws(Exception ::class )
39+ fun setUp () {
40+ MockitoAnnotations .initMocks(this )
41+ testScheduler= TestScheduler ()
42+ campaignsSingle= Single .just(campaignResponseDTO)
43+ campaignsPresenter= CampaignsPresenter (okHttpJsonApiClient,testScheduler,testScheduler)
44+ campaignsPresenter?.onAttachView(view)
45+ Mockito .`when `(okHttpJsonApiClient?.campaigns).thenReturn(campaignsSingle)
46+ }
47+
48+ @Test
49+ fun getCampaignsTestNoCampaigns () {
50+ campaignsPresenter.getCampaigns()
51+ verify(okHttpJsonApiClient)?.campaigns
52+ testScheduler.triggerActions()
53+ verify(view)?.showCampaigns(null )
54+ }
55+
56+ @Test
57+ fun getCampaignsTestNonEmptyCampaigns () {
58+ campaignsPresenter.getCampaigns()
59+ var campaigns= ArrayList <Campaign >()
60+ campaigns.add(campaign!! )
61+ val simpleDateFormat = SimpleDateFormat (" yyyy-MM-dd" , Locale .ROOT )
62+ simpleDateFormat.timeZone = TimeZone .getTimeZone(" UTC" )
63+ Mockito .`when `(campaignResponseDTO?.campaigns).thenReturn(campaigns)
64+ var calendar = Calendar .getInstance()
65+ calendar.add(Calendar .DATE ,- 1 )
66+ val startDateString = simpleDateFormat.format(calendar.time).toString()
67+ calendar= Calendar .getInstance()
68+ calendar.add(Calendar .DATE ,3 )
69+ val endDateString= simpleDateFormat.format(calendar.time).toString()
70+ Mockito .`when `(campaign?.endDate).thenReturn(endDateString)
71+ Mockito .`when `(campaign?.startDate).thenReturn(startDateString)
72+ Mockito .`when `(campaignResponseDTO?.campaigns).thenReturn(campaigns)
73+ verify(okHttpJsonApiClient)?.campaigns
74+ testScheduler.triggerActions()
75+ verify(view)?.showCampaigns(campaign)
76+ }
77+ }
0 commit comments