diff --git a/wrapper/src/main/java/wekan/wrapper/api/LoginService.java b/wrapper/src/main/java/wekan/wrapper/api/LoginService.java new file mode 100644 index 0000000..db1f7d9 --- /dev/null +++ b/wrapper/src/main/java/wekan/wrapper/api/LoginService.java @@ -0,0 +1,20 @@ +package wekan.wrapper.api; + +import retrofit2.Call; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; +import wekan.wrapper.entity.UserPrototype; + +public interface LoginService { + + /** + * + * @param username + * @param password + * @return User id and token + */ + @FormUrlEncoded + @POST("/users/login") + Call login(@Field("username") String username, @Field("password") String password); +} diff --git a/wrapper/src/main/java/wekan/wrapper/api/UserService.java b/wrapper/src/main/java/wekan/wrapper/api/UserService.java index 6616895..9b23913 100644 --- a/wrapper/src/main/java/wekan/wrapper/api/UserService.java +++ b/wrapper/src/main/java/wekan/wrapper/api/UserService.java @@ -1,8 +1,10 @@ package wekan.wrapper.api; import retrofit2.Call; -import retrofit2.http.GET; -import retrofit2.http.Path; +import retrofit2.http.*; +import wekan.wrapper.entity.Action; +import wekan.wrapper.entity.Board; +import wekan.wrapper.entity.BoardPrototype; import wekan.wrapper.entity.User; import java.util.List; @@ -26,4 +28,46 @@ public interface UserService { @GET("api/users/{user}") Call getUser(@Path("user") String userId); + /** + * Get current User + * @return the current user + */ + @GET("api/user") + Call getCurrentUser(); + + + /** + * Delete user + * @param userId + * @return + */ + @DELETE("api/users/{user}") + Call delete(@Path("user") String userId); + + +/******************** Don't work ****************************************************/ + + @FormUrlEncoded + @POST("api/users") + @Headers("Content-Type: multipart/form-data") + Call newUser(@Field("username") String username, + @Field("email") String email, + @Field("password") String password + ); + + + + @FormUrlEncoded + @Headers("Content-Type: multipart/form-data") + @POST("/api/boards/{board}/members/{user}/add") + Call addMemberToBoard(@Path("board") String boardId, @Path("user") String userId, + @Field("action") String action, + @Field("isAdmin") boolean b1, + @Field("isNoComments") boolean b2, + @Field("isCommentOnly") boolean b3); + + @POST("api/boards/{board}/members/{user}/remove") + Call removeUserFromBoard(@Path("board") String boardId, @Path("user") String userId, + @Body Action action); + } diff --git a/wrapper/src/test/java/wekan/wrapper/api/UserServiceTest.java b/wrapper/src/test/java/wekan/wrapper/api/UserServiceTest.java index 473354b..423722b 100644 --- a/wrapper/src/test/java/wekan/wrapper/api/UserServiceTest.java +++ b/wrapper/src/test/java/wekan/wrapper/api/UserServiceTest.java @@ -6,6 +6,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; + +import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import wekan.wrapper.entity.Service; @@ -13,6 +15,7 @@ import wekan.wrapper.entity.User; import wekan.wrapper.entity.UserEmail; import wekan.wrapper.entity.UserProfile; +import javax.jws.soap.SOAPBinding; import java.io.IOException; import java.net.HttpURLConnection; import java.util.List; @@ -110,6 +113,37 @@ public class UserServiceTest { } + @Test + public void getCurrentUser(){ + MockResponse mockResponse = new MockResponse() + .setResponseCode(HttpURLConnection.HTTP_OK) + .setBody(user2); + mockWebServer.enqueue(mockResponse); + + try { + User user = service.getCurrentUser().execute().body(); + assert user != null; + UserProfile userProfile = user.getProfile(); + assertNotNull(user); + assertEquals("jPdkf3a9bmfZWx3GR", user.getId()); + assertEquals("umberto", user.getUsername()); + assertEquals("password", user.getAuthenticationMethod()); + assertTrue(user.isAdmin()); + assertFalse(user.isLoginDisabled()); + assertFalse(user.getEmails().isEmpty()); + assertEquals(1, user.getEmails().size()); + assertEquals("my@email.com", user.getEmails().get(0).getEmail()); + assertNotNull(userProfile); + assertEquals("zo82BZYxFTNBpb7jX", + userProfile.getCardTemplatesSwimlaneId()); + assertEquals("j6ZuPbwaN9nsCDxyS", + userProfile.getBoardTemplatesSwimlaneId()); + } catch (IOException e) { + e.printStackTrace(); + } + + } + private static final String user1 = "{" + "\"_id\":\"jPdkf3a9bmfZWx3GR\"," + @@ -150,4 +184,21 @@ public class UserServiceTest { " }\n" + "}\n" + "}"; + + private final String user2 = "{" + + "\"_id\":\"jPdkf3a9bmfZWx3GR\"," + + "\"createdAt\":\"2019-10-14T18:14:38.249Z\"," + + "\"username\":\"umberto\"," + + "\"emails\":[{\"address\":\"my@email.com\"," + + "\"verified\":false}]," + + "\"modifiedAt\":\"2019-11-09T17:55:36.976Z\"," + + "\"profile\":{\"boardView\":\"board-view-swimlanes\"," + + "\"templatesBoardId\":\"eLvE8FnqvACfC9Rtb\"," + + "\"cardTemplatesSwimlaneId\":\"zo82BZYxFTNBpb7jX\"," + + "\"listTemplatesSwimlaneId\":\"Kja32A85P2HADWKFA\"," + + "\"boardTemplatesSwimlaneId\":\"j6ZuPbwaN9nsCDxyS\"," + + "\"listSortBy\":\"-modifiedAt\"}," + + "\"authenticationMethod\":\"password\"," + + "\"isAdmin\":true," + + "\"loginDisabled\":false}"; }