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

Reply via email to