Unit-Tests for Campaigns (#3258)

This commit is contained in:
Ashish Kumar 2019-12-02 20:11:10 +05:30 committed by Josephine Lim
parent 4150e5fa40
commit 7b9e792efc
2 changed files with 90 additions and 3 deletions

View file

@ -1,7 +1,12 @@
package fr.free.nrw.commons.campaigns; package fr.free.nrw.commons.campaigns;
import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD;
import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import io.reactivex.Scheduler;
import javax.inject.Named;
import org.wikipedia.util.DateUtil; import org.wikipedia.util.DateUtil;
import java.text.ParseException; import java.text.ParseException;
@ -30,14 +35,18 @@ import timber.log.Timber;
@Singleton @Singleton
public class CampaignsPresenter implements BasePresenter<ICampaignsView> { public class CampaignsPresenter implements BasePresenter<ICampaignsView> {
private final OkHttpJsonApiClient okHttpJsonApiClient; private final OkHttpJsonApiClient okHttpJsonApiClient;
private final Scheduler mainThreadScheduler;
private final Scheduler ioScheduler;
private ICampaignsView view; private ICampaignsView view;
private Disposable disposable; private Disposable disposable;
private Campaign campaign; private Campaign campaign;
@Inject @Inject
public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient) { public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient, @Named(IO_THREAD)Scheduler ioScheduler, @Named(MAIN_THREAD)Scheduler mainThreadScheduler) {
this.okHttpJsonApiClient = okHttpJsonApiClient; this.okHttpJsonApiClient = okHttpJsonApiClient;
this.mainThreadScheduler=mainThreadScheduler;
this.ioScheduler=ioScheduler;
} }
@Override @Override
@ -64,8 +73,8 @@ public class CampaignsPresenter implements BasePresenter<ICampaignsView> {
return; return;
} }
Single<CampaignResponseDTO> campaigns = okHttpJsonApiClient.getCampaigns(); Single<CampaignResponseDTO> campaigns = okHttpJsonApiClient.getCampaigns();
campaigns.observeOn(AndroidSchedulers.mainThread()) campaigns.observeOn(mainThreadScheduler)
.subscribeOn(Schedulers.io()) .subscribeOn(ioScheduler)
.subscribeWith(new SingleObserver<CampaignResponseDTO>() { .subscribeWith(new SingleObserver<CampaignResponseDTO>() {
@Override public void onSubscribe(Disposable d) { @Override public void onSubscribe(Disposable d) {
@ -77,6 +86,7 @@ public class CampaignsPresenter implements BasePresenter<ICampaignsView> {
if (campaigns == null || campaigns.isEmpty()) { if (campaigns == null || campaigns.isEmpty()) {
Timber.e("The campaigns list is empty"); Timber.e("The campaigns list is empty");
view.showCampaigns(null); view.showCampaigns(null);
return;
} }
Collections.sort(campaigns, (campaign, t1) -> { Collections.sort(campaigns, (campaign, t1) -> {
Date date1, date2; Date date1, date2;

View file

@ -0,0 +1,77 @@
package fr.free.nrw.commons.campaigns
import com.nhaarman.mockito_kotlin.verify
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient
import io.reactivex.Single
import io.reactivex.schedulers.TestScheduler
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList
class CampaignsPresenterTest {
@Mock
var okHttpJsonApiClient: OkHttpJsonApiClient? = null
lateinit var campaignsPresenter: CampaignsPresenter
@Mock
internal var view: ICampaignsView? = null
@Mock
internal var campaignResponseDTO: CampaignResponseDTO? = null
lateinit var campaignsSingle: Single<CampaignResponseDTO>
@Mock
var campaign: Campaign? = null
lateinit var testScheduler: TestScheduler
/**
* initial setup, test environment
*/
@Before
@Throws(Exception::class)
fun setUp() {
MockitoAnnotations.initMocks(this)
testScheduler=TestScheduler()
campaignsSingle= Single.just(campaignResponseDTO)
campaignsPresenter= CampaignsPresenter(okHttpJsonApiClient,testScheduler,testScheduler)
campaignsPresenter?.onAttachView(view)
Mockito.`when`(okHttpJsonApiClient?.campaigns).thenReturn(campaignsSingle)
}
@Test
fun getCampaignsTestNoCampaigns() {
campaignsPresenter.getCampaigns()
verify(okHttpJsonApiClient)?.campaigns
testScheduler.triggerActions()
verify(view)?.showCampaigns(null)
}
@Test
fun getCampaignsTestNonEmptyCampaigns() {
campaignsPresenter.getCampaigns()
var campaigns= ArrayList<Campaign>()
campaigns.add(campaign!!)
val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT)
simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC")
Mockito.`when`(campaignResponseDTO?.campaigns).thenReturn(campaigns)
var calendar = Calendar.getInstance()
calendar.add(Calendar.DATE,-1)
val startDateString = simpleDateFormat.format(calendar.time).toString()
calendar= Calendar.getInstance()
calendar.add(Calendar.DATE,3)
val endDateString= simpleDateFormat.format(calendar.time).toString()
Mockito.`when`(campaign?.endDate).thenReturn(endDateString)
Mockito.`when`(campaign?.startDate).thenReturn(startDateString)
Mockito.`when`(campaignResponseDTO?.campaigns).thenReturn(campaigns)
verify(okHttpJsonApiClient)?.campaigns
testScheduler.triggerActions()
verify(view)?.showCampaigns(campaign)
}
}