jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/395602 )

Change subject: OnThisDay endpoint change
......................................................................


OnThisDay endpoint change

- Deriving the response from aggregate feed response instead of a separate call.

Change-Id: Iffdb689fe39bff45e436c90dac09d1a2ec62fef2
---
M app/src/main/java/org/wikipedia/feed/FeedContentType.java
M app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java
M 
app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java
M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java
M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java
D app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java
M app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java
A app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java
D app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java
9 files changed, 78 insertions(+), 199 deletions(-)

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



diff --git a/app/src/main/java/org/wikipedia/feed/FeedContentType.java 
b/app/src/main/java/org/wikipedia/feed/FeedContentType.java
index ed4f258..1055752 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedContentType.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedContentType.java
@@ -10,7 +10,6 @@
 import org.wikipedia.feed.continuereading.ContinueReadingClient;
 import org.wikipedia.feed.dataclient.FeedClient;
 import org.wikipedia.feed.mainpage.MainPageClient;
-import org.wikipedia.feed.onthisday.OnThisDayClient;
 import org.wikipedia.feed.random.RandomClient;
 import org.wikipedia.model.EnumCode;
 import org.wikipedia.model.EnumCodeMap;
@@ -31,7 +30,7 @@
         @Nullable
         @Override
         public FeedClient newClient(AggregatedFeedContentClient 
aggregatedClient, int age, boolean isOnline) {
-            return isEnabled() && isOnline ? new OnThisDayClient() : null;
+            return isEnabled() && isOnline ? new 
AggregatedFeedContentClient.OnThisDayFeed(aggregatedClient) : null;
         }
     },
     CONTINUE_READING(2, R.string.view_continue_reading_card_title, 
R.string.feed_item_type_continue_reading) {
diff --git 
a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java 
b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java
index 0f10615..0a17056 100644
--- a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java
+++ b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContent.java
@@ -8,6 +8,7 @@
 import org.wikipedia.feed.image.FeaturedImage;
 import org.wikipedia.feed.mostread.MostReadArticles;
 import org.wikipedia.feed.news.NewsItem;
+import org.wikipedia.feed.onthisday.OnThisDay;
 
 import java.util.List;
 
@@ -16,6 +17,14 @@
     @SuppressWarnings("unused") @Nullable private List<NewsItem> news;
     @SuppressWarnings("unused") @SerializedName("mostread") @Nullable private 
MostReadArticles mostRead;
     @SuppressWarnings("unused") @Nullable private FeaturedImage image;
+    @SuppressWarnings("unused") @Nullable private List<OnThisDay.Event> 
onthisday;
+
+
+    @Nullable
+    public List<OnThisDay.Event> onthisday() {
+        return onthisday;
+    }
+
 
     @Nullable
     RbPageSummary tfa() {
diff --git 
a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java
 
b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java
index dbfec05..a15db7a 100644
--- 
a/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java
+++ 
b/app/src/main/java/org/wikipedia/feed/aggregated/AggregatedFeedContentClient.java
@@ -13,6 +13,8 @@
 import org.wikipedia.feed.model.UtcDate;
 import org.wikipedia.feed.mostread.MostReadListCard;
 import org.wikipedia.feed.news.NewsListCard;
+import org.wikipedia.feed.onthisday.OnThisDay;
+import org.wikipedia.feed.onthisday.OnThisDayCard;
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.util.DateUtil;
 import org.wikipedia.util.log.L;
@@ -35,6 +37,23 @@
     @Nullable private AggregatedFeedContent aggregatedResponse;
     private int aggregatedResponseAge = -1;
 
+    public static class OnThisDayFeed extends BaseClient {
+        public OnThisDayFeed(@NonNull AggregatedFeedContentClient 
aggregatedClient) {
+            super(aggregatedClient);
+        }
+
+        @Override
+        void getCardFromResponse(@NonNull AggregatedFeedContent content, 
@NonNull WikiSite wiki,
+                                 int age, @NonNull List<Card> outCards) {
+            if (content.onthisday() != null) {
+                List<OnThisDay.Event> selectedEvents = content.onthisday();
+                OnThisDay onThisDay = new OnThisDay();
+                onThisDay.setSelected(selectedEvents);
+                OnThisDayCard card = new OnThisDayCard(onThisDay, wiki, age);
+                outCards.add(card);
+            }
+        }
+    }
     public static class InTheNews extends BaseClient {
         public InTheNews(@NonNull AggregatedFeedContentClient 
aggregatedClient) {
             super(aggregatedClient);
diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java
index c9dde84..7a3d255 100644
--- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java
+++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDay.java
@@ -43,7 +43,7 @@
         return allEvents;
     }
 
-    static class Event {
+    public static class Event {
         @SuppressWarnings("unused,NullableProblems") @Required @NonNull 
private String text;
         @SuppressWarnings("unused") private int year;
         @SuppressWarnings("unused,NullableProblems") @Required @NonNull 
private List<RbPageSummary> pages;
@@ -72,4 +72,9 @@
             return pages;
         }
     }
+
+    public void setSelected(@Nullable List<Event> selected) {
+        this.selected = selected;
+    }
+
 }
diff --git a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java
index bb265e8..5b1c11b 100644
--- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java
+++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayCard.java
@@ -14,6 +14,7 @@
 
 import java.util.Calendar;
 import java.util.List;
+import java.util.Random;
 
 public class OnThisDayCard extends Card {
     private int nextYear;
@@ -24,12 +25,13 @@
     private OnThisDay.Event eventShownOnCard;
     private int age;
 
-    OnThisDayCard(@NonNull OnThisDay onThisDay, @NonNull OnThisDay.Event 
event, int nextYear, @NonNull Calendar date, @NonNull WikiSite wiki, int age) {
+    public OnThisDayCard(@NonNull OnThisDay onThisDay, @NonNull WikiSite wiki, 
int age) {
         super();
         this.onThisDay = onThisDay;
-        eventShownOnCard = event;
-        this.date = date;
-        this.nextYear = nextYear;
+        int randomIndex = new 
Random().nextInt(onThisDay.selectedEvents().size() - 1);
+        eventShownOnCard = onThisDay.selectedEvents().get(randomIndex);
+        this.date = DateUtil.getDefaultDateFor(age);
+        this.nextYear = onThisDay.selectedEvents().get(randomIndex + 1).year();
         this.wiki = wiki;
         this.age = age;
     }
diff --git 
a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java
deleted file mode 100644
index 0e43382..0000000
--- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayClient.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.wikipedia.feed.onthisday;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-
-import org.wikipedia.dataclient.WikiSite;
-import org.wikipedia.dataclient.retrofit.RetrofitFactory;
-import org.wikipedia.feed.dataclient.FeedClient;
-import org.wikipedia.feed.model.Card;
-import org.wikipedia.settings.Prefs;
-import org.wikipedia.util.DateUtil;
-import org.wikipedia.util.log.L;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Locale;
-import java.util.Random;
-
-import retrofit2.Call;
-import retrofit2.Response;
-import retrofit2.Retrofit;
-import retrofit2.http.GET;
-import retrofit2.http.Path;
-
-public class OnThisDayClient implements FeedClient {
-    @Nullable private Call<OnThisDay> call;
-
-    @Override
-    public void request(@NonNull Context context, @NonNull WikiSite wiki, int 
age, @NonNull FeedClient.Callback cb) {
-        Calendar today = DateUtil.getDefaultDateFor(age);
-        String endpoint = String.format(Locale.ROOT, 
Prefs.getRestbaseUriFormat(), wiki.scheme(),
-                wiki.authority());
-        Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki);
-        OnThisDayClient.Service service = retrofit.create(Service.class);
-        call = service.getSelectedEvent(today.get(Calendar.MONTH) + 1, 
today.get(Calendar.DATE));
-        call.enqueue(new CallbackAdapter(cb, today, wiki, age));
-    }
-
-    public Call<OnThisDay> request(@NonNull WikiSite wiki, int month, int 
date) {
-        String endpoint = String.format(Locale.ROOT, 
Prefs.getRestbaseUriFormat(), wiki.scheme(),
-                wiki.authority());
-        Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki);
-        OnThisDayClient.Service service = retrofit.create(Service.class);
-        return service.getAllOtdEvents(month, date);
-    }
-
-    @Override
-    public void cancel() {
-        if (call == null) {
-            return;
-        }
-        call.cancel();
-        call = null;
-    }
-
-    static class CallbackAdapter implements retrofit2.Callback<OnThisDay> {
-        @NonNull private final FeedClient.Callback cb;
-        private Calendar today;
-        private WikiSite wiki;
-        private int age;
-
-        CallbackAdapter(@NonNull FeedClient.Callback cb, Calendar today, 
WikiSite wiki, int age) {
-            this.cb = cb;
-            this.today = today;
-            this.wiki = wiki;
-            this.age = age;
-        }
-
-        @Override
-        public void onResponse(@NonNull Call<OnThisDay> call,
-                               @NonNull Response<OnThisDay> response) {
-            List<Card> cards = new ArrayList<>();
-            OnThisDay onThisDay = response.body();
-            if (onThisDay == null || onThisDay.selectedEvents().size() <= 1) {
-                cb.error(new RuntimeException("Incorrect response format."));
-                return;
-            }
-            int randomIndex = new 
Random().nextInt(onThisDay.selectedEvents().size() - 1);
-            OnThisDay.Event event = 
onThisDay.selectedEvents().get(randomIndex);
-            OnThisDayCard card = new OnThisDayCard(onThisDay, event, 
onThisDay.selectedEvents().get(randomIndex + 1).year(), today, wiki, age);
-            cards.add(card);
-            cb.success(cards);
-        }
-
-        @Override
-        public void onFailure(@NonNull Call<OnThisDay> call, @NonNull 
Throwable caught) {
-            L.v(caught);
-            cb.error(caught);
-        }
-    }
-
-    @VisibleForTesting
-    interface Service {
-        @NonNull
-        @GET("feed/onthisday/selected/{mm}/{dd}")
-        Call<OnThisDay> getSelectedEvent(@Path("mm") int month,
-                                         @Path("dd") int day);
-
-        @NonNull
-        @GET("feed/onthisday/events/{mm}/{dd}")
-        Call<OnThisDay> getAllOtdEvents(@Path("mm") int month,
-                                        @Path("dd") int day);
-    }
-
-    @VisibleForTesting
-    @NonNull
-    Call<OnThisDay> request(@NonNull Service service, int mon, int day) {
-        return service.getSelectedEvent(mon, day);
-    }
-}
diff --git 
a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java
index 24c6819..19fc78e 100644
--- a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFragment.java
@@ -131,7 +131,7 @@
         eventsRecycler.setVisibility(View.GONE);
         errorView.setVisibility(View.GONE);
 
-        new 
OnThisDayClient().request(WikipediaApp.getInstance().getWikiSite(), month + 1, 
date).enqueue(new Callback<OnThisDay>() {
+        new 
OnThisDayFullListClient().request(WikipediaApp.getInstance().getWikiSite(), 
month + 1, date).enqueue(new Callback<OnThisDay>() {
             @Override
             public void onResponse(@NonNull Call<OnThisDay> call, @NonNull 
Response<OnThisDay> response) {
                 if (!isAdded()) {
diff --git 
a/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java
new file mode 100644
index 0000000..cdc65f4
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/feed/onthisday/OnThisDayFullListClient.java
@@ -0,0 +1,36 @@
+package org.wikipedia.feed.onthisday;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+
+import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.dataclient.retrofit.RetrofitFactory;
+import org.wikipedia.settings.Prefs;
+
+import java.util.Locale;
+
+import retrofit2.Call;
+import retrofit2.Retrofit;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+
+public class OnThisDayFullListClient {
+    @Nullable private Call<OnThisDay> call;
+
+    public Call<OnThisDay> request(@NonNull WikiSite wiki, int month, int 
date) {
+        String endpoint = String.format(Locale.ROOT, 
Prefs.getRestbaseUriFormat(), wiki.scheme(),
+                wiki.authority());
+        Retrofit retrofit = RetrofitFactory.newInstance(endpoint, wiki);
+        OnThisDayFullListClient.Service service = 
retrofit.create(Service.class);
+        return service.getAllOtdEvents(month, date);
+    }
+
+    @VisibleForTesting
+    interface Service {
+        @NonNull
+        @GET("feed/onthisday/events/{mm}/{dd}")
+        Call<OnThisDay> getAllOtdEvents(@Path("mm") int month,
+                                        @Path("dd") int day);
+    }
+}
diff --git 
a/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java 
b/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java
deleted file mode 100644
index b12f614..0000000
--- a/app/src/test/java/org/wikipedia/feed/onthisday/OnThisDayClientTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.wikipedia.feed.onthisday;
-
-import android.support.annotation.NonNull;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.wikipedia.feed.dataclient.FeedClient;
-import org.wikipedia.feed.model.Card;
-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.Matchers.anyListOf;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-public class OnThisDayClientTest extends MockWebServerTest {
-    private OnThisDay onThisDay;
-    private static final int MON = 10, DAY = 5;
-
-    @NonNull private OnThisDayClient client = new OnThisDayClient();
-
-    @Before
-    @Override
-    public void setUp() throws Throwable {
-        super.setUp();
-        String json = TestFileUtil.readRawFile("onthisday_02_06.json");
-        onThisDay = GsonUnmarshaller.unmarshal(OnThisDay.class, json);
-    }
-
-    @Test
-    public void testRequestSuccess() throws Throwable {
-        enqueueFromFile("onthisday_02_06.json");
-        FeedClient.Callback cb = mock(FeedClient.Callback.class);
-        request(cb);
-        server().takeRequest();
-        verify(cb).success(anyListOf(Card.class));
-        verify(cb, never()).error(any(Throwable.class));
-    }
-
-    @Test
-    public void testRequestMalFormed() throws Throwable {
-        server().enqueue("Malformed.");
-        FeedClient.Callback cb = mock(FeedClient.Callback.class);
-        request(cb);
-        server().takeRequest();
-        verify(cb, never()).success(anyListOf(Card.class));
-        verify(cb).error(any(Throwable.class));
-    }
-
-    @Test
-    public void testRequestNotFound() throws Throwable {
-        enqueue404();
-        FeedClient.Callback cb = mock(FeedClient.Callback.class);
-        request(cb);
-        server().takeRequest();
-        verify(cb, never()).success(anyListOf(Card.class));
-        verify(cb).error(any(Throwable.class));
-    }
-
-    @Test
-    public void testParamsNullity() throws Throwable {
-        OnThisDay.Event event = onThisDay.events().get(0);
-        assertThat((event.text() != null), is(true));
-        assertThat((event.pages() != null), is(true));
-    }
-
-    private void request(@NonNull FeedClient.Callback cb) {
-        Call<OnThisDay> call = 
client.request(service(OnThisDayClient.Service.class), MON, DAY);
-        call.enqueue(new OnThisDayClient.CallbackAdapter(cb, null, null, 0));
-    }
-}

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Iffdb689fe39bff45e436c90dac09d1a2ec62fef2
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Sharvaniharan <sha...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Cooltey <cf...@wikimedia.org>
Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: Sharvaniharan <sha...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to