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