mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Unit-Tests for Campaigns (#3258)
This commit is contained in:
parent
4150e5fa40
commit
7b9e792efc
2 changed files with 90 additions and 3 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue