Skip to content

Commit 7b9e792

Browse files
ashishkumar468misaochan
authored andcommitted
Unit-Tests for Campaigns (commons-app#3258)
1 parent 4150e5f commit 7b9e792

File tree

2 files changed

+90
-3
lines changed

2 files changed

+90
-3
lines changed

app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package fr.free.nrw.commons.campaigns;
22

3+
import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD;
4+
import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD;
5+
36
import android.annotation.SuppressLint;
47

8+
import io.reactivex.Scheduler;
9+
import javax.inject.Named;
510
import org.wikipedia.util.DateUtil;
611

712
import java.text.ParseException;
@@ -30,14 +35,18 @@
3035
@Singleton
3136
public class CampaignsPresenter implements BasePresenter<ICampaignsView> {
3237
private final OkHttpJsonApiClient okHttpJsonApiClient;
38+
private final Scheduler mainThreadScheduler;
39+
private final Scheduler ioScheduler;
3340

3441
private ICampaignsView view;
3542
private Disposable disposable;
3643
private Campaign campaign;
3744

3845
@Inject
39-
public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient) {
46+
public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient, @Named(IO_THREAD)Scheduler ioScheduler, @Named(MAIN_THREAD)Scheduler mainThreadScheduler) {
4047
this.okHttpJsonApiClient = okHttpJsonApiClient;
48+
this.mainThreadScheduler=mainThreadScheduler;
49+
this.ioScheduler=ioScheduler;
4150
}
4251

4352
@Override
@@ -64,8 +73,8 @@ public void getCampaigns() {
6473
return;
6574
}
6675
Single<CampaignResponseDTO> campaigns = okHttpJsonApiClient.getCampaigns();
67-
campaigns.observeOn(AndroidSchedulers.mainThread())
68-
.subscribeOn(Schedulers.io())
76+
campaigns.observeOn(mainThreadScheduler)
77+
.subscribeOn(ioScheduler)
6978
.subscribeWith(new SingleObserver<CampaignResponseDTO>() {
7079

7180
@Override public void onSubscribe(Disposable d) {
@@ -77,6 +86,7 @@ public void getCampaigns() {
7786
if (campaigns == null || campaigns.isEmpty()) {
7887
Timber.e("The campaigns list is empty");
7988
view.showCampaigns(null);
89+
return;
8090
}
8191
Collections.sort(campaigns, (campaign, t1) -> {
8292
Date date1, date2;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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

Comments
 (0)