Mholloway has uploaded a new change for review.

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

Change subject: Hygiene: Refactor DoEditTaskTests -> EditTaskTest
......................................................................

Hygiene: Refactor DoEditTaskTests -> EditTaskTest

-Decomposed the test code for readability; no functional changes intended.
-Also renamed it to EditTaskTest since the 'Do' was superfluous and it's
 only one test.

Bug: T115903
Change-Id: I94b9b91599cc242879f96a250658d74138d5638c
---
D app/src/androidTest/java/org/wikipedia/test/DoEditTaskTests.java
A app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
2 files changed, 145 insertions(+), 99 deletions(-)


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

diff --git a/app/src/androidTest/java/org/wikipedia/test/DoEditTaskTests.java 
b/app/src/androidTest/java/org/wikipedia/test/DoEditTaskTests.java
deleted file mode 100644
index cc282fc..0000000
--- a/app/src/androidTest/java/org/wikipedia/test/DoEditTaskTests.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.wikipedia.test;
-
-import android.test.ActivityUnitTestCase;
-
-import org.mediawiki.api.json.ApiException;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.editing.DoEditTask;
-import org.wikipedia.editing.EditTokenStorage;
-import org.wikipedia.editing.EditingResult;
-import org.wikipedia.editing.FetchSectionWikitextTask;
-import org.wikipedia.login.LoginResult;
-import org.wikipedia.login.LoginTask;
-import org.wikipedia.login.User;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-public class DoEditTaskTests extends ActivityUnitTestCase<TestDummyActivity> {
-    private static final int TASK_COMPLETION_TIMEOUT = 20000;
-    private static final int SECTION_ID = 3;
-
-    public DoEditTaskTests() {
-        super(TestDummyActivity.class);
-    }
-
-    public void testEdit() throws Throwable {
-        final CountDownLatch completionLatch = new CountDownLatch(1);
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                doSave(completionLatch);
-            }
-        });
-        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
-    }
-
-    private void doSave(final CountDownLatch completionLatch) {
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", new Site("test.wikipedia.org"));
-        final String wikitext = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + System.currentTimeMillis();
-        final WikipediaApp app = (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
-        app.getEditTokenStorage().get(title.getSite(), new 
EditTokenStorage.TokenRetrievedCallback() {
-            @Override
-            public void onTokenRetrieved(String token) {
-                new DoEditTask(getInstrumentation().getTargetContext(), title, 
wikitext, SECTION_ID, token, "", false) {
-                    @Override
-                    public void onFinish(EditingResult result) {
-                        assertNotNull(result);
-                        assertEquals("Success", result.getResult());
-                        new 
FetchSectionWikitextTask(getInstrumentation().getTargetContext(), title, 
SECTION_ID) {
-                            @Override
-                            public void onFinish(String result) {
-                                assertNotNull(result);
-                                assertEquals(wikitext, result);
-                                completionLatch.countDown();
-                            }
-                        }.execute();
-                    }
-
-                    @Override
-                    public void onCatch(Throwable caught) {
-                        // borrowed mainly from EditSectionActivity:
-                        final WikipediaApp app = WikipediaApp.getInstance();
-                        if (caught instanceof ApiException) {
-                            ApiException ee = (ApiException) caught;
-                            if (app.getUserInfoStorage().isLoggedIn() && 
"badtoken".equals(ee.getCode())) {
-                                // looks like our session expired.
-                                app.getEditTokenStorage().clearAllTokens();
-                                app.getCookieManager().clearAllCookies();
-
-                                User user = app.getUserInfoStorage().getUser();
-                                new LoginTask(app, app.getPrimarySite(), 
user.getUsername(), user.getPassword()) {
-                                    @Override
-                                    public void onFinish(LoginResult result) {
-                                        assertEquals("Login failed!", 
"Success", result.getCode());
-                                        try {
-                                            doSave(completionLatch);
-                                        } catch (Throwable throwable) {
-                                            fail("Retry failed: " + 
throwable.getMessage());
-                                        }
-                                    }
-                                }.execute();
-                            }
-                        } else {
-                            throw new RuntimeException(caught);
-                        }
-                    }
-                }.execute();
-            }
-
-            @Override
-            public void onTokenFailed(Throwable caught) {
-                fail("Fetching token failed: " + caught.getMessage());
-            }
-        });
-    }
-}
-
diff --git a/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java 
b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
new file mode 100644
index 0000000..2578d7a
--- /dev/null
+++ b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
@@ -0,0 +1,145 @@
+package org.wikipedia.test;
+
+import android.test.ActivityUnitTestCase;
+
+import org.mediawiki.api.json.ApiException;
+import org.wikipedia.page.PageTitle;
+import org.wikipedia.Site;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.editing.DoEditTask;
+import org.wikipedia.editing.EditTokenStorage;
+import org.wikipedia.editing.EditingResult;
+import org.wikipedia.editing.FetchSectionWikitextTask;
+import org.wikipedia.login.LoginResult;
+import org.wikipedia.login.LoginTask;
+import org.wikipedia.login.User;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class EditTaskTest extends ActivityUnitTestCase<TestDummyActivity> {
+    private static final int TASK_COMPLETION_TIMEOUT = 20000;
+    private static final int SECTION_ID = 3;
+    private static final String TEST_WIKI_SITE = "test.wikipedia.org";
+    private static final String BAD_TOKEN_EXCEPTION_CODE = "badtoken";
+    private static final String EDIT_TASK_TEST_PAGE_TITLE = 
"Test_page_for_app_testing/Section1";
+    private static final String TEXT_TO_ADD = "== Section 2 ==\n\nEditing 
section INSERT RANDOM & HERE test at ";
+    private static final String SUCCESS = "Success";
+    private static final String LOGIN_FAILED = "Login failed!";
+    private static final String RETRY_FAILED = "Retry failed: ";
+    private static final String FETCHING_TOKEN_FAILED = "Fetching token 
failed: ";
+
+    public EditTaskTest() {
+        super(TestDummyActivity.class);
+    }
+
+    public void testEdit() throws Throwable {
+        final CountDownLatch completionLatch = new CountDownLatch(1);
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                doSave(completionLatch);
+            }
+        });
+        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
+    }
+
+    private void doSave(final CountDownLatch completionLatch) {
+        final PageTitle title = new PageTitle(null, EDIT_TASK_TEST_PAGE_TITLE, 
getTestWiki());
+        final String addedText = TEXT_TO_ADD + System.currentTimeMillis();
+        final WikipediaApp app = getApplicationContext();
+
+        app.getEditTokenStorage().get(title.getSite(), new 
EditTokenStorage.TokenRetrievedCallback() {
+            @Override
+            public void onTokenRetrieved(String token) {
+                attemptEdit(title, addedText, completionLatch, token);
+            }
+
+            @Override
+            public void onTokenFailed(Throwable caught) {
+                fail(FETCHING_TOKEN_FAILED + caught.getMessage());
+            }
+        });
+    }
+
+    private void attemptEdit(final PageTitle title, final String addedText, 
final CountDownLatch completionLatch, String token) {
+        new DoEditTask(getInstrumentation().getTargetContext(), title, 
addedText, SECTION_ID, token, "", false) {
+            @Override
+            public void onFinish(EditingResult result) {
+                verifyEditResult(result);
+                verifyNewContent(title, addedText, completionLatch);
+            }
+
+            @Override
+            public void onCatch(Throwable caught) {
+                if (caught instanceof ApiException) {
+                    retryIfTokenInvalid((ApiException) caught, 
completionLatch);
+                } else {
+                    throw new RuntimeException(caught);
+                }
+            }
+        }.execute();
+    }
+
+    private void verifyEditResult(EditingResult result) {
+        assertNotNull(result);
+        assertEquals(SUCCESS, result.getResult());
+    }
+
+    private void verifyNewContent(PageTitle title, final String addedText, 
final CountDownLatch completionLatch) {
+        new FetchSectionWikitextTask(getInstrumentation().getTargetContext(), 
title, SECTION_ID) {
+            @Override
+            public void onFinish(String result) {
+                assertNotNull(result);
+                assertEquals(addedText, result);
+                completionLatch.countDown();
+            }
+        }.execute();
+    }
+
+    private void retryIfTokenInvalid(ApiException exception, CountDownLatch 
completionLatch) {
+        final WikipediaApp app = WikipediaApp.getInstance();
+        if (userTokenIsInvalid(app, exception)) {
+            // looks like our session expired.
+            clearSession(app);
+            logInAndRetryEdit(app, completionLatch);
+        }
+    }
+
+    private boolean userTokenIsInvalid(WikipediaApp app, ApiException 
exception) {
+        return app.getUserInfoStorage().isLoggedIn() && 
exception.getCode().equals(BAD_TOKEN_EXCEPTION_CODE);
+    }
+
+    private void clearSession(WikipediaApp app) {
+        app.getEditTokenStorage().clearAllTokens();
+        app.getCookieManager().clearAllCookies();
+    }
+
+    private void logInAndRetryEdit(WikipediaApp app, final CountDownLatch 
completionLatch) {
+        User user = app.getUserInfoStorage().getUser();
+        new LoginTask(app, app.getPrimarySite(), user.getUsername(), 
user.getPassword()) {
+            @Override
+            public void onFinish(LoginResult result) {
+                assertEquals(LOGIN_FAILED, SUCCESS, result.getCode());
+                retryEdit(completionLatch);
+            }
+        }.execute();
+    }
+
+    private void retryEdit(CountDownLatch completionLatch) {
+        try {
+            doSave(completionLatch);
+        } catch (Throwable throwable) {
+            fail(RETRY_FAILED + throwable.getMessage());
+        }
+    }
+
+    private Site getTestWiki() {
+        return new Site(TEST_WIKI_SITE);
+    }
+
+    private WikipediaApp getApplicationContext() {
+        return (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
+    }
+}
+

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I94b9b91599cc242879f96a250658d74138d5638c
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