Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ClaudeHangui/7cc811b179e70f942da0deb5c9f913a8 to your computer and use it in GitHub Desktop.
Save ClaudeHangui/7cc811b179e70f942da0deb5c9f913a8 to your computer and use it in GitHub Desktop.
Unit test for repository which provides payment methods
package com.changui.payoneerhomeexercise;
import com.changui.payoneerhomeexercise.data.ApiService;
import com.changui.payoneerhomeexercise.data.GetPaymentMethodsMapper;
import com.changui.payoneerhomeexercise.data.PaymentMethodRepositoryImpl;
import com.changui.payoneerhomeexercise.data.apiresponse.PaymentMethodsApiResponse;
import com.changui.payoneerhomeexercise.domain.PaymentMethodUIModel;
import com.changui.payoneerhomeexercise.domain.SchedulersFacade;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.io.IOException;
import java.util.List;
import io.reactivex.Single;
import io.reactivex.observers.TestObserver;
import io.reactivex.schedulers.TestScheduler;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
class PaymentMethodRepositoryImplTest {
@Mock private ApiService mockApiService;
@Mock private GetPaymentMethodsMapper mockPaymentMethodsMapper;
@Mock private SchedulersFacade mockSchedulersFacade;
private PaymentMethodRepositoryImpl paymentMethodRepository;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
paymentMethodRepository = new PaymentMethodRepositoryImpl(mockApiService, mockPaymentMethodsMapper, mockSchedulersFacade);
}
@Test
@DisplayName("Verify api call returns an api response")
void verifyApiCallReturnsResponse() throws IOException {
TestObserver<List<PaymentMethodUIModel>> resultTestObserver;
PaymentMethodsApiResponse apiResponse = Utils.getApiResponse();
List<PaymentMethodUIModel> actualPaymentMethodUIModels = Utils.getMethods().subList(0, 2);
TestScheduler ioTestScheduler = new TestScheduler();
doReturn(ioTestScheduler).when(mockSchedulersFacade).provideIO();
TestScheduler mainTestScheduler = new TestScheduler();
doReturn(mainTestScheduler).when(mockSchedulersFacade).provideUIThread();
doReturn(Single.just(apiResponse)).when(mockApiService).getPaymentMethods();
resultTestObserver = paymentMethodRepository.getPaymentMethods().test();
resultTestObserver.assertNotTerminated() // not compulsory, but STRONGLY recommended
.assertNoErrors()
.assertValueCount(0); // "time" hasn't started so no value expected
verify(mockApiService, times(1)).getPaymentMethods();
verify(mockSchedulersFacade, times(1)).provideIO();
verify(mockSchedulersFacade, times(1)).provideUIThread();
resultTestObserver.dispose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment