jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/333382 )
Change subject: Replace EditPreviewTest with MockWebServer-based
EditPreviewClientTest
......................................................................
Replace EditPreviewTest with MockWebServer-based EditPreviewClientTest
Bug: T154809
Change-Id: I1767d12be1f9617bd3c38a3b7306f1ff634f1532
---
D app/src/androidTest/java/org/wikipedia/edit/preview/EditPreviewTest.java
M app/src/main/java/org/wikipedia/edit/preview/EditPreviewClient.java
A app/src/test/java/org/wikipedia/edit/preview/EditPreviewClientTest.java
A app/src/test/res/raw/edit_preview.json
4 files changed, 107 insertions(+), 77 deletions(-)
Approvals:
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/app/src/androidTest/java/org/wikipedia/edit/preview/EditPreviewTest.java
b/app/src/androidTest/java/org/wikipedia/edit/preview/EditPreviewTest.java
deleted file mode 100644
index b40a554..0000000
--- a/app/src/androidTest/java/org/wikipedia/edit/preview/EditPreviewTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.wikipedia.edit.preview;
-
-import android.support.annotation.NonNull;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.wikipedia.dataclient.WikiSite;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.testlib.TestLatch;
-
-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 {
- PageTitle title = new PageTitle(null,
"Test_page_for_app_testing/Section1", TESTWIKI);
- final long randomTime = System.currentTimeMillis();
- String wikiText = "== Section 2 ==\n\nEditing section INSERT RANDOM &
HERE test at " + randomTime;
-
- 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) {
- assertThat(preview,
containsString(String.valueOf(randomTime)));
- latch.countDown();
- }
-
- @Override
- public void failure(@NonNull Call<EditPreview> call,
@NonNull Throwable caught) {
- throw new RuntimeException(caught);
- }
- });
- 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/edit/preview/EditPreviewClient.java
b/app/src/main/java/org/wikipedia/edit/preview/EditPreviewClient.java
index d42bd3b..2e342e5 100644
--- a/app/src/main/java/org/wikipedia/edit/preview/EditPreviewClient.java
+++ b/app/src/main/java/org/wikipedia/edit/preview/EditPreviewClient.java
@@ -4,10 +4,13 @@
import android.support.annotation.VisibleForTesting;
import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.dataclient.mwapi.MwApiException;
import org.wikipedia.dataclient.restbase.page.RbPageServiceCache;
import org.wikipedia.dataclient.retrofit.MwCachedService;
import org.wikipedia.dataclient.retrofit.RetrofitException;
import org.wikipedia.page.PageTitle;
+
+import java.io.IOException;
import retrofit2.Call;
import retrofit2.Response;
@@ -17,8 +20,7 @@
import retrofit2.http.POST;
class EditPreviewClient {
- @NonNull private final MwCachedService<Service> cachedService
- = new MwCachedService<>(Service.class);
+ @NonNull private final MwCachedService<Service> cachedService = new
MwCachedService<>(Service.class);
@NonNull private final Retrofit retrofit =
RbPageServiceCache.INSTANCE.getRetrofit();
Call<EditPreview> request(@NonNull WikiSite wiki, @NonNull PageTitle title,
@@ -35,13 +37,12 @@
@Override
public void onResponse(Call<EditPreview> call,
Response<EditPreview> response) {
if (response.isSuccessful()) {
- EditPreview preview = response.body();
- if (preview.hasPreviewResult()) {
- cb.success(call, preview.result());
- } else if (preview.info() != null) {
- cb.failure(call, new RuntimeException(preview.info()));
+ if (response.body().success() &&
response.body().hasPreviewResult()) {
+ cb.success(call, response.body().result());
+ } else if (response.body().hasError()) {
+ cb.failure(call, new
MwApiException(response.body().getError()));
} else {
- cb.failure(call, new RuntimeException("Received
unrecognized edit preview response"));
+ cb.failure(call, new IOException("An unknown error
occurred."));
}
} else {
cb.failure(call, RetrofitException.httpError(response,
retrofit));
@@ -61,10 +62,9 @@
void failure(@NonNull Call<EditPreview> call, @NonNull Throwable
caught);
}
- private interface Service {
+ @VisibleForTesting interface Service {
@FormUrlEncoded
-
@POST("w/api.php?action=parse&format=json§ionpreview=true&pst=true&mobileformat=true"
- + "&prop=text")
+
@POST("w/api.php?action=parse&format=json§ionpreview=true&pst=true&mobileformat=true&prop=text")
Call<EditPreview> previewEdit(@NonNull @Field("title") String title,
@NonNull @Field("text") String text);
}
diff --git
a/app/src/test/java/org/wikipedia/edit/preview/EditPreviewClientTest.java
b/app/src/test/java/org/wikipedia/edit/preview/EditPreviewClientTest.java
new file mode 100644
index 0000000..83c5244
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/edit/preview/EditPreviewClientTest.java
@@ -0,0 +1,87 @@
+package org.wikipedia.edit.preview;
+
+import android.support.annotation.NonNull;
+
+import com.google.gson.stream.MalformedJsonException;
+
+import org.junit.Test;
+import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.dataclient.mwapi.MwApiException;
+import org.wikipedia.dataclient.retrofit.RetrofitException;
+import org.wikipedia.page.PageTitle;
+import org.wikipedia.test.MockWebServerTest;
+
+import retrofit2.Call;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+public class EditPreviewClientTest extends MockWebServerTest {
+ private EditPreviewClient subject = new EditPreviewClient();
+ private PageTitle title = new PageTitle(null, "TEST",
WikiSite.forLanguageCode("test"));
+
+ @Test public void testRequestSuccessHasResults() throws Throwable {
+ String expected = "<div class=\"mf-section-0\"
id=\"mf-section-0\"><p>\\o/\\n\\ntest12\\n\\n3</p>\n\n\n\n\n</div>";
+ enqueueFromFile("edit_preview.json");
+
+ EditPreviewClient.Callback cb = mock(EditPreviewClient.Callback.class);
+ Call<EditPreview> call = request(cb);
+
+ server().takeRequest();
+ assertCallbackSuccess(call, cb, expected);
+ }
+
+ @Test public void testRequestResponseApiError() throws Throwable {
+ enqueueFromFile("api_error.json");
+
+ EditPreviewClient.Callback cb = mock(EditPreviewClient.Callback.class);
+ Call<EditPreview> call = request(cb);
+
+ server().takeRequest();
+ assertCallbackFailure(call, cb, MwApiException.class);
+ }
+
+ @Test public void testRequestResponse404() throws Throwable {
+ enqueue404();
+
+ EditPreviewClient.Callback cb = mock(EditPreviewClient.Callback.class);
+ Call<EditPreview> call = request(cb);
+
+ server().takeRequest();
+ assertCallbackFailure(call, cb, RetrofitException.class);
+ }
+
+ @Test public void testRequestResponseMalformed() throws Throwable {
+ server().enqueue("(-(-_(-_-)_-)-)");
+
+ EditPreviewClient.Callback cb = mock(EditPreviewClient.Callback.class);
+ Call<EditPreview> call = request(cb);
+
+ server().takeRequest();
+ assertCallbackFailure(call, cb, MalformedJsonException.class);
+ }
+
+ private void assertCallbackSuccess(@NonNull Call<EditPreview> call,
+ @NonNull EditPreviewClient.Callback cb,
+ @NonNull String expected) {
+ verify(cb).success(eq(call), eq(expected));
+ //noinspection unchecked
+ verify(cb, never()).failure(any(Call.class), any(Throwable.class));
+ }
+
+ private void assertCallbackFailure(@NonNull Call<EditPreview> call,
+ @NonNull EditPreviewClient.Callback cb,
+ @NonNull Class<? extends Throwable>
throwable) {
+ //noinspection unchecked
+ verify(cb, never()).success(any(Call.class), any(String.class));
+ verify(cb).failure(eq(call), isA(throwable));
+ }
+
+ private Call<EditPreview> request(@NonNull EditPreviewClient.Callback cb) {
+ return subject.request(service(EditPreviewClient.Service.class),
title, "wikitext of change", cb);
+ }
+}
diff --git a/app/src/test/res/raw/edit_preview.json
b/app/src/test/res/raw/edit_preview.json
new file mode 100644
index 0000000..8162898
--- /dev/null
+++ b/app/src/test/res/raw/edit_preview.json
@@ -0,0 +1,9 @@
+{
+ "parse": {
+ "title": "User:Mhollo/sandbox",
+ "pageid": 46498401,
+ "text": {
+ "*": "<div class=\"mf-section-0\"
id=\"mf-section-0\"><p>\\o/\\n\\ntest12\\n\\n3</p>\n\n\n\n\n</div>"
+ }
+ }
+}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/333382
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I1767d12be1f9617bd3c38a3b7306f1ff634f1532
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[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