Merge branch 'feature_comments' of kanban/wedroid into develop
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
noemi3 2019-11-13 16:40:31 +00:00 committed by Gitea
commit 450c4503da
3 changed files with 261 additions and 0 deletions

View File

@ -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<List<Comment>> 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<Comment> 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<Comment> 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<Void> deleteComment(
@Path("boardId") String boardId,
@Path("cardId") String cardId,
@Path("commentId") String commentId
);
}

View File

@ -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 +
'}';
}
}

View File

@ -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<Comment> 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\"" +
"}";
}