@Test public void testNoResults() { doReturn(Observable.empty()).when(history).readBuckets(Matchers.any(DataReadRequest.class)); mainPresenter.getFitnessData(); ArgumentCaptor<List> fitnessSessionDataCaptor = ArgumentCaptor.forClass(List.class); verify(mainView, times(1)).onFitnessSessionDataLoaded(fitnessSessionDataCaptor.capture()); assertTrue(fitnessSessionDataCaptor.getValue().isEmpty()); } }
void getFitnessData() { fitnessSessionDataList.clear(); view.showLoading(); DataReadRequest.Builder dataReadRequestBuilder = getDataReadRequestBuilder(); DataReadRequest dataReadRequest = dataReadRequestBuilder.build(); DataReadRequest dataReadRequestServer = dataReadRequestBuilder.enableServerQueries().build(); // First, request all data from the server. If there is an error (e.g. timeout), // switch to normal request disposable.add( rxFit.history().readBuckets(dataReadRequestServer) .doOnError(throwable -> { if(throwable instanceof StatusException && ((StatusException)throwable).getStatus().getStatusCode() == CommonStatusCodes.TIMEOUT) Log.e("MainActivity", "Timeout on server query request", throwable); }) .compose(RxFitOnExceptionResumeNext.with(rxFit.history().readBuckets(dataReadRequest))) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onBucketLoaded, this::onBucketLoadError, () -> view.onFitnessSessionDataLoaded(fitnessSessionDataList)) ); }
@Test public void History_ReadBuckets() throws Exception { ArgumentCaptor<HistoryReadDataSingle> captor = ArgumentCaptor.forClass(HistoryReadDataSingle.class); final DataReadRequest request = Mockito.mock(DataReadRequest.class); rxFit.history().readBuckets(request); rxFit.history().readBuckets(request, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(atLeast(2)); Single.create(captor.capture()); HistoryReadDataSingle single = captor.getAllValues().get(0); assertEquals(request, single.dataReadRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(request, single.dataReadRequest); assertTimeoutSet(single); }