package org.wikipedia.notifications; import android.support.annotation.NonNull; import org.junit.Test; import org.wikipedia.dataclient.mwapi.MwQueryResponse; import org.wikipedia.json.GsonUnmarshaller; import org.wikipedia.test.MockWebServerTest; import org.wikipedia.test.TestFileUtil; import org.wikipedia.wikidata.EntityClient; 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.Matchers.anyListOf; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; public class NotificationClientTest extends MockWebServerTest { @NonNull private NotificationClient client = NotificationClient.instance(); @Test public void testRequestSuccess() throws Throwable { enqueueFromFile("notifications.json"); NotificationClient.Callback cb = mock(NotificationClient.Callback.class); request(cb); server().takeRequest(); verify(cb).success(anyListOf(Notification.class)); //noinspection unchecked verify(cb, never()).failure(any(Throwable.class)); } @Test public void testRequestMalformed() throws Throwable { server().enqueue("(╯°□°)╯︵ ┻━┻"); NotificationClient.Callback cb = mock(NotificationClient.Callback.class); request(cb); server().takeRequest(); verify(cb, never()).success(anyListOf(Notification.class)); verify(cb).failure(any(Throwable.class)); } @Test public void testNotificationReverted() throws Throwable { String json = TestFileUtil.readRawFile("notification_revert.json"); Notification n = GsonUnmarshaller.unmarshal(Notification.class, json); assertThat(n.type(), is(Notification.TYPE_REVERTED)); assertThat(n.wiki(), is("wikidatawiki")); assertThat(n.agent().name(), is("User1")); assertThat(n.isFromWikidata(), is(true)); } private void request(@NonNull final NotificationClient.Callback cb) { Call<MwQueryResponse<Notification.QueryNotifications>> call = client.requestNotifications((service(NotificationClient.Service.class)), EntityClient.WIKIDATA_WIKI); call.enqueue(new NotificationClient.CallbackAdapter(cb)); } }