package org.wikipedia.wikidata;
import android.support.annotation.NonNull;
import org.junit.Test;
import org.wikipedia.json.GsonUnmarshaller;
import org.wikipedia.test.MockWebServerTest;
import org.wikipedia.test.TestFileUtil;
import retrofit2.Call;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
public class EntityClientTest extends MockWebServerTest {
@NonNull private EntityClient client = EntityClient.instance();
@Test public void testRequestLabelSuccess() throws Throwable {
enqueueFromFile("wikidata_entity_label.json");
EntityClient.LabelCallback cb = mock(EntityClient.LabelCallback.class);
request(cb, "Q123", "en");
server().takeRequest();
verify(cb).success(any(String.class));
//noinspection unchecked
verify(cb, never()).failure(any(Throwable.class));
}
@Test public void testRequestResponseApiError() throws Throwable {
enqueueFromFile("api_error.json");
EntityClient.LabelCallback cb = mock(EntityClient.LabelCallback.class);
request(cb, "Q123", "en");
server().takeRequest();
verify(cb, never()).success(any(String.class));
verify(cb).failure(any(Throwable.class));
}
@Test public void testRequestLabelInvalidLang() throws Throwable {
enqueueFromFile("wikidata_entity_label.json");
EntityClient.LabelCallback cb = mock(EntityClient.LabelCallback.class);
request(cb, "Q123", "ru");
server().takeRequest();
verify(cb, never()).success(any(String.class));
verify(cb).failure(any(Throwable.class));
}
@Test public void testRequestLabelInvalidEntity() throws Throwable {
enqueueFromFile("wikidata_entity_label_invalid_entity.json");
EntityClient.LabelCallback cb = mock(EntityClient.LabelCallback.class);
request(cb, "Q123", "en");
server().takeRequest();
verify(cb, never()).success(any(String.class));
verify(cb).failure(any(Throwable.class));
}
@Test public void testRequestMalformed() throws Throwable {
server().enqueue("(╯°□°)╯︵ ┻━┻");
EntityClient.LabelCallback cb = mock(EntityClient.LabelCallback.class);
request(cb, "Q123", "en");
server().takeRequest();
verify(cb, never()).success(any(String.class));
verify(cb).failure(any(Throwable.class));
}
@Test public void testLabel() throws Throwable {
String json = TestFileUtil.readRawFile("wikidata_entity_label.json");
Entity.EntitiesResponse response
= GsonUnmarshaller.unmarshal(Entity.EntitiesResponse.class, json);
Entity entity = response.entities().get("Q123");
assertThat(entity.id(), is("Q123"));
assertThat(entity.labels().get("en").value(), is("September"));
}
private void request(@NonNull final EntityClient.LabelCallback cb,
@NonNull final String qNumber, @NonNull final String langCode) {
Call<Entity.EntitiesResponse> call
= client.requestLabels(service(EntityClient.Service.class), qNumber, langCode);
call.enqueue(new EntityClient.LabelCallbackAdapter(cb, qNumber, langCode));
}
}