jenkins-bot has submitted this change and it was merged.

Change subject: API client for reading lists, part 1
......................................................................


API client for reading lists, part 1

read only operations:
* get lists
* get pages in a list

Bug: T126750
Change-Id: Ie0b719351e9eaa08716cbfc131fb2e0b5a057b01
---
M app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.java
A app/src/main/java/org/wikipedia/readinglist/api/ReadingList.java
A app/src/main/java/org/wikipedia/readinglist/api/ReadingListDataClient.java
A app/src/main/java/org/wikipedia/readinglist/api/ReadingListPageTitle.java
A app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingList.java
A 
app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitle.java
A 
app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitlesResponse.java
A 
app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListsResponse.java
A app/src/test/java/org/wikipedia/dataclient/RetrofitClientBaseTest.java
A 
app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListPageTitlesTest.java
A 
app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListsTest.java
A app/src/test/res/raw/gather_get_collection_pages.json
A app/src/test/res/raw/gather_get_collections.json
A app/src/test/res/raw/gather_not_logged_in.json
M config/checkstyle.xml
15 files changed, 586 insertions(+), 0 deletions(-)

Approvals:
  Niedzielski: Looks good to me, approved
  jenkins-bot: Verified



diff --git 
a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.java 
b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.java
index 1982a82..179c9aa 100644
--- a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.java
+++ b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResponse.java
@@ -1,17 +1,38 @@
 package org.wikipedia.dataclient.mwapi;
 
+import org.wikipedia.server.mwapi.MwServiceError;
+
 import com.google.gson.annotations.SerializedName;
 
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+
 public class MwQueryResponse<T> {
+    @Nullable
+    private MwServiceError error;
+
     @SerializedName("batchcomplete")
     private boolean batchComplete;
+
+    @Nullable
     private T query;
+
+    @Nullable
+    public MwServiceError getError() {
+        return error;
+    }
 
     public boolean batchComplete() {
         return batchComplete;
     }
 
+    @Nullable
     public T query() {
         return query;
     }
+
+    @VisibleForTesting
+    protected void setQuery(@Nullable T query) {
+        this.query = query;
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/readinglist/api/ReadingList.java 
b/app/src/main/java/org/wikipedia/readinglist/api/ReadingList.java
new file mode 100644
index 0000000..ffc6e1e
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/readinglist/api/ReadingList.java
@@ -0,0 +1,22 @@
+package org.wikipedia.readinglist.api;
+
+/**
+ * A list of pages that are interesting to read later.
+ */
+public interface ReadingList {
+
+    /** @return the ID of this collection */
+    int getId();
+
+    /** @return the user visible label of this collection */
+    String getLabel();
+
+    /** @return the timestamp of when this collection was last updated */
+    String getLastUpdated();
+
+    /** @return the number of pages contained in this collection */
+    int getCount();
+
+    /** @return a link to a thumbnail URL for this collection */
+    String getImageUrl();
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/ReadingListDataClient.java 
b/app/src/main/java/org/wikipedia/readinglist/api/ReadingListDataClient.java
new file mode 100644
index 0000000..aef2853
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/readinglist/api/ReadingListDataClient.java
@@ -0,0 +1,57 @@
+package org.wikipedia.readinglist.api;
+
+import org.wikipedia.Site;
+import 
org.wikipedia.readinglist.api.legacy.LegacyReadingListPageTitlesResponse;
+import org.wikipedia.readinglist.api.legacy.LegacyReadingListsResponse;
+import org.wikipedia.dataclient.RestAdapterFactory;
+
+import retrofit.http.GET;
+import retrofit.http.Query;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
+
+/**
+ * Gets and posts collection related data from and to the server.
+ */
+public class ReadingListDataClient {
+    private static final Site SITE = new Site("en.wikipedia.org");
+
+    @NonNull private final Api client;
+
+    public ReadingListDataClient() {
+        client = RestAdapterFactory.newInstance(SITE).create(Api.class);
+    }
+
+    @VisibleForTesting
+    public ReadingListDataClient(String baseUrl) {
+        client = RestAdapterFactory.newInstance(SITE, 
baseUrl).create(Api.class);
+    }
+
+    /**
+     * Gets the Collections of the current user.
+     */
+    public LegacyReadingListsResponse getReadingLists() {
+        return client.getReadingLists();
+    }
+
+    /**
+     * Gets the list of page titles of a single ReadingList of the current 
user.
+     *
+     * @param listId ID of the reading list to be retrieved
+     */
+    public LegacyReadingListPageTitlesResponse getMemberPages(int listId) {
+        return client.getMemberPages(listId);
+    }
+
+    private interface Api {
+        String ACTION_QUERY_LIST = 
"/w/api.php?format=json&formatversion=2&action=query&list=";
+
+        @GET(ACTION_QUERY_LIST + "lists"
+                + 
"&lstprop=label%7Cdescription%7Cpublic%7Creview%7Cimage%7Ccount%7Cupdated%7Cowner")
+        LegacyReadingListsResponse getReadingLists();
+
+        @GET(ACTION_QUERY_LIST + "listpages")
+        LegacyReadingListPageTitlesResponse getMemberPages(@Query("lspid") int 
collectionId);
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/ReadingListPageTitle.java 
b/app/src/main/java/org/wikipedia/readinglist/api/ReadingListPageTitle.java
new file mode 100644
index 0000000..ec3065b
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/readinglist/api/ReadingListPageTitle.java
@@ -0,0 +1,8 @@
+package org.wikipedia.readinglist.api;
+
+/**
+ * An entry in a collection representing a page title in a reading list.
+ */
+public interface ReadingListPageTitle {
+    String getPrefixedTitle();
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingList.java 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingList.java
new file mode 100644
index 0000000..cf4857e
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingList.java
@@ -0,0 +1,58 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.readinglist.api.ReadingList;
+
+import com.google.gson.annotations.SerializedName;
+
+import android.support.annotation.VisibleForTesting;
+
+/**
+ * Gson POJO for an API specific {@link ReadingList}.
+ */
+public class LegacyReadingList implements ReadingList {
+    @VisibleForTesting int id;
+    @VisibleForTesting String label;
+    @VisibleForTesting String owner;
+    @VisibleForTesting String perm;
+    @VisibleForTesting String description;
+    @VisibleForTesting String updated;
+    @VisibleForTesting int count;
+    @VisibleForTesting @SerializedName("imageurl") String imageUrl;
+
+    @Override
+    public int getId() {
+        return id;
+    }
+
+    @Override
+    public String getLabel() {
+        return label;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public String getPerm() {
+        return perm;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public String getLastUpdated() {
+        return updated;
+    }
+
+    @Override
+    public int getCount() {
+        return count;
+    }
+
+    @Override
+    public String getImageUrl() {
+        return imageUrl;
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitle.java
 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitle.java
new file mode 100644
index 0000000..9acba37
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitle.java
@@ -0,0 +1,24 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.readinglist.api.ReadingListPageTitle;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * Gson POJO for a member of a reading list.
+ */
+public class LegacyReadingListPageTitle implements ReadingListPageTitle {
+    @SerializedName("ns")
+    private int namespaceId;
+    @SerializedName("title")
+    private String prefixedTitle;
+
+    public int getNamespaceId() {
+        return namespaceId;
+    }
+
+    @Override
+    public String getPrefixedTitle() {
+        return prefixedTitle;
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitlesResponse.java
 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitlesResponse.java
new file mode 100644
index 0000000..563c72e
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListPageTitlesResponse.java
@@ -0,0 +1,24 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.dataclient.mwapi.MwQueryResponse;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.util.List;
+
+/**
+ * Gson POJO for the specific API response we get after requesting the list of 
page titles
+ * contained in a given reading list.
+ */
+public class LegacyReadingListPageTitlesResponse
+        extends MwQueryResponse<LegacyReadingListPageTitlesResponse.ListPages> 
{
+
+    public static class ListPages {
+        @SerializedName("listpages")
+        private List<LegacyReadingListPageTitle> listPages;
+
+        public List<LegacyReadingListPageTitle> getMemberPages() {
+            return listPages;
+        }
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListsResponse.java
 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListsResponse.java
new file mode 100644
index 0000000..492034c
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/readinglist/api/legacy/LegacyReadingListsResponse.java
@@ -0,0 +1,24 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.dataclient.mwapi.MwQueryResponse;
+
+import com.google.gson.annotations.SerializedName;
+
+import android.support.annotation.VisibleForTesting;
+
+import java.util.List;
+
+/**
+ * Gson POJO for a list of API specific reading lists.
+ */
+public class LegacyReadingListsResponse
+        extends MwQueryResponse<LegacyReadingListsResponse.LegacyLists> {
+
+    public static class LegacyLists {
+        @VisibleForTesting @SerializedName("lists") List<LegacyReadingList> 
lists;
+
+        public List<LegacyReadingList> getLists() {
+            return lists;
+        }
+    }
+}
diff --git 
a/app/src/test/java/org/wikipedia/dataclient/RetrofitClientBaseTest.java 
b/app/src/test/java/org/wikipedia/dataclient/RetrofitClientBaseTest.java
new file mode 100644
index 0000000..6ee553f
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/dataclient/RetrofitClientBaseTest.java
@@ -0,0 +1,50 @@
+package org.wikipedia.dataclient;
+
+import org.wikipedia.readinglist.api.ReadingListDataClient;
+import org.wikipedia.test.TestWebServer;
+
+import org.junit.After;
+import org.junit.Before;
+
+import android.support.annotation.NonNull;
+
+/**
+ * A base class for test cases of Retrofit clients using the MockWebServer.
+ */
+public abstract class RetrofitClientBaseTest {
+    private TestWebServer server = new TestWebServer();
+
+    @Before
+    public void setUp() throws Exception {
+        server.setUp();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        server.tearDown();
+    }
+
+    protected void runTest(String responseBody, BaseTestSubject subject)
+            throws InterruptedException {
+
+        server.enqueue(responseBody);
+        subject.execute();
+        server.takeRequest();
+    }
+
+    protected abstract class BaseTestSubject {
+        @NonNull
+        private final ReadingListDataClient client;
+
+        @NonNull
+        public ReadingListDataClient getClient() {
+            return client;
+        }
+
+        public abstract void execute();
+
+        protected BaseTestSubject() {
+            client = new ReadingListDataClient(server.getUrl("/").toString());
+        }
+    }
+}
diff --git 
a/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListPageTitlesTest.java
 
b/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListPageTitlesTest.java
new file mode 100644
index 0000000..a8c28c9
--- /dev/null
+++ 
b/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListPageTitlesTest.java
@@ -0,0 +1,119 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.dataclient.RetrofitClientBaseTest;
+import org.wikipedia.test.TestFileUtil;
+import org.wikipedia.test.TestRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import android.support.annotation.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(TestRunner.class)
+public class GetLegacyReadingListPageTitlesTest extends RetrofitClientBaseTest 
{
+    private static final int WATCHLIST_ID = 0;
+
+    @Test
+    public void testGetCollectionPagesNotLoggedIn() throws Exception {
+        
getCollectionPages(TestFileUtil.readRawFile("gather_not_logged_in.json"), null);
+    }
+
+    @Test
+    public void testCollectionPages() throws Exception {
+        MockLegacyReadingListPageTitlesResponse expected = new 
MockLegacyReadingListPageTitlesResponse();
+        List<LegacyReadingListPageTitle> list = new ArrayList<>();
+        list.add(new MockLegacyReadingListPageTitle(0, "Test"));
+        list.add(new MockLegacyReadingListPageTitle(1, "Talk:Test"));
+        expected.setQuery(new MockPageTitlesList(list));
+
+        
getCollectionPages(TestFileUtil.readRawFile("gather_get_collection_pages.json"),
+                expected);
+    }
+
+    private void getCollectionPages(String responseBody,
+                                    @Nullable 
LegacyReadingListPageTitlesResponse expected)
+            throws Exception {
+        runTest(responseBody, new GetCollectionPagesSubject(expected));
+    }
+
+    private class GetCollectionPagesSubject extends BaseTestSubject {
+        @Nullable
+        private final LegacyReadingListPageTitlesResponse expected;
+
+        GetCollectionPagesSubject(@Nullable 
LegacyReadingListPageTitlesResponse expected) {
+            super();
+            this.expected = expected;
+        }
+
+        public void execute() {
+            LegacyReadingListPageTitlesResponse actual = 
getClient().getMemberPages(WATCHLIST_ID);
+            if (expected != null) {
+                List<LegacyReadingListPageTitle> act = 
actual.query().getMemberPages();
+                List<LegacyReadingListPageTitle> exp = 
expected.query().getMemberPages();
+                assertThat(act.size(), is(exp.size()));
+                for (int i = 0; i < act.size(); i++) {
+                    assertPageIsEqual(act.get(i), exp.get(i), i);
+                }
+            } else {
+                assertThat(actual.getError().getTitle(), is("lstnotloggedin"));
+            }
+        }
+
+        private void assertPageIsEqual(LegacyReadingListPageTitle act, 
LegacyReadingListPageTitle exp,
+                                       int index) {
+            assertThat("namespaceId mismatch in index " + index,
+                    act.getNamespaceId(), is(exp.getNamespaceId()));
+            assertThat("title mismatch in index " + index,
+                    act.getPrefixedTitle(), is(exp.getPrefixedTitle()));
+        }
+    }
+
+    /** This class was added to allow accessing #setQuery from this test. */
+    private static final class MockLegacyReadingListPageTitlesResponse
+            extends LegacyReadingListPageTitlesResponse {
+        @Override
+        protected void setQuery(@Nullable 
LegacyReadingListPageTitlesResponse.ListPages query) {
+            super.setQuery(query);
+        }
+    }
+
+    private static final class MockPageTitlesList
+            extends LegacyReadingListPageTitlesResponse.ListPages {
+
+        private final List<LegacyReadingListPageTitle> mockList;
+
+        private MockPageTitlesList(List<LegacyReadingListPageTitle> list) {
+            this.mockList = list;
+        }
+
+        public List<LegacyReadingListPageTitle> getMemberPages() {
+            return mockList;
+        }
+    }
+
+    private static final class MockLegacyReadingListPageTitle extends 
LegacyReadingListPageTitle {
+        private final int mockNamespaceId;
+        private final String mockTitle;
+
+        MockLegacyReadingListPageTitle(int nameSpaceId, String prefixedTitle) {
+            mockNamespaceId = nameSpaceId;
+            mockTitle = prefixedTitle;
+        }
+
+        @Override
+        public int getNamespaceId() {
+            return mockNamespaceId;
+        }
+
+        @Override
+        public String getPrefixedTitle() {
+            return mockTitle;
+        }
+    }
+}
diff --git 
a/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListsTest.java
 
b/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListsTest.java
new file mode 100644
index 0000000..d8b6122
--- /dev/null
+++ 
b/app/src/test/java/org/wikipedia/readinglist/api/legacy/GetLegacyReadingListsTest.java
@@ -0,0 +1,124 @@
+package org.wikipedia.readinglist.api.legacy;
+
+import org.wikipedia.dataclient.RetrofitClientBaseTest;
+import org.wikipedia.test.TestFileUtil;
+import org.wikipedia.test.TestRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import android.support.annotation.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(TestRunner.class)
+public class GetLegacyReadingListsTest extends RetrofitClientBaseTest {
+
+    private static final int LIST_ID = 11;
+    private static final int COUNT = 4;
+
+    @Test
+    public void testGetCollectionsNotLoggedIn() throws Exception {
+        getCollections(TestFileUtil.readRawFile("gather_not_logged_in.json"), 
null);
+    }
+
+    @Test
+    public void testGetCollections() throws Exception {
+        MockLegacyReadingListsResponse expected = new 
MockLegacyReadingListsResponse();
+        List<LegacyReadingList> lists = new ArrayList<>();
+
+        LegacyReadingList collection1 = new MockLegacyReadingList(0, 
"Watchlist",
+                "someUser", "private", "", "2016-02-19T00:05:07Z", 1);
+        lists.add(collection1);
+
+        MockLegacyReadingList collection2 = new MockLegacyReadingList(LIST_ID, 
"firstlist",
+                "someUser", "public", "a simple test list", 
"2016-01-06T20:19:58Z", COUNT);
+        
collection2.setImageUrl("//upload.wikimedia.org/wikipedia/commons/7/79/sample_picture.jpg");
+        lists.add(collection2);
+        expected.setQuery(new MockResponseList(lists));
+
+        
getCollections(TestFileUtil.readRawFile("gather_get_collections.json"), 
expected);
+    }
+
+    private void getCollections(String responseBody, @Nullable 
LegacyReadingListsResponse expected)
+            throws Exception {
+        runTest(responseBody, new GetCollectionsSubject(expected));
+    }
+
+    private class GetCollectionsSubject extends BaseTestSubject {
+        @Nullable
+        private final LegacyReadingListsResponse expected;
+
+        GetCollectionsSubject(@Nullable LegacyReadingListsResponse expected) {
+            super();
+            this.expected = expected;
+        }
+
+        public void execute() {
+            LegacyReadingListsResponse actual = getClient().getReadingLists();
+            if (expected != null) {
+                List<LegacyReadingList> act = actual.query().getLists();
+                List<LegacyReadingList> exp = expected.query().getLists();
+                assertThat(act.size(), is(exp.size()));
+                for (int i = 0; i < act.size(); i++) {
+                    assertThatCollectionsAreEqual(act.get(i), exp.get(i), i);
+                }
+            } else {
+                assertThat(actual.getError().getTitle(), is("lstnotloggedin"));
+            }
+        }
+
+        private void assertThatCollectionsAreEqual(LegacyReadingList act, 
LegacyReadingList exp,
+                                                   int index) {
+            assertThat("index " + index, act.getId(), is(exp.getId()));
+            assertThat("index " + index, act.getLabel(), is(exp.getLabel()));
+            assertThat("index " + index, act.getOwner(), is(exp.getOwner()));
+            assertThat("index " + index, act.getPerm(), is(exp.getPerm()));
+            assertThat("index " + index, act.getDescription(), 
is(exp.getDescription()));
+            assertThat("index " + index, act.getLastUpdated(), 
is(exp.getLastUpdated()));
+            assertThat("index " + index, act.getCount(), is(exp.getCount()));
+            assertThat("index " + index, act.getImageUrl(), 
is(exp.getImageUrl()));
+        }
+    }
+
+    /** This class was added to allow accessing #setQuery from this test. */
+    private static final class MockLegacyReadingListsResponse extends 
LegacyReadingListsResponse {
+        @Override
+        protected void setQuery(@Nullable LegacyLists query) {
+            super.setQuery(query);
+        }
+    }
+
+    private static final class MockResponseList extends 
LegacyReadingListsResponse.LegacyLists {
+        private final List<LegacyReadingList> mockList;
+
+        MockResponseList(List<LegacyReadingList> list) {
+            this.mockList = list;
+        }
+
+        public List<LegacyReadingList> getLists() {
+            return mockList;
+        }
+    }
+
+    private static final class MockLegacyReadingList extends LegacyReadingList 
{
+        MockLegacyReadingList(int id, String label, String owner, String perm, 
String description,
+                              String updated, int count) {
+            this.id = id;
+            this.label = label;
+            this.owner = owner;
+            this.perm = perm;
+            this.description = description;
+            this.updated = updated;
+            this.count = count;
+        }
+
+        void setImageUrl(String imageUrl) {
+            this.imageUrl = imageUrl;
+        }
+    }
+}
diff --git a/app/src/test/res/raw/gather_get_collection_pages.json 
b/app/src/test/res/raw/gather_get_collection_pages.json
new file mode 100644
index 0000000..c4a26b6
--- /dev/null
+++ b/app/src/test/res/raw/gather_get_collection_pages.json
@@ -0,0 +1,15 @@
+{
+  "batchcomplete": "",
+  "query": {
+    "listpages": [
+      {
+        "ns": 0,
+        "title": "Test"
+      },
+      {
+        "ns": 1,
+        "title": "Talk:Test"
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/app/src/test/res/raw/gather_get_collections.json 
b/app/src/test/res/raw/gather_get_collections.json
new file mode 100644
index 0000000..68d1a2d
--- /dev/null
+++ b/app/src/test/res/raw/gather_get_collections.json
@@ -0,0 +1,31 @@
+{
+  "batchcomplete": true,
+  "query": {
+    "lists": [
+      {
+        "id": 0,
+        "watchlist": true,
+        "label": "Watchlist",
+        "owner": "someUser",
+        "perm": "private",
+        "description": "",
+        "image": false,
+        "updated": "2016-02-19T00:05:07Z",
+        "count": 1
+      },
+      {
+        "id": 11,
+        "label": "firstlist",
+        "owner": "someUser",
+        "perm": "public",
+        "description": "a simple test list",
+        "image": "sample_picture",
+        "imageurl": 
"//upload.wikimedia.org/wikipedia/commons/7/79/sample_picture.jpg",
+        "imagewidth": 1402,
+        "imageheight": 830,
+        "updated": "2016-01-06T20:19:58Z",
+        "count": 4
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/app/src/test/res/raw/gather_not_logged_in.json 
b/app/src/test/res/raw/gather_not_logged_in.json
new file mode 100644
index 0000000..82ace44
--- /dev/null
+++ b/app/src/test/res/raw/gather_not_logged_in.json
@@ -0,0 +1,8 @@
+{
+  "servedby": "mw1205",
+  "error": {
+    "code": "lstnotloggedin",
+    "info": "You must be logged-in or use owner and/or ids parameters",
+    "*": "See https://en.wikipedia.org/w/api.php for API usage"
+  }
+}
\ No newline at end of file
diff --git a/config/checkstyle.xml b/config/checkstyle.xml
index f64a3d7..3e11928 100644
--- a/config/checkstyle.xml
+++ b/config/checkstyle.xml
@@ -170,6 +170,7 @@
 
             <!-- Testing -->
             <property name="ignoreAnnotationCanonicalNames" value="Rule" />
+            <property name="ignoreAnnotationCanonicalNames" 
value="VisibleForTesting" />
         </module>
         <!-- Miscellaneous other checks.                   -->
         <!-- See http://checkstyle.sf.net/config_misc.html -->

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie0b719351e9eaa08716cbfc131fb2e0b5a057b01
Gerrit-PatchSet: 7
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to