Brion VIBBER has submitted this change and it was merged. Change subject: Add AbuseFilterEditResult & a test to trigger it ......................................................................
Add AbuseFilterEditResult & a test to trigger it App still crashes when an abusefilter error is returned :) Change-Id: I7c8fb8d41be73d74ab979a6029945fea29ee4bc1 --- A wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java A wikipedia/src/main/java/org/wikipedia/editing/AbuseFilterEditResult.java M wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java 3 files changed, 132 insertions(+), 0 deletions(-) Approvals: Brion VIBBER: Verified; Looks good to me, approved diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java new file mode 100644 index 0000000..e805bfa --- /dev/null +++ b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java @@ -0,0 +1,67 @@ + +package org.wikipedia.test; + +import android.content.Intent; +import android.test.ActivityUnitTestCase; +import org.wikipedia.PageTitle; +import org.wikipedia.Site; +import org.wikipedia.WikipediaApp; +import org.wikipedia.editing.AbuseFilterEditResult; +import org.wikipedia.editing.CaptchaEditResult; +import org.wikipedia.editing.DoEditTask; +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); + } + + public void testAbuseFilterTriggerWarn() throws Throwable { + startActivity(new Intent(), null, null); + 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 CountDownLatch completionLatch = new CountDownLatch(1); + runTestOnUiThread(new Runnable() { + @Override + public void run() { + new DoEditTask(getInstrumentation().getTargetContext(), title, wikitext, 0) { + @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)); + } + + public void testAbuseFilterTriggerStop() throws Throwable { + startActivity(new Intent(), null, null); + 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 CountDownLatch completionLatch = new CountDownLatch(1); + runTestOnUiThread(new Runnable() { + @Override + public void run() { + new DoEditTask(getInstrumentation().getTargetContext(), title, wikitext, 0) { + @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)); + } +} diff --git a/wikipedia/src/main/java/org/wikipedia/editing/AbuseFilterEditResult.java b/wikipedia/src/main/java/org/wikipedia/editing/AbuseFilterEditResult.java new file mode 100644 index 0000000..2e362ad --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/editing/AbuseFilterEditResult.java @@ -0,0 +1,62 @@ +package org.wikipedia.editing; + +import android.os.Parcel; +import android.os.Parcelable; +import org.json.JSONObject; + +public class AbuseFilterEditResult extends EditingResult { + public static final int TYPE_WARNING = 1; + public static final int TYPE_ERROR = 2; + + + private final String code; + private final String warning; + + public AbuseFilterEditResult(JSONObject result) { + super("Failure"); + this.code = result.optString("code"); + this.warning = result.optString("warning"); + } + + protected AbuseFilterEditResult(Parcel in) { + super(in); + code = in.readString(); + warning = in.readString(); + } + + public String getCode() { + return code; + } + + public String getWarning() { + return warning; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(code); + dest.writeString(warning); + } + + public int getType() { + if (code.startsWith("abusefilter-warning")) { + return TYPE_WARNING; + } else if (code.startsWith("abusefilter-disallowed")) { + return TYPE_ERROR; + } else { + throw new RuntimeException("Unknown abusefilter response!"); + } + } + + public static final Parcelable.Creator<AbuseFilterEditResult> CREATOR + = new Parcelable.Creator<AbuseFilterEditResult>() { + public AbuseFilterEditResult createFromParcel(Parcel in) { + return new AbuseFilterEditResult(in); + } + + public AbuseFilterEditResult[] newArray(int size) { + return new AbuseFilterEditResult[size]; + } + }; +} diff --git a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java index af18822..bc66c17 100644 --- a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java +++ b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java @@ -61,6 +61,9 @@ edit.optJSONObject("captcha").optString("id") ); } + if (edit.has("code") && edit.optString("code").startsWith("abusefilter-")) { + return new AbuseFilterEditResult(edit); + } } // Handle other type of return codes here throw new RuntimeException("Failure happens"); -- To view, visit https://gerrit.wikimedia.org/r/109887 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I7c8fb8d41be73d74ab979a6029945fea29ee4bc1 Gerrit-PatchSet: 4 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits