Brion VIBBER has submitted this change and it was merged.

Change subject: Add a task to do pre-flight request for account creation + test
......................................................................


Add a task to do pre-flight request for account creation + test

Change-Id: I486bd9dc70a0cfddf6a1c280f0f6e8fa43245730
---
A wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
M wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
M wikipedia/AndroidManifest.xml
R wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
A 
wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenFetchTask.java
D wikipedia/src/main/java/org/wikipedia/editing/CaptchaEditResult.java
A wikipedia/src/main/java/org/wikipedia/editing/CaptchaResult.java
M wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java
M wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
M wikipedia/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java
M wikipedia/src/main/java/org/wikipedia/login/LoginActivity.java
11 files changed, 169 insertions(+), 57 deletions(-)

Approvals:
  Brion VIBBER: Verified; Looks good to me, approved



diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
new file mode 100644
index 0000000..39f9925
--- /dev/null
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
@@ -0,0 +1,50 @@
+
+package org.wikipedia.test;
+
+import android.content.*;
+import android.test.*;
+import android.text.*;
+import org.wikimedia.wikipedia.test.R;
+import org.wikipedia.*;
+import org.wikipedia.createaccount.*;
+import org.wikipedia.editing.*;
+import org.wikipedia.login.*;
+
+import java.util.concurrent.*;
+
+public class CreateAccountTokenTest extends 
ActivityUnitTestCase<TestDummyActivity> {
+    private static final int TASK_COMPLETION_TIMEOUT = 20000;
+
+    public CreateAccountTokenTest() {
+        super(TestDummyActivity.class);
+    }
+
+    public void testTokenFetch() throws Throwable {
+        startActivity(new Intent(), null, null);
+        final Site testWiki = new Site("test.wikipedia.org");
+        final String username = "someusername" + System.currentTimeMillis();
+        final String password = "somepassword" + System.currentTimeMillis();
+        final WikipediaApp app = 
(WikipediaApp)getInstrumentation().getTargetContext().getApplicationContext();
+
+        final CountDownLatch completionLatch = new CountDownLatch(1);
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                new 
CreateAccountTokenFetchTask(getInstrumentation().getTargetContext(), username, 
password) {
+                    @Override
+                    public void 
onFinish(CreateAccountTokenFetchTask.CreateAccountTokenResult result) {
+                        assertNotNull(result);
+                        assertNotNull(result.getCaptchaResult());
+                        assertFalse(TextUtils.isEmpty(result.getToken()));
+                        
assertFalse(TextUtils.isEmpty(result.getCaptchaResult().getCaptchaId()));
+                        String captchaUrl = 
result.getCaptchaResult().getCaptchaUrl(testWiki);
+                        assertTrue(captchaUrl.startsWith(WikipediaApp.PROTOCOL 
+ "://test.wikipedia.org/w/index.php?title=Special:Captcha/image"));
+                        completionLatch.countDown();
+                    }
+                }.execute();
+            }
+        });
+        assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, 
TimeUnit.MILLISECONDS));
+    }
+}
+
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
index 937e4e8..35648cc 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
@@ -27,8 +27,8 @@
                     @Override
                     public void onFinish(EditingResult result) {
                         assertNotNull(result);
-                        assertTrue(result instanceof CaptchaEditResult);
-                        CaptchaEditResult captchaResult = (CaptchaEditResult) 
result;
+                        assertTrue(result instanceof CaptchaResult);
+                        CaptchaResult captchaResult = (CaptchaResult) result;
                         String captchaUrl = captchaResult.getCaptchaUrl(new 
Site("test.wikipedia.org"));
                         assertTrue(captchaUrl.startsWith(WikipediaApp.PROTOCOL 
+ "://test.wikipedia.org/w/index.php?title=Special:Captcha/image"));
                         completionLatch.countDown();
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index 9be25e6..f675265 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -62,7 +62,7 @@
                   android:label="@string/login_activity_title"
                   android:windowSoftInputMode="stateVisible|adjustResize"
                 />
-        <activity android:name=".login.CreateAccountActivity" 
android:label="@string/create_account_activity_title"/>
+        <activity android:name=".createaccount.CreateAccountActivity" 
android:label="@string/create_account_activity_title"/>
 
         <provider
             android:authorities="org.wikipedia.history"
diff --git 
a/wikipedia/src/main/java/org/wikipedia/login/CreateAccountActivity.java 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
similarity index 95%
rename from 
wikipedia/src/main/java/org/wikipedia/login/CreateAccountActivity.java
rename to 
wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
index 5f6f07a..eb04e1f 100644
--- a/wikipedia/src/main/java/org/wikipedia/login/CreateAccountActivity.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
@@ -1,4 +1,4 @@
-package org.wikipedia.login;
+package org.wikipedia.createaccount;
 
 import android.app.Activity;
 import android.os.Bundle;
diff --git 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenFetchTask.java
 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenFetchTask.java
new file mode 100644
index 0000000..865baad
--- /dev/null
+++ 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenFetchTask.java
@@ -0,0 +1,62 @@
+package org.wikipedia.createaccount;
+
+import android.content.*;
+import org.json.*;
+import org.mediawiki.api.json.*;
+import org.wikipedia.*;
+import org.wikipedia.concurrency.*;
+import org.wikipedia.editing.*;
+import org.wikipedia.interlanguage.*;
+
+public class CreateAccountTokenFetchTask extends 
ApiTask<CreateAccountTokenFetchTask.CreateAccountTokenResult> {
+    public static class CreateAccountTokenResult{
+        private final CaptchaResult captchaResult;
+        private final String token;
+
+        public CreateAccountTokenResult(CaptchaResult captchaResult, String 
token) {
+            this.captchaResult = captchaResult;
+            this.token = token;
+        }
+
+        public CaptchaResult getCaptchaResult() {
+            return captchaResult;
+        }
+
+        public String getToken() {
+            return token;
+        }
+    }
+
+
+    private final String username;
+    private final String password;
+    public CreateAccountTokenFetchTask(Context context, String username, 
String password) {
+        super(
+                
ExecutorService.getSingleton().getExecutor(LangLinksFetchTask.class, 1),
+                ((WikipediaApp)context.getApplicationContext()).getAPIForSite(
+                        
((WikipediaApp)context.getApplicationContext()).getPrimarySite()
+                )
+        );
+        this.username = username;
+        this.password = password;
+    }
+    @Override
+    public RequestBuilder buildRequest(Api api) {
+        return api.action("createaccount")
+                .param("name", username)
+                .param("password", password);
+    }
+
+    @Override
+    protected ApiResult makeRequest(RequestBuilder builder) {
+        return builder.post();
+    }
+
+    @Override
+    public CreateAccountTokenResult processResult(ApiResult result) throws 
Throwable {
+        JSONObject ca = result.asObject().optJSONObject("createaccount");
+        String token = ca.optString("token");
+        CaptchaResult captchaResult = new 
CaptchaResult(ca.optJSONObject("captcha").optString("id"));
+        return new CreateAccountTokenResult(captchaResult, token);
+    }
+}
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/CaptchaEditResult.java 
b/wikipedia/src/main/java/org/wikipedia/editing/CaptchaEditResult.java
deleted file mode 100644
index d746713..0000000
--- a/wikipedia/src/main/java/org/wikipedia/editing/CaptchaEditResult.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.wikipedia.editing;
-
-import android.os.*;
-import org.wikipedia.*;
-
-// Handles only Image Captchas
-public class CaptchaEditResult extends EditingResult {
-    private final String captchaId;
-
-    public CaptchaEditResult(String captchaId) {
-        super("Failure");
-        this.captchaId = captchaId;
-    }
-
-    protected CaptchaEditResult(Parcel in) {
-        super(in);
-        captchaId = in.readString();
-    }
-
-    public String getCaptchaId() {
-        return captchaId;
-    }
-
-    public String getCaptchaUrl(Site site) {
-        return 
site.getFullUrl("/w/index.php?title=Special:Captcha/image&wpCaptchaId=" + 
captchaId);
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        super.writeToParcel(dest, flags);
-        dest.writeString(captchaId);
-    }
-
-    public static final Parcelable.Creator<CaptchaEditResult> CREATOR
-            = new Parcelable.Creator<CaptchaEditResult>() {
-        public CaptchaEditResult createFromParcel(Parcel in) {
-            return new CaptchaEditResult(in);
-        }
-
-        public CaptchaEditResult[] newArray(int size) {
-            return new CaptchaEditResult[size];
-        }
-    };
-
-}
diff --git a/wikipedia/src/main/java/org/wikipedia/editing/CaptchaResult.java 
b/wikipedia/src/main/java/org/wikipedia/editing/CaptchaResult.java
new file mode 100644
index 0000000..38b86f5
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/editing/CaptchaResult.java
@@ -0,0 +1,44 @@
+package org.wikipedia.editing;
+
+import android.os.*;
+import org.wikipedia.*;
+
+// Handles only Image Captchas
+public class CaptchaResult extends EditingResult {
+    private final String captchaId;
+
+    public CaptchaResult(String captchaId) {
+        super("Failure");
+        this.captchaId = captchaId;
+    }
+
+    protected CaptchaResult(Parcel in) {
+        super(in);
+        captchaId = in.readString();
+    }
+
+    public String getCaptchaId() {
+        return captchaId;
+    }
+
+    public String getCaptchaUrl(Site site) {
+        return 
site.getFullUrl("/w/index.php?title=Special:Captcha/image&wpCaptchaId=" + 
captchaId);
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        super.writeToParcel(dest, flags);
+        dest.writeString(captchaId);
+    }
+
+    public static final Parcelable.Creator<CaptchaResult> CREATOR
+            = new Parcelable.Creator<CaptchaResult>() {
+        public CaptchaResult createFromParcel(Parcel in) {
+            return new CaptchaResult(in);
+        }
+
+        public CaptchaResult[] newArray(int size) {
+            return new CaptchaResult[size];
+        }
+    };
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java 
b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java
index 091bf06..caaab0e 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java
@@ -52,7 +52,7 @@
             return new SuccessEditResult();
         } else if (status.equals("Failure")) {
             if (edit.has("captcha")) {
-                return new CaptchaEditResult(
+                return new CaptchaResult(
                         edit.optJSONObject("captcha").optString("id")
                 );
             }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java 
b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
index ac42e13..4cfc647 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
@@ -45,7 +45,7 @@
     private CommunicationBridge abusefilterBridge;
     private View abuseFilterBackAction;
 
-    private CaptchaEditResult captchaEditResult;
+    private CaptchaResult captchaEditResult;
     private AbuseFilterEditResult abusefilterEditResult;
 
     public void onCreate(Bundle savedInstanceState) {
@@ -115,7 +115,7 @@
                     }
 
                     @Override
-                    public void onFinish(CaptchaEditResult result) {
+                    public void onFinish(CaptchaResult result) {
                         captchaEditResult = result;
                         handleCaptcha(true);
                     }
@@ -220,8 +220,8 @@
                             Toast.makeText(EditSectionActivity.this, 
R.string.edit_saved_successfully, Toast.LENGTH_LONG).show();
                             Utils.hideSoftKeyboard(EditSectionActivity.this);
                             finish();
-                        } else if (result instanceof CaptchaEditResult) {
-                            captchaEditResult = (CaptchaEditResult) result;
+                        } else if (result instanceof CaptchaResult) {
+                            captchaEditResult = (CaptchaResult) result;
                             handleCaptcha();
                         } else if (result instanceof AbuseFilterEditResult) {
                             abusefilterEditResult = (AbuseFilterEditResult) 
result;
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java 
b/wikipedia/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java
index 3c06f81..4349d88 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java
@@ -6,7 +6,7 @@
 import org.wikipedia.*;
 import org.wikipedia.concurrency.*;
 
-public class RefreshCaptchaTask extends ApiTask<CaptchaEditResult> {
+public class RefreshCaptchaTask extends ApiTask<CaptchaResult> {
     public RefreshCaptchaTask(Context context, PageTitle title) {
         super(
                 ExecutorService.getSingleton().getExecutor(DoEditTask.class, 
1),
@@ -20,9 +20,9 @@
     }
 
     @Override
-    public CaptchaEditResult processResult(ApiResult result) throws Throwable {
+    public CaptchaResult processResult(ApiResult result) throws Throwable {
         Log.d("Wikipedia", result.asObject().toString(4));
-        return new CaptchaEditResult(
+        return new CaptchaResult(
                 result.asObject()
                         .optJSONObject("fancycaptchareload")
                         .optString("index")
diff --git a/wikipedia/src/main/java/org/wikipedia/login/LoginActivity.java 
b/wikipedia/src/main/java/org/wikipedia/login/LoginActivity.java
index bae3610..e063557 100644
--- a/wikipedia/src/main/java/org/wikipedia/login/LoginActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/login/LoginActivity.java
@@ -11,6 +11,7 @@
 import android.widget.*;
 import de.keyboardsurfer.android.widget.crouton.*;
 import org.wikipedia.*;
+import org.wikipedia.createaccount.*;
 
 public class LoginActivity extends ActionBarActivity {
     public static final int REQUEST_CODE_LOGIN = 1;

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I486bd9dc70a0cfddf6a1c280f0f6e8fa43245730
Gerrit-PatchSet: 2
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