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