Mholloway has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/319132

Change subject: Add RandomSummaryClientTest
......................................................................

Add RandomSummaryClientTest

Bug: T148897
Change-Id: If6c5dcedb8103685b4ace9a1e9d9c473135f35fc
---
M app/src/main/java/org/wikipedia/feed/random/RandomCardView.java
M app/src/main/java/org/wikipedia/random/RandomSummaryClient.java
A app/src/test/java/org/wikipedia/random/RandomSummaryClientTest.java
A app/src/test/res/raw/rb_page_summary_malformed.json
A app/src/test/res/raw/rb_page_summary_valid.json
5 files changed, 115 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/32/319132/1

diff --git a/app/src/main/java/org/wikipedia/feed/random/RandomCardView.java 
b/app/src/main/java/org/wikipedia/feed/random/RandomCardView.java
index 0214130..c9ea810 100644
--- a/app/src/main/java/org/wikipedia/feed/random/RandomCardView.java
+++ b/app/src/main/java/org/wikipedia/feed/random/RandomCardView.java
@@ -38,7 +38,7 @@
         @Override
         public void onClick(View view) {
             if (getCallback() != null && getCard() != null) {
-                new RandomSummaryClient(getCard().wikiSite(), 
serviceCallback).request();
+                new RandomSummaryClient().request(getCard().wikiSite(), 
serviceCallback);
             }
         }
 
diff --git a/app/src/main/java/org/wikipedia/random/RandomSummaryClient.java 
b/app/src/main/java/org/wikipedia/random/RandomSummaryClient.java
index 3aa6d90..26017ff 100644
--- a/app/src/main/java/org/wikipedia/random/RandomSummaryClient.java
+++ b/app/src/main/java/org/wikipedia/random/RandomSummaryClient.java
@@ -2,6 +2,7 @@
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
 
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.dataclient.WikiSite;
@@ -9,7 +10,6 @@
 import org.wikipedia.page.PageTitle;
 import org.wikipedia.server.restbase.RbPageSummary;
 import org.wikipedia.util.log.L;
-import org.wikipedia.zero.WikipediaZeroHandler;
 
 import java.io.IOException;
 
@@ -20,18 +20,15 @@
 public class RandomSummaryClient {
     @NonNull private final RbCachedService<Service> cachedService
             = new RbCachedService<>(Service.class);
-    @NonNull private final WikipediaZeroHandler responseHeaderHandler;
-    @NonNull private WikiSite wiki;
-    @NonNull private Callback cb;
 
-    public RandomSummaryClient(@NonNull WikiSite wiki, @NonNull Callback cb) {
-        this.responseHeaderHandler = 
WikipediaApp.getInstance().getWikipediaZeroHandler();
-        this.wiki = wiki;
-        this.cb = cb;
+    public Call<RbPageSummary> request(@NonNull final WikiSite wiki, @NonNull 
final Callback cb) {
+        return request(cachedService.service(wiki), wiki, cb);
     }
 
-    public void request() {
-        Call<RbPageSummary> call = cachedService.service(wiki).get();
+    @VisibleForTesting Call<RbPageSummary> request(@NonNull Service service,
+                                                   @NonNull final WikiSite 
wiki,
+                                                   @NonNull final Callback cb) 
{
+        Call<RbPageSummary> call = service.get();
         call.enqueue(new retrofit2.Callback<RbPageSummary>() {
             @Override
             public void onResponse(@NonNull Call<RbPageSummary> call,
@@ -41,7 +38,7 @@
                         cb.onSuccess(call, null);
                         return;
                     }
-                    responseHeaderHandler.onHeaderCheck(response);
+                    
WikipediaApp.getInstance().getWikipediaZeroHandler().onHeaderCheck(response);
                     RbPageSummary item = response.body();
                     PageTitle title = new PageTitle(null, item.getTitle(), 
wiki);
                     cb.onSuccess(call, title);
@@ -57,9 +54,10 @@
                 cb.onError(call, t);
             }
         });
+        return call;
     }
 
-    private interface Service {
+    @VisibleForTesting interface Service {
         @GET("page/random/summary")
         @NonNull Call<RbPageSummary> get();
     }
diff --git 
a/app/src/test/java/org/wikipedia/random/RandomSummaryClientTest.java 
b/app/src/test/java/org/wikipedia/random/RandomSummaryClientTest.java
new file mode 100644
index 0000000..b1d9723
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/random/RandomSummaryClientTest.java
@@ -0,0 +1,79 @@
+package org.wikipedia.random;
+
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.junit.Test;
+import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.page.PageTitle;
+import org.wikipedia.random.RandomSummaryClient.Callback;
+import org.wikipedia.random.RandomSummaryClient.Service;
+import org.wikipedia.server.restbase.RbPageSummary;
+import org.wikipedia.test.MockWebServerTest;
+
+import retrofit2.Call;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+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, new PageTitle(null, "Barack Obama",
+                WikiSite.forLanguageCode("test")));
+    }
+
+    @Test public void testRequestMalformed() throws Throwable {
+        enqueueFromFile("rb_page_summary_malformed.json");
+
+        Callback cb = mock(Callback.class);
+        Call<RbPageSummary> call = request(cb);
+
+        server().takeRequest();
+        assertCallbackSuccess(call, cb, null);
+    }
+
+    @Test public void testRequestFailure() throws Throwable {
+        enqueue404();
+
+        Callback cb = mock(Callback.class);
+        Call<RbPageSummary> call = request(cb);
+
+        server().takeRequest();
+        assertCallbackFailure(call, cb);
+    }
+
+    @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,
+                                       @Nullable PageTitle title) {
+        if (title == null) {
+            return;
+        }
+        verify(cb).onSuccess(eq(call), eq(title));
+        //noinspection unchecked
+        verify(cb, never()).onError(any(Call.class), any(Throwable.class));
+    }
+
+    private void assertCallbackFailure(@NonNull Call<RbPageSummary> call,
+                                       @NonNull Callback cb) {
+        //noinspection unchecked
+        verify(cb, never()).onSuccess(any(Call.class), any(PageTitle.class));
+        verify(cb).onError(eq(call), any(Throwable.class));
+    }
+}
diff --git a/app/src/test/res/raw/rb_page_summary_malformed.json 
b/app/src/test/res/raw/rb_page_summary_malformed.json
new file mode 100644
index 0000000..dfd670a
--- /dev/null
+++ b/app/src/test/res/raw/rb_page_summary_malformed.json
@@ -0,0 +1,12 @@
+{
+  "extract": "Barack Hussein Obama II (US /bəˈrɑːk huːˈseɪn oʊˈbɑːmə/; born 
August 4, 1961) is an American politician who is the 44th and current President 
of the United States. He is the first African American to hold the office and 
the first president born outside the continental United States. Born in 
Honolulu, Hawaii, Obama is a graduate of Columbia University and Harvard Law 
School, where he was president of the Harvard Law Review. He was a community 
organizer in Chicago before earning his law degree. He worked as a civil rights 
attorney and taught constitutional law at the University of Chicago Law School 
between 1992 and 2004.",
+  "thumbnail": {
+    "source": 
"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/President_Barack_Obama.jpg/256px-President_Barack_Obama.jpg";,
+    "width": 256,
+    "height": 320
+  },
+  "lang": "en",
+  "dir": "ltr",
+  "timestamp": "2016-11-01T15:48:15Z",
+  "description": "44th President of the United States of America"
+}
\ No newline at end of file
diff --git a/app/src/test/res/raw/rb_page_summary_valid.json 
b/app/src/test/res/raw/rb_page_summary_valid.json
new file mode 100644
index 0000000..a766e60
--- /dev/null
+++ b/app/src/test/res/raw/rb_page_summary_valid.json
@@ -0,0 +1,13 @@
+{
+  "title": "Barack Obama",
+  "extract": "Barack Hussein Obama II (US /bəˈrɑːk huːˈseɪn oʊˈbɑːmə/; born 
August 4, 1961) is an American politician who is the 44th and current President 
of the United States. He is the first African American to hold the office and 
the first president born outside the continental United States. Born in 
Honolulu, Hawaii, Obama is a graduate of Columbia University and Harvard Law 
School, where he was president of the Harvard Law Review. He was a community 
organizer in Chicago before earning his law degree. He worked as a civil rights 
attorney and taught constitutional law at the University of Chicago Law School 
between 1992 and 2004.",
+  "thumbnail": {
+    "source": 
"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/President_Barack_Obama.jpg/256px-President_Barack_Obama.jpg";,
+    "width": 256,
+    "height": 320
+  },
+  "lang": "en",
+  "dir": "ltr",
+  "timestamp": "2016-11-01T15:48:15Z",
+  "description": "44th President of the United States of America"
+}
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/319132
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If6c5dcedb8103685b4ace9a1e9d9c473135f35fc
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to