jenkins-bot has submitted this change and it was merged.

Change subject: Consolidate Captcha and abuse filter tests in EditTaskTests
......................................................................


Consolidate Captcha and abuse filter tests in EditTaskTests

Refactored tests to use JUnit 4 and improve readability, and consolidated
into EditTaskTests since they all center on the EditTask.

No functional changes to tests intended.

Bug: T115903
Change-Id: Ibeb03a8410ddf3985b795d28da6bf83ccfc31535
---
M app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
D app/src/androidTest/java/org/wikipedia/test/TriggerAbuseFilterTest.java
D app/src/androidTest/java/org/wikipedia/test/TriggerEditCaptchaTest.java
3 files changed, 168 insertions(+), 186 deletions(-)

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



diff --git a/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java 
b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
index bd69591..4274bd7 100644
--- a/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
+++ b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
@@ -1,12 +1,16 @@
 package org.wikipedia.test;
 
+import android.content.Context;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.wikipedia.editing.AbuseFilterEditResult;
+import org.wikipedia.editing.CaptchaResult;
 import org.wikipedia.editing.EditTask;
+import org.wikipedia.editing.SuccessEditResult;
 import org.wikipedia.page.PageTitle;
 import org.wikipedia.Site;
 import org.wikipedia.WikipediaApp;
@@ -15,7 +19,9 @@
 import org.wikipedia.editing.FetchSectionWikitextTask;
 import org.wikipedia.testlib.TestLatch;
 
+import static android.support.test.InstrumentationRegistry.getInstrumentation;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 @RunWith(AndroidJUnit4.class)
@@ -23,12 +29,23 @@
     private static final int SECTION_ID = 3;
     private static final Site TEST_WIKI_SITE = new Site("test.wikipedia.org");
     private static final String TEST_WIKI_DOMAIN = TEST_WIKI_SITE.getDomain();
-    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 EDIT_TASK_PAGE_TITLE = 
"Test_page_for_app_testing/Section1";
+    private static final String EDIT_TASK_WIKITEXT = "== Section 2 
==\n\nEditing section INSERT RANDOM & HERE test at ";
     private static final String SUCCESS = "Success";
 
-    private TestLatch completionLatch;
+    private static final String CAPTCHA_TEST_PAGE_TITLE = 
"Test_page_for_app_testing/Captcha";
+    private static final String CAPTCHA_TEST_WIKITEXT = "== Section 2 
==\n\nEditing by inserting an external link https://";;
+    private static final String CAPTCHA_URL = getNetworkProtocol() + 
"://test.wikipedia.org/w/index.php?title=Special:Captcha/image";
+
+    private static final String ABUSE_FILTER_WARNING_PAGE_TITLE = 
"User:Yuvipandaaaaaaaa";
+    private static final String ABUSE_FILTER_WARNING_WIKITEXT = "Testing 
Abusefilter by simply editing this page. Triggering rule 94 at ";
+    private static final String ABUSE_FILTER_ERROR_PAGE_TITLE = 
"Test_page_for_app_testing/AbuseFilter";
+    private static final String ABUSE_FILTER_ERROR_WIKITEXT = "== Section 2 
==\n\nTriggering AbuseFilter number 2 by saying poop many times at ";
+    private static final String ARBITRARY_ERROR_CODE_WIKITEXT = "== Section 2 
==\n\nTriggering AbuseFilter number 152 by saying appcrashtest many times at ";
+
     private WikipediaApp app = WikipediaApp.getInstance();
+    private Context context = getInstrumentation().getTargetContext();
 
     @Before
     public void setUp() {
@@ -37,24 +54,138 @@
 
     @Test
     public void testEdit() throws Throwable {
-        completionLatch = new TestLatch();
+        final TestLatch completionLatch = new TestLatch();
         runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                doSave();
+                save(completionLatch);
             }
         });
         completionLatch.await();
     }
 
-    private void doSave() {
-        final PageTitle title = new PageTitle(null, EDIT_TASK_TEST_PAGE_TITLE, 
TEST_WIKI_SITE);
-        final String addedText = TEXT_TO_ADD + System.currentTimeMillis();
+    @Test
+    public void testCaptcha() throws Throwable {
+        final PageTitle title = new PageTitle(null, CAPTCHA_TEST_PAGE_TITLE, 
TEST_WIKI_SITE);
+        final String wikitext = CAPTCHA_TEST_WIKITEXT + 
System.currentTimeMillis();
+
+        final TestLatch completionLatch = new TestLatch();
+        runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                new EditTask(context, title, wikitext, 0, "+\\", "", false) {
+                    @Override
+                    public void onFinish(EditingResult result) {
+                        if (captchaShown(result)) {
+                            validateCaptcha(result);
+                        }
+                        completionLatch.countDown();
+                    }
+                }.execute();
+            }
+        });
+        completionLatch.await();
+    }
+
+    /**
+     * Test handling of abuse filter warnings which warn users about making 
edits of a certain kind.
+     *
+     * Type:   warn
+     * Action: editing any userspace page while logged out
+     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/94
+     *
+     * @throws Throwable
+     */
+    @Test
+    public void testAbuseFilterTriggerWarn() throws Throwable {
+        final PageTitle title = new PageTitle(null, 
ABUSE_FILTER_WARNING_PAGE_TITLE, TEST_WIKI_SITE);
+        final String wikitext = ABUSE_FILTER_WARNING_WIKITEXT + 
System.currentTimeMillis();
+        final TestLatch completionLatch = new TestLatch();
+        runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                new EditTask(context, title, wikitext, 0, "+\\", "", false) {
+                    @Override
+                    public void onFinish(EditingResult result) {
+                        assertThat(result, 
instanceOf(AbuseFilterEditResult.class));
+                        assertThat(((AbuseFilterEditResult) result).getType(), 
is(AbuseFilterEditResult.TYPE_WARNING));
+                        completionLatch.countDown();
+                    }
+                }.execute();
+            }
+        });
+        completionLatch.await();
+    }
+
+    /**
+     * Test handling of abuse filter errors which completely disallow edits of 
a certain kind.
+     *
+     * Type:   disallow
+     * Action: adding string "poop" to page text
+     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/2
+     *
+     * @throws Throwable
+     */
+    @Test
+    public void testAbuseFilterTriggerStop() throws Throwable {
+        final PageTitle title = new PageTitle(null, 
ABUSE_FILTER_ERROR_PAGE_TITLE, TEST_WIKI_SITE);
+        final String wikitext = ABUSE_FILTER_ERROR_WIKITEXT + 
System.currentTimeMillis();
+        final TestLatch completionLatch = new TestLatch();
+        runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                new EditTask(context, title, wikitext, 0, "+\\", "", false) {
+                    @Override
+                    public void onFinish(EditingResult result) {
+                        assertThat(result, 
instanceOf(AbuseFilterEditResult.class));
+                        assertThat(((AbuseFilterEditResult) result).getType(), 
is(AbuseFilterEditResult.TYPE_ERROR));
+                        completionLatch.countDown();
+                    }
+                }.execute();
+            }
+        });
+        completionLatch.await();
+    }
+
+    /**
+     * Test the app's handling of the abuse filter emitting arbitrary error 
codes.
+     *
+     * Type:   warn
+     * Action: adding string "appcrashtest" to page text
+     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/152
+     *
+     * @throws Throwable
+     */
+    @Test
+    public void testAbuseFilterTriggerStopOnArbitraryErrorCode() throws 
Throwable {
+        final PageTitle title = new PageTitle(null, 
ABUSE_FILTER_ERROR_PAGE_TITLE, TEST_WIKI_SITE);
+        final String wikitext = ARBITRARY_ERROR_CODE_WIKITEXT + 
System.currentTimeMillis();
+        final TestLatch completionLatch = new TestLatch();
+        runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                new EditTask(context, title, wikitext, 0, "+\\", "", false) {
+                    @Override
+                    public void onFinish(EditingResult result) {
+                        assertThat(result, 
instanceOf(AbuseFilterEditResult.class));
+                        // For now we handle arbitrary error codes as 
TYPE_ERROR. This may change.
+                        assertThat(((AbuseFilterEditResult) result).getType(), 
is(AbuseFilterEditResult.TYPE_ERROR));
+                        completionLatch.countDown();
+                    }
+                }.execute();
+            }
+        });
+        completionLatch.await();
+    }
+
+    private void save(final TestLatch completionLatch) {
+        final PageTitle title = new PageTitle(null, EDIT_TASK_PAGE_TITLE, 
TEST_WIKI_SITE);
+        final String addedText = EDIT_TASK_WIKITEXT + 
System.currentTimeMillis();
 
         app.getEditTokenStorage().get(title.getSite(), new 
EditTokenStorage.TokenRetrievedCallback() {
             @Override
             public void onTokenRetrieved(String token) {
-                attemptEdit(title, addedText, token);
+                edit(title, addedText, token, completionLatch);
             }
 
             @Override
@@ -64,12 +195,12 @@
         });
     }
 
-    private void attemptEdit(final PageTitle title, final String addedText, 
String token) {
+    private void edit(final PageTitle title, final String addedText, String 
token, final TestLatch completionLatch) {
         new EditTask(app, title, addedText, SECTION_ID, token, "", false) {
             @Override
             public void onFinish(EditingResult result) {
                 verifyEditResultCode(result);
-                verifyNewContent(title, addedText);
+                verifyNewContent(title, addedText, completionLatch);
             }
 
             @Override
@@ -83,7 +214,7 @@
         assertThat(result.getResult(), is(SUCCESS));
     }
 
-    private void verifyNewContent(PageTitle title, final String addedText) {
+    private void verifyNewContent(PageTitle title, final String addedText, 
final TestLatch completionLatch) {
         new FetchSectionWikitextTask(app, title, SECTION_ID) {
             @Override
             public void onFinish(String result) {
@@ -93,6 +224,31 @@
         }.execute();
     }
 
+    /**
+     * We don't always get a Captcha when running this test.  If the edit 
operation returns
+     * a result of type SuccessEditResult, no Captcha was shown, so we'll skip 
validation.
+     * @param result the editing result object
+     * @return true if result is an instance of SuccessEditResult
+     */
+    private boolean captchaShown(EditingResult result) {
+        return !(result instanceof SuccessEditResult);
+    }
+
+    private void validateCaptcha(EditingResult result) {
+        assertThat(result, instanceOf(CaptchaResult.class));
+        CaptchaResult captchaResult = (CaptchaResult) result;
+        String url = captchaResult.getCaptchaUrl(TEST_WIKI_SITE);
+        assertThat(isValidCaptchaUrl(url), is(true));
+    }
+
+    private boolean isValidCaptchaUrl(String url) {
+        return url.startsWith(CAPTCHA_URL);
+    }
+
+    private static String getNetworkProtocol() {
+        return WikipediaApp.getInstance().getNetworkProtocol();
+    }
+
     private void clearSession() {
         app.getEditTokenStorage().clearEditTokenForDomain(TEST_WIKI_DOMAIN);
         app.getCookieManager().clearCookiesForDomain(TEST_WIKI_DOMAIN);
diff --git 
a/app/src/androidTest/java/org/wikipedia/test/TriggerAbuseFilterTest.java 
b/app/src/androidTest/java/org/wikipedia/test/TriggerAbuseFilterTest.java
deleted file mode 100644
index 027e474..0000000
--- a/app/src/androidTest/java/org/wikipedia/test/TriggerAbuseFilterTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.wikipedia.test;
-
-import android.test.ActivityUnitTestCase;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.editing.AbuseFilterEditResult;
-import org.wikipedia.editing.EditTask;
-import org.wikipedia.editing.EditingResult;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-public class TriggerAbuseFilterTest extends 
ActivityUnitTestCase<TestDummyActivity> {
-    private static final int TASK_COMPLETION_TIMEOUT = 20000;
-
-    public TriggerAbuseFilterTest() {
-        super(TestDummyActivity.class);
-    }
-
-    /**
-     * Test handling of abuse filter warnings which warn users about making 
edits of a certain kind.
-     *
-     * Type:   warn
-     * Action: editing any userspace page while logged out
-     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/94
-     *
-     * @throws Throwable
-     */
-    public void testAbuseFilterTriggerWarn() throws Throwable {
-        final PageTitle title = new PageTitle(null, "User:Yuvipandaaaaaaaa", 
new Site("test.wikipedia.org"));
-        final String wikitext = "Testing Abusefilter by simply editing this 
page. Triggering rule 94 at " + System.currentTimeMillis();
-        final WikipediaApp app = (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
-        app.getEditTokenStorage().clearAllTokens();
-        app.getCookieManager().clearAllCookies();
-        final CountDownLatch completionLatch = new CountDownLatch(1);
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                new EditTask(getInstrumentation().getTargetContext(), title, 
wikitext, 0, "+\\", "", false) {
-                    @Override
-                    public void onFinish(EditingResult result) {
-                        assertNotNull(result);
-                        assertTrue(result instanceof AbuseFilterEditResult);
-                        assertEquals(((AbuseFilterEditResult) 
result).getType(), AbuseFilterEditResult.TYPE_WARNING);
-                        completionLatch.countDown();
-                    }
-                }.execute();
-            }
-        });
-        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
-    }
-
-    /**
-     * Test handling of abuse filter errors which completely disallow edits of 
a certain kind.
-     *
-     * Type:   disallow
-     * Action: adding string "poop" to page text
-     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/2
-     *
-     * @throws Throwable
-     */
-    public void testAbuseFilterTriggerStop() throws Throwable {
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/AbuseFilter", new Site("test.wikipedia.org"));
-        final String wikitext = "== Section 2 ==\n\nTriggering AbuseFilter 
number 2 by saying poop many times at " + System.currentTimeMillis();
-        final WikipediaApp app = (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
-        app.getEditTokenStorage().clearAllTokens();
-        app.getCookieManager().clearAllCookies();
-        final CountDownLatch completionLatch = new CountDownLatch(1);
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                new EditTask(getInstrumentation().getTargetContext(), title, 
wikitext, 0, "+\\", "", false) {
-                    @Override
-                    public void onFinish(EditingResult result) {
-                        assertNotNull(result);
-                        assertTrue(result instanceof AbuseFilterEditResult);
-                        assertEquals(((AbuseFilterEditResult) 
result).getType(), AbuseFilterEditResult.TYPE_ERROR);
-                        completionLatch.countDown();
-                    }
-                }.execute();
-            }
-        });
-        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
-    }
-
-    /**
-     * Test the app's handling of the abuse filter emitting arbitrary error 
codes.
-     *
-     * Type:   warn
-     * Action: adding string "appcrashtest" to page text
-     * Filter: https://test.wikipedia.org/wiki/Special:AbuseFilter/152
-     *
-     * @throws Throwable
-     */
-    public void testAbuseFilterTriggerStopOnArbitraryErrorCode() throws 
Throwable {
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/AbuseFilter", new Site("test.wikipedia.org"));
-        final String wikitext = "== Section 2 ==\n\nTriggering AbuseFilter 
number 152 by saying appcrashtest many times at " + System.currentTimeMillis();
-        final WikipediaApp app = (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
-        app.getEditTokenStorage().clearAllTokens();
-        app.getCookieManager().clearAllCookies();
-        final CountDownLatch completionLatch = new CountDownLatch(1);
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                new EditTask(getInstrumentation().getTargetContext(), title, 
wikitext, 0, "+\\", "", false) {
-                    @Override
-                    public void onFinish(EditingResult result) {
-                        assertNotNull(result);
-                        assertTrue(result instanceof AbuseFilterEditResult);
-                        // For now we handle arbitrary error codes as 
TYPE_ERROR. This may change.
-                        assertEquals(((AbuseFilterEditResult) 
result).getType(), AbuseFilterEditResult.TYPE_ERROR);
-                        completionLatch.countDown();
-                    }
-                }.execute();
-            }
-        });
-        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
-    }
-}
\ No newline at end of file
diff --git 
a/app/src/androidTest/java/org/wikipedia/test/TriggerEditCaptchaTest.java 
b/app/src/androidTest/java/org/wikipedia/test/TriggerEditCaptchaTest.java
deleted file mode 100644
index 48d288a..0000000
--- a/app/src/androidTest/java/org/wikipedia/test/TriggerEditCaptchaTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.wikipedia.test;
-
-import android.test.ActivityUnitTestCase;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.editing.CaptchaResult;
-import org.wikipedia.editing.EditTask;
-import org.wikipedia.editing.EditingResult;
-import org.wikipedia.editing.SuccessEditResult;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-public class TriggerEditCaptchaTest extends 
ActivityUnitTestCase<TestDummyActivity> {
-    private static final int TASK_COMPLETION_TIMEOUT = 20000;
-
-    public TriggerEditCaptchaTest() {
-        super(TestDummyActivity.class);
-    }
-
-    public void testCaptchaTrigger() throws Throwable {
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Captcha", new Site("test.wikipedia.org"));
-        final String wikitext = "== Section 2 ==\n\nEditing by inserting an 
external link https://"; + System.currentTimeMillis();
-        final WikipediaApp app = (WikipediaApp) 
getInstrumentation().getTargetContext().getApplicationContext();
-        app.getEditTokenStorage().clearAllTokens();
-        app.getCookieManager().clearAllCookies();
-        final CountDownLatch completionLatch = new CountDownLatch(1);
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                new EditTask(getInstrumentation().getTargetContext(), title, 
wikitext, 0, "+\\", "", false) {
-                    @Override
-                    public void onFinish(EditingResult result) {
-                        assertNotNull(result);
-                        if (result instanceof SuccessEditResult) {
-                            // We don't always get a CAPTCHA when running this 
test repeatedly
-                            completionLatch.countDown();
-                            return;
-                        }
-                        assertTrue(result instanceof CaptchaResult);
-                        CaptchaResult captchaResult = (CaptchaResult) result;
-                        String captchaUrl = captchaResult.getCaptchaUrl(new 
Site("test.wikipedia.org"));
-                        
assertTrue(captchaUrl.startsWith(WikipediaApp.getInstance().getNetworkProtocol()
-                                + 
"://test.wikipedia.org/w/index.php?title=Special:Captcha/image"));
-                        completionLatch.countDown();
-                    }
-                }.execute();
-            }
-        });
-        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
-    }
-}
-

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibeb03a8410ddf3985b795d28da6bf83ccfc31535
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to