Loading src/main/java/com/nextcloud/android/sso/api/NextcloudRetrofitServiceMethod.java +18 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.POST; Loading @@ -58,6 +61,7 @@ public class NextcloudRetrofitServiceMethod<T> { private @Nullable Headers headers; private Type returnType; private boolean followRedirects = false; private boolean formUrlEncoded = false; private final NextcloudRequest.Builder requestBuilder; Loading Loading @@ -118,6 +122,18 @@ public class NextcloudRetrofitServiceMethod<T> { headers.put(((Header) annotation).value(), arg); } rBuilder.setHeader(headers); } else if(annotation instanceof FieldMap) { if(args[i] != null) { Map<String, Object> fieldMap = (HashMap<String, Object>) args[i]; for (String key : fieldMap.keySet()) { parameters.put(key, fieldMap.get(key).toString()); } } } else if(annotation instanceof Field) { if(args[i] != null) { String field = args[i].toString(); parameters.put(((Field)annotation).value(), field); } } else { throw new UnsupportedOperationException("don't know this type yet.. [" + String.valueOf(annotation) + "]"); } Loading Loading @@ -173,6 +189,8 @@ public class NextcloudRetrofitServiceMethod<T> { throw methodError(method, "@Headers annotation is empty."); } headers = parseHeaders(headersToParse); } else if(annotation instanceof FormUrlEncoded) { formUrlEncoded = true; } else if(annotation instanceof NextcloudAPI.FollowRedirects) { followRedirects = true; } else { Loading src/test/java/com/nextcloud/android/sso/api/API.java +11 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,9 @@ import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.Headers; Loading Loading @@ -91,4 +94,12 @@ public interface API { @GET("/test") Call<Void> getFollowRedirects(); @FormUrlEncoded @POST("/test") Call<ResponseBody> postFormUrlEncodedFieldMap(@FieldMap Map<String, String> fields); @FormUrlEncoded @POST("/test") Call<ResponseBody> postFormUrlEncodedField(@Field("name") String name); } src/test/java/com/nextcloud/android/sso/api/TestRetrofitAPI.java +53 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; import io.reactivex.Completable; import okhttp3.ResponseBody; import retrofit2.NextcloudRetrofitApiBuilder; import static junit.framework.TestCase.fail; Loading Loading @@ -362,4 +363,56 @@ public class TestRetrofitAPI { fail(e.getMessage()); } } @Test public void testFormUrlEncodedFieldMap() { Map<String, String> map = new HashMap<>(); try { map.put("key", "value"); mApi.postFormUrlEncodedFieldMap(map).execute(); } catch (IOException e) { fail(e.getMessage()); } NextcloudRequest request = new NextcloudRequest.Builder() .setMethod("POST") .setUrl(mApiEndpoint + "test") .setParameter(map) .build(); Type type = new TypeToken<ResponseBody>() {}.getType(); try { verify(nextcloudApiMock).performRequest(eq(type), eq(request)); } catch (Exception e) { fail(e.getMessage()); } } @Test public void testFormUrlEncodedField() { String name = "myname"; try { mApi.postFormUrlEncodedField(name).execute(); } catch (IOException e) { fail(e.getMessage()); } Map<String, String> map = new HashMap<>(); map.put("name", name); NextcloudRequest request = new NextcloudRequest.Builder() .setMethod("POST") .setUrl(mApiEndpoint + "test") .setParameter(map) .build(); Type type = new TypeToken<ResponseBody>() {}.getType(); try { verify(nextcloudApiMock).performRequest(eq(type), eq(request)); } catch (Exception e) { fail(e.getMessage()); } } } Loading
src/main/java/com/nextcloud/android/sso/api/NextcloudRetrofitServiceMethod.java +18 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.POST; Loading @@ -58,6 +61,7 @@ public class NextcloudRetrofitServiceMethod<T> { private @Nullable Headers headers; private Type returnType; private boolean followRedirects = false; private boolean formUrlEncoded = false; private final NextcloudRequest.Builder requestBuilder; Loading Loading @@ -118,6 +122,18 @@ public class NextcloudRetrofitServiceMethod<T> { headers.put(((Header) annotation).value(), arg); } rBuilder.setHeader(headers); } else if(annotation instanceof FieldMap) { if(args[i] != null) { Map<String, Object> fieldMap = (HashMap<String, Object>) args[i]; for (String key : fieldMap.keySet()) { parameters.put(key, fieldMap.get(key).toString()); } } } else if(annotation instanceof Field) { if(args[i] != null) { String field = args[i].toString(); parameters.put(((Field)annotation).value(), field); } } else { throw new UnsupportedOperationException("don't know this type yet.. [" + String.valueOf(annotation) + "]"); } Loading Loading @@ -173,6 +189,8 @@ public class NextcloudRetrofitServiceMethod<T> { throw methodError(method, "@Headers annotation is empty."); } headers = parseHeaders(headersToParse); } else if(annotation instanceof FormUrlEncoded) { formUrlEncoded = true; } else if(annotation instanceof NextcloudAPI.FollowRedirects) { followRedirects = true; } else { Loading
src/test/java/com/nextcloud/android/sso/api/API.java +11 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,9 @@ import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.Headers; Loading Loading @@ -91,4 +94,12 @@ public interface API { @GET("/test") Call<Void> getFollowRedirects(); @FormUrlEncoded @POST("/test") Call<ResponseBody> postFormUrlEncodedFieldMap(@FieldMap Map<String, String> fields); @FormUrlEncoded @POST("/test") Call<ResponseBody> postFormUrlEncodedField(@Field("name") String name); }
src/test/java/com/nextcloud/android/sso/api/TestRetrofitAPI.java +53 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; import io.reactivex.Completable; import okhttp3.ResponseBody; import retrofit2.NextcloudRetrofitApiBuilder; import static junit.framework.TestCase.fail; Loading Loading @@ -362,4 +363,56 @@ public class TestRetrofitAPI { fail(e.getMessage()); } } @Test public void testFormUrlEncodedFieldMap() { Map<String, String> map = new HashMap<>(); try { map.put("key", "value"); mApi.postFormUrlEncodedFieldMap(map).execute(); } catch (IOException e) { fail(e.getMessage()); } NextcloudRequest request = new NextcloudRequest.Builder() .setMethod("POST") .setUrl(mApiEndpoint + "test") .setParameter(map) .build(); Type type = new TypeToken<ResponseBody>() {}.getType(); try { verify(nextcloudApiMock).performRequest(eq(type), eq(request)); } catch (Exception e) { fail(e.getMessage()); } } @Test public void testFormUrlEncodedField() { String name = "myname"; try { mApi.postFormUrlEncodedField(name).execute(); } catch (IOException e) { fail(e.getMessage()); } Map<String, String> map = new HashMap<>(); map.put("name", name); NextcloudRequest request = new NextcloudRequest.Builder() .setMethod("POST") .setUrl(mApiEndpoint + "test") .setParameter(map) .build(); Type type = new TypeToken<ResponseBody>() {}.getType(); try { verify(nextcloudApiMock).performRequest(eq(type), eq(request)); } catch (Exception e) { fail(e.getMessage()); } } }