diff --git a/wrapper/src/main/java/wekan/wrapper/api/CardCommentService.java b/wrapper/src/main/java/wekan/wrapper/api/CardCommentService.java new file mode 100644 index 0000000..e1c6dc5 --- /dev/null +++ b/wrapper/src/main/java/wekan/wrapper/api/CardCommentService.java @@ -0,0 +1,70 @@ +package wekan.wrapper.api; + +import retrofit2.Call; +import retrofit2.http.*; +import wekan.wrapper.entity.Comment; + +import java.util.List; + +public interface CardCommentService { + + /** + * Get all comments attached to a card. + * + * @param boardId The ID of the board + * @param cardId The ID of the card + * @return The list of the comments + */ + @GET("/api/boards/{boardId}/cards/{cardId}/comments") + Call> getAllComments( + @Path("boardId") String boardId, + @Path("cardId") String cardId + ); + + /** + * Post new comment attached on the give card. + * + * @param boardId The ID of the board + * @param cardId The ID of the card + * @param authorId The ID of the author + * @param comment The comment + * @return The id of the new comment + */ + @FormUrlEncoded + @POST("/api/boards/{boardId}/cards/{cardId}/comments") + Call postNewComment( + @Path("boardId") String boardId, + @Path("cardId") String cardId, + @Field("authorId") String authorId, + @Field("comment") String comment + ); + + /** + * Get a comment attached to a card. + * + * @param boardId The ID of the board + * @param cardId The ID of the card + * @param commentId The ID of the comment + * @return The comment + */ + @GET("/api/boards/{boardId}/cards/{cardId}/comments/{commentId}") + Call getComment( + @Path("boardId") String boardId, + @Path("cardId") String cardId, + @Path("commentId") String commentId + ); + + /** + * Delete a comment attached to a card. + * + * @param boardId The ID of the board + * @param cardId The ID of the card + * @param commentId The ID of the comment + */ + @DELETE("/api/boards/{boardId}/cards/{cardId}/comments/{commentId}") + Call deleteComment( + @Path("boardId") String boardId, + @Path("cardId") String cardId, + @Path("commentId") String commentId + ); +} diff --git a/wrapper/src/main/java/wekan/wrapper/entity/Comment.java b/wrapper/src/main/java/wekan/wrapper/entity/Comment.java new file mode 100644 index 0000000..cef3fd1 --- /dev/null +++ b/wrapper/src/main/java/wekan/wrapper/entity/Comment.java @@ -0,0 +1,59 @@ +package wekan.wrapper.entity; + +import com.google.gson.annotations.SerializedName; + +import java.util.Date; + +public class Comment { + @SerializedName("_id") + private String id; + @SerializedName(value = "comment", alternate = "text") + private String comment; + @SerializedName(value = "authorId", alternate = "userId") + private String authorId; + private String boardId; + private String cardId; + private Date createdAt; + private Date modifiedAt; + + public String getId() { + return id; + } + + public String getComment() { + return comment; + } + + public String getAuthorId() { + return authorId; + } + + public String getBoardId() { + return boardId; + } + + public String getCardId() { + return cardId; + } + + public Date getCreatedAt() { + return createdAt; + } + + public Date getModifiedAt() { + return modifiedAt; + } + + @Override + public String toString() { + return "Comment{" + + "id='" + id + '\'' + + ", comment='" + comment + '\'' + + ", authorId='" + authorId + '\'' + + ", boardId='" + boardId + '\'' + + ", cardId='" + cardId + '\'' + + ", createdAt=" + createdAt + + ", modifiedAt=" + modifiedAt + + '}'; + } +} diff --git a/wrapper/src/test/java/wekan/wrapper/api/CardCommentServiceTest.java b/wrapper/src/test/java/wekan/wrapper/api/CardCommentServiceTest.java new file mode 100644 index 0000000..31ab537 --- /dev/null +++ b/wrapper/src/test/java/wekan/wrapper/api/CardCommentServiceTest.java @@ -0,0 +1,132 @@ +package wekan.wrapper.api; + +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; +import wekan.wrapper.entity.Comment; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class CardCommentServiceTest { + private MockWebServer mockWebServer = new MockWebServer(); + private CardCommentService service = null; + + @Before + public void setUp() { + try { + mockWebServer.start(); + service = new Retrofit.Builder() + .baseUrl(mockWebServer.url("/")) + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(CardCommentService.class); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @After + public void teardown() { + try { + mockWebServer.shutdown(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void getAllComments() { + MockResponse response = new MockResponse() + .setResponseCode(HttpURLConnection.HTTP_OK) + .setBody( + "[ " + COMMENT_1 + ", " + COMMENT_2 + ", " + COMMENT_3 + " ]" + ); + + mockWebServer.enqueue(response); + + try { + List lists = service.getAllComments("board id", "card id") + .execute().body(); + + assertNotNull(lists); + assertEquals(3, lists.size()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void postNewComment() { + MockResponse response = new MockResponse() + .setResponseCode(HttpURLConnection.HTTP_OK) + .setBody(COMMENT_1); + + mockWebServer.enqueue(response); + + try { + Comment comment = service.postNewComment( + "board id", + "card id", + "author id", + "comment" + ).execute().body(); + + assertNotNull(comment); + assertNotNull(comment.getId()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void getComment() { + MockResponse response = new MockResponse() + .setResponseCode(HttpURLConnection.HTTP_OK) + .setBody(COMMENT_3); + + mockWebServer.enqueue(response); + + try { + Comment comment = service.getComment( + "board id", + "card id", + "comment id" + ).execute().body(); + + assertNotNull(comment); + assertNotNull(comment.getAuthorId()); + assertNotNull(comment.getComment()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private final static String COMMENT_1 = "{" + + "\"_id\":\"zwzAgjHdW4fNJ9YLc\"," + + "\"comment\":\"comment 1\"," + + "\"authorId\":\"Si69gNgkJfQuk6uiJ\"" + + "}"; + private final static String COMMENT_2 = "{" + + "\"_id\":\"zwzAgjHdW4fNJ9YLt\"," + + "\"comment\":\"comment 2\"," + + "\"authorId\":\"Si69gNgkJfQuk6uiJ\"" + + "}"; + private final static String COMMENT_3 = "{" + + "\"_id\":\"DofhD9v96DbX7Wirp\"," + + "\"userId\":\"Si69gNgkJfQuk6uiJ\"," + + "\"text\":\"commento api\"," + + "\"cardId\":\"XQtnuqWEJnEcm6iy2\"," + + "\"boardId\":\"TtjXrJyvPkG3xsbkw\"," + + "\"createdAt\":\"2019-11-12T20:12:55.749Z\"," + + "\"modifiedAt\":\"2019-11-12T20:12:55.749Z\"" + + "}"; +}