package org.wikipedia.random; import android.support.annotation.NonNull; import com.google.gson.JsonParseException; import org.junit.Test; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.dataclient.restbase.page.RbPageSummary; import org.wikipedia.page.PageTitle; import org.wikipedia.random.RandomSummaryClient.Callback; import org.wikipedia.random.RandomSummaryClient.Service; import org.wikipedia.test.MockWebServerTest; import java.io.IOException; import retrofit2.Call; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; public class RandomSummaryClientTest extends MockWebServerTest { @NonNull private RandomSummaryClient client = new RandomSummaryClient(); @Test public void testRequestEligible() throws Throwable { enqueueFromFile("rb_page_summary_valid.json"); Callback cb = mock(Callback.class); Call<RbPageSummary> call = request(cb); server().takeRequest(); assertCallbackSuccess(call, cb); } @Test public void testRequestMalformed() throws Throwable { enqueueFromFile("rb_page_summary_malformed.json"); Callback cb = mock(Callback.class); Call<RbPageSummary> call = request(cb); server().takeRequest(); assertCallbackFailure(call, cb, JsonParseException.class); } @Test public void testRequestFailure() throws Throwable { enqueue404(); Callback cb = mock(Callback.class); Call<RbPageSummary> call = request(cb); server().takeRequest(); assertCallbackFailure(call, cb, IOException.class); } @NonNull private Call<RbPageSummary> request(@NonNull Callback cb) { return client.request(service(Service.class), WikiSite.forLanguageCode("test"), cb); } private void assertCallbackSuccess(@NonNull Call<RbPageSummary> call, @NonNull Callback cb) { verify(cb).onSuccess(eq(call), any(PageTitle.class)); //noinspection unchecked verify(cb, never()).onError(any(Call.class), any(Throwable.class)); } private void assertCallbackFailure(@NonNull Call<RbPageSummary> call, @NonNull Callback cb, @NonNull Class<? extends Throwable> expectedThrowable) { //noinspection unchecked verify(cb, never()).onSuccess(any(Call.class), any(PageTitle.class)); verify(cb).onError(eq(call), isA(expectedThrowable)); } }