aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java')
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java
new file mode 100644
index 000000000..6f066d6d1
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/mocks/RestClientCustomizableMock.java
@@ -0,0 +1,150 @@
+package org.wordpress.android.mocks;
+
+import android.content.Context;
+
+import com.android.volley.NetworkResponse;
+import com.android.volley.Request.Method;
+import com.android.volley.TimeoutError;
+import com.android.volley.VolleyError;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestRequest;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wordpress.android.TestUtils;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class RestClientCustomizableMock extends RestClient {
+ private Context mContext;
+ private String mPrefix;
+
+ public void setContextAndPrefix(Context context, String prefix) {
+ mContext = context;
+ mPrefix = prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ mPrefix = prefix;
+ }
+
+ public void setContext(Context context) {
+ mContext = context;
+ }
+
+ public RestClientCustomizableMock(com.android.volley.RequestQueue queue) {
+ super(queue);
+ }
+
+ public RestClientCustomizableMock(com.android.volley.RequestQueue queue, String token) {
+ super(queue, token, REST_API_ENDPOINT_URL_V1);
+ }
+
+ public String getAbsoluteURL(String url) {
+ return null;
+ }
+
+ public String getAbsoluteURL(String path, java.util.Map<String, String> params) {
+ return null;
+ }
+
+ public RestRequest get(String path, RestRequest.Listener listener, RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": get(" + path + ")");
+ return new RestRequest(Method.GET, path, null, listener, errorListener);
+ }
+
+ public RestRequest post(String path, java.util.Map<String, String> body, RestRequest.Listener listener,
+ RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": post(" + path + ")");
+ return new RestRequest(Method.POST, path, body, listener, errorListener);
+ }
+
+ private VolleyError forgeVolleyErrorFromFilename(String filename) {
+ String strData = fileToString(filename);
+ byte[] data = new byte[0];
+ if (strData != null) {
+ data = strData.getBytes();
+ }
+ NetworkResponse networkResponse = new NetworkResponse(400, data, null, false);
+ VolleyError ve = new VolleyError(networkResponse);
+ return ve;
+ }
+
+ private TimeoutError forgeVolleyTimeoutError() {
+ TimeoutError te = new TimeoutError();
+ return te;
+ }
+
+ private String fileToString(String filename) {
+ try {
+ InputStream is = mContext.getAssets().open(filename);
+ String data = TestUtils.convertStreamToString(is);
+ AppLog.v(T.TESTS, "file read:" + filename);
+ return data;
+ } catch (IOException e) {
+ AppLog.e(T.TESTS, "can't read file: " + filename + " - " + e.toString());
+ }
+ return null;
+ }
+
+ public RestRequest makeRequest(int method, String url, java.util.Map<String, String> params,
+ RestRequest.Listener listener, RestRequest.ErrorListener errorListener) {
+ AppLog.v(T.TESTS, this.getClass() + ": makeRequest(" + url + ")");
+ RestRequest dummyReturnValue = new RestRequest(method, url, params, listener, errorListener);
+ // URL example: https://public-api.wordpress.com/rest/v1/me
+ // Filename: default-public-api-wordpress-com-rest-v1-me.json
+ String filename = mPrefix + "-" + url.replace("https://", "").replace("/", "-").replace(".", "-").replace("?",
+ "-") + ".json";
+
+ if ("password-invalid".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ if ("username-exists".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ if ("timeout".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyTimeoutError());
+ return dummyReturnValue;
+ }
+
+ if ("site-reserved".equals(mPrefix) && errorListener != null) {
+ errorListener.onErrorResponse(forgeVolleyErrorFromFilename(filename));
+ return dummyReturnValue;
+ }
+
+ String data = fileToString(filename);
+ if (data == null) {
+ AppLog.e(T.TESTS, "Can't read file: " + filename);
+ throw new RuntimeException("Can't read file: " + filename);
+ }
+
+ try {
+ JSONObject jsonObj = new JSONObject(data);
+ listener.onResponse(jsonObj);
+ } catch (JSONException je) {
+ AppLog.e(T.TESTS, je.toString());
+ }
+ return dummyReturnValue;
+ }
+
+ public RestRequest send(RestRequest request) {
+ return request;
+ }
+
+ public void setUserAgent(String userAgent) {
+ }
+
+ public void setAccessToken(String token) {
+ }
+
+ public boolean isAuthenticated() {
+ return true;
+ }
+}