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