Mholloway has uploaded a new change for review.

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

Change subject: Handle error responses in EditPreviewClient
......................................................................

Handle error responses in EditPreviewClient

As with EditClient, EditPreviewClient should handle API error responses
that can be sent with a 200 response code.

Errors are probably a little less likely here but still possible.

Change-Id: I565cdbfc188c9037942e192ab016e5eaae6fdeff
---
M app/src/androidTest/java/org/wikipedia/editing/preview/EditPreviewTest.java
M app/src/main/java/org/wikipedia/editing/preview/EditPreview.java
M app/src/main/java/org/wikipedia/editing/preview/EditPreviewClient.java
3 files changed, 68 insertions(+), 12 deletions(-)


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

diff --git 
a/app/src/androidTest/java/org/wikipedia/editing/preview/EditPreviewTest.java 
b/app/src/androidTest/java/org/wikipedia/editing/preview/EditPreviewTest.java
index 84506cf..69efb54 100644
--- 
a/app/src/androidTest/java/org/wikipedia/editing/preview/EditPreviewTest.java
+++ 
b/app/src/androidTest/java/org/wikipedia/editing/preview/EditPreviewTest.java
@@ -11,20 +11,22 @@
 import retrofit2.Call;
 
 import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
 @SmallTest
 public class EditPreviewTest {
+    private static WikiSite TESTWIKI = WikiSite.forLanguageCode("test");
+
     @Test
     public void testPreview() throws Throwable {
-        final WikiSite wiki = WikiSite.forLanguageCode("test");
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", wiki);
+        PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", TESTWIKI);
         final long randomTime = System.currentTimeMillis();
-        final String wikiText = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + randomTime;
+        String wikiText = "== Section 2 ==\n\nEditing section INSERT RANDOM & 
HERE test at " + randomTime;
 
         final TestLatch latch = new TestLatch();
 
-        new EditPreviewClient().request(wiki, title, wikiText,
+        new EditPreviewClient().request(TESTWIKI, title, wikiText,
                 new EditPreviewClient.Callback() {
                     @Override
                     public void success(@NonNull Call<EditPreview> call, 
@NonNull String preview) {
@@ -39,4 +41,27 @@
                 });
         latch.await();
     }
+
+    @Test
+    public void testErrorResponse() throws Throwable {
+        PageTitle title = new PageTitle(null, "#[]", TESTWIKI);
+        String wikiText = "foo";
+
+        final TestLatch latch = new TestLatch();
+
+        new EditPreviewClient().request(TESTWIKI, title, wikiText,
+                new EditPreviewClient.Callback() {
+                    @Override
+                    public void success(@NonNull Call<EditPreview> call, 
@NonNull String preview) {
+                        throw new RuntimeException("This should generate an 
error response!");
+                    }
+
+                    @Override
+                    public void failure(@NonNull Call<EditPreview> call, 
@NonNull Throwable caught) {
+                        assertNotNull(caught.getMessage());
+                        latch.countDown();
+                    }
+                });
+        latch.await();
+    }
 }
diff --git a/app/src/main/java/org/wikipedia/editing/preview/EditPreview.java 
b/app/src/main/java/org/wikipedia/editing/preview/EditPreview.java
index bf9ff45..093cc9a 100644
--- a/app/src/main/java/org/wikipedia/editing/preview/EditPreview.java
+++ b/app/src/main/java/org/wikipedia/editing/preview/EditPreview.java
@@ -1,28 +1,52 @@
 package org.wikipedia.editing.preview;
 
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 
 import com.google.gson.annotations.SerializedName;
 
 import org.wikipedia.model.BaseModel;
 
-public class EditPreview extends BaseModel {
-    @SuppressWarnings("unused,NullableProblems") @NonNull private Parse parse;
-    @NonNull protected String result() {
-        return parse.text().result();
+class EditPreview extends BaseModel {
+    @SuppressWarnings("unused") @Nullable private Parse parse;
+    @SuppressWarnings("unused") @Nullable private Error error;
+
+    boolean hasPreviewResult() {
+        return parse != null;
     }
 
-    static class Parse {
+    boolean hasError() {
+        return error != null;
+    }
+
+    @Nullable String result() {
+        return parse != null ? parse.text().result() : null;
+    }
+
+    @Nullable String errorInfo() {
+        return error != null ? error.info() : null;
+    }
+
+    private static class Parse {
         @SuppressWarnings("unused,NullableProblems") @NonNull private Text 
text;
         @NonNull Text text() {
             return text;
         }
     }
 
-    static class Text {
+    private static class Text {
         @SuppressWarnings("unused,NullableProblems") @SerializedName("*") 
@NonNull private String result;
         @NonNull String result() {
             return result;
         }
     }
+
+    private static class Error {
+        @SuppressWarnings("unused") @Nullable private String code;
+        @SuppressWarnings("unused") @Nullable private String info;
+
+        @Nullable String info() {
+            return info;
+        }
+    }
 }
diff --git 
a/app/src/main/java/org/wikipedia/editing/preview/EditPreviewClient.java 
b/app/src/main/java/org/wikipedia/editing/preview/EditPreviewClient.java
index c5ffc2b..96d0985 100644
--- a/app/src/main/java/org/wikipedia/editing/preview/EditPreviewClient.java
+++ b/app/src/main/java/org/wikipedia/editing/preview/EditPreviewClient.java
@@ -16,7 +16,7 @@
 import retrofit2.http.FormUrlEncoded;
 import retrofit2.http.POST;
 
-public class EditPreviewClient {
+class EditPreviewClient {
     @NonNull private final MwCachedService<Service> cachedService
             = new MwCachedService<>(Service.class);
     @NonNull private final Retrofit retrofit = 
RbPageEndpointsCache.INSTANCE.getRetrofit();
@@ -35,7 +35,14 @@
             @Override
             public void onResponse(Call<EditPreview> call, 
Response<EditPreview> response) {
                 if (response.isSuccessful()) {
-                    cb.success(call, response.body().result());
+                    EditPreview preview = response.body();
+                    if (preview.hasPreviewResult()) {
+                        cb.success(call, preview.result());
+                    } else if (preview.hasError()) {
+                        cb.failure(call, new 
RuntimeException(preview.errorInfo()));
+                    } else {
+                        cb.failure(call, new RuntimeException("Received 
unrecognized edit preview response"));
+                    }
                 } else {
                     cb.failure(call, RetrofitException.httpError(response, 
retrofit));
                 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I565cdbfc188c9037942e192ab016e5eaae6fdeff
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <mhollo...@wikimedia.org>

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

Reply via email to