feature_card #4
24
.drone.yml
Normal file
24
.drone.yml
Normal file
@ -0,0 +1,24 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: gradle:5.6.3
|
||||
commands:
|
||||
- gradle build
|
||||
|
||||
- name: notify
|
||||
image: appleboy/drone-telegram
|
||||
settings:
|
||||
token:
|
||||
from_secret: telegram_token
|
||||
to:
|
||||
from_secret: telegram_user
|
||||
format: markdown
|
||||
message: |
|
||||
Build {{build.number}} from commit [{{truncate commit.sha 10}}]({{commit.link}}) **failed**.
|
||||
{{uppercasefirst commit.author}} please fix me!
|
||||
when:
|
||||
status:
|
||||
- failure
|
@ -9,6 +9,8 @@ dependencies {
|
||||
implementation("com.squareup.retrofit2:retrofit:$retrofitVersion")
|
||||
implementation("com.squareup.retrofit2:converter-gson:$retrofitVersion")
|
||||
|
||||
// mock server response
|
||||
testImplementation("com.squareup.okhttp3:mockwebserver:4.2.1")
|
||||
// use JUnit test framework
|
||||
testImplementation("junit:junit:4.12")
|
||||
}
|
||||
|
86
wrapper/src/main/java/wekan/wrapper/api/BoardService.java
Normal file
86
wrapper/src/main/java/wekan/wrapper/api/BoardService.java
Normal file
@ -0,0 +1,86 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.*;
|
||||
import wekan.wrapper.entity.Board;
|
||||
import wekan.wrapper.entity.LabelPrototype;
|
||||
import wekan.wrapper.entity.MemberPermission;
|
||||
import wekan.wrapper.entity.BoardPrototype;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BoardService {
|
||||
|
||||
/**
|
||||
* Get all public boards.
|
||||
*
|
||||
* @return the list with all public boards
|
||||
*/
|
||||
@GET("api/boards")
|
||||
Call<List<Board>> getPublicBoards();
|
||||
|
||||
/**
|
||||
* Create a board.
|
||||
*
|
||||
* @param boardPrototype the prototype of the new board
|
||||
* @return the new board
|
||||
* @see BoardPrototype
|
||||
*/
|
||||
@POST("api/boards")
|
||||
Call<Board> newBoard(@Body BoardPrototype boardPrototype);
|
||||
|
||||
/**
|
||||
* Get the board with that particular ID.
|
||||
*
|
||||
* @param boardId The ID of the board
|
||||
* @return The board with the matching ID
|
||||
*/
|
||||
@GET("api/boards/{boardId}")
|
||||
Call<Board> getBoard(@Path("boardId") String boardId);
|
||||
|
||||
/**
|
||||
* Delete the board with that particular ID
|
||||
*
|
||||
* @param boardId The ID of the board
|
||||
*/
|
||||
@DELETE("api/boards/{boardId}")
|
||||
Call<Void> deleteBoard(@Path("boardId") String boardId);
|
||||
|
||||
/**
|
||||
* Add a label to a board.
|
||||
*
|
||||
* @param boardId The ID of the board
|
||||
* @param labelPrototype The prototype of new label
|
||||
* @return The ID of new label
|
||||
* @see LabelPrototype
|
||||
*/
|
||||
@PUT("/api/boards/{boardId}/labels")
|
||||
Call<String> addLabel(
|
||||
@Path("boardId") String boardId,
|
||||
@Body LabelPrototype labelPrototype
|
||||
);
|
||||
|
||||
/**
|
||||
* Change the permission of a member of a board.
|
||||
*
|
||||
* @param boardId The ID of the board
|
||||
* @param memberId The ID of the member
|
||||
* @param memberPermission The new role of the member
|
||||
* @see MemberPermission
|
||||
*/
|
||||
@POST("/api/boards/{boardId}/members/{memberId}")
|
||||
Call<Void> setMemberPermission(
|
||||
@Path("boardId") String boardId,
|
||||
@Path("memberId") String memberId,
|
||||
@Body MemberPermission memberPermission
|
||||
);
|
||||
|
||||
/**
|
||||
* Get all boards attached to a user.
|
||||
*
|
||||
* @param userId The ID of the user
|
||||
* @return The list with all user's boards
|
||||
*/
|
||||
@GET("api/users/{userId}/boards")
|
||||
Call<List<Board>> getBoardsFromUser(@Path("userId") String userId);
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
public interface ExampleApi {
|
||||
}
|
155
wrapper/src/main/java/wekan/wrapper/entity/Board.java
Normal file
155
wrapper/src/main/java/wekan/wrapper/entity/Board.java
Normal file
@ -0,0 +1,155 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class Board {
|
||||
@SerializedName("_id")
|
||||
private String id;
|
||||
private String title;
|
||||
private String slug;
|
||||
private boolean archived;
|
||||
private Date createdAt;
|
||||
private Date modifiedAt;
|
||||
private int starts;
|
||||
private List<Label> labels;
|
||||
private List<Member> members;
|
||||
private BoardPermission permission;
|
||||
@SerializedName("color")
|
||||
private BoardBackgroundColor backgroundColor;
|
||||
private String description;
|
||||
private String subtasksDefaultBoardId;
|
||||
private String subtasksDefaultListId;
|
||||
private boolean allowsSubtasks;
|
||||
private PresentParentTask presentParentTask;
|
||||
private Date startAt;
|
||||
private Date dueAt;
|
||||
private Date endAt;
|
||||
private int spentTime;
|
||||
private boolean isOvertime;
|
||||
private String type;
|
||||
private String defaultSwimlaneId;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public String getSlug() {
|
||||
return slug;
|
||||
}
|
||||
|
||||
public boolean isArchived() {
|
||||
return archived;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public Date getModifiedAt() {
|
||||
return modifiedAt;
|
||||
}
|
||||
|
||||
public int getStarts() {
|
||||
return starts;
|
||||
}
|
||||
|
||||
public List<Label> getLabels() {
|
||||
return labels;
|
||||
}
|
||||
|
||||
public List<Member> getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public BoardPermission getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
public BoardBackgroundColor getBackgroundColor() {
|
||||
return backgroundColor;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getSubtasksDefaultBoardId() {
|
||||
return subtasksDefaultBoardId;
|
||||
}
|
||||
|
||||
public String getSubtasksDefaultListId() {
|
||||
return subtasksDefaultListId;
|
||||
}
|
||||
|
||||
public boolean isAllowsSubtasks() {
|
||||
return allowsSubtasks;
|
||||
}
|
||||
|
||||
public PresentParentTask getPresentParentTask() {
|
||||
return presentParentTask;
|
||||
}
|
||||
|
||||
public Date getStartAt() {
|
||||
return startAt;
|
||||
}
|
||||
|
||||
public Date getDueAt() {
|
||||
return dueAt;
|
||||
}
|
||||
|
||||
public Date getEndAt() {
|
||||
return endAt;
|
||||
}
|
||||
|
||||
public int getSpentTime() {
|
||||
return spentTime;
|
||||
}
|
||||
|
||||
public boolean isOvertime() {
|
||||
return isOvertime;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getDefaultSwimlaneId() {
|
||||
return defaultSwimlaneId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Board{" +
|
||||
"id='" + id + '\'' +
|
||||
", title='" + title + '\'' +
|
||||
", slug='" + slug + '\'' +
|
||||
", archived=" + archived +
|
||||
", createdAt=" + createdAt +
|
||||
", modifiedAt=" + modifiedAt +
|
||||
", starts=" + starts +
|
||||
", labels=" + labels +
|
||||
", members=" + members +
|
||||
", permission=" + permission +
|
||||
", backgroundColor=" + backgroundColor +
|
||||
", description='" + description + '\'' +
|
||||
", subtasksDefaultBoardId='" + subtasksDefaultBoardId + '\'' +
|
||||
", subtasksDefaultListId='" + subtasksDefaultListId + '\'' +
|
||||
", allowsSubtasks=" + allowsSubtasks +
|
||||
", presentParentTask=" + presentParentTask +
|
||||
", startAt=" + startAt +
|
||||
", dueAt=" + dueAt +
|
||||
", endAt=" + endAt +
|
||||
", spentTime=" + spentTime +
|
||||
", isOvertime=" + isOvertime +
|
||||
", type='" + type + '\'' +
|
||||
", defaultSwimlaneId='" + defaultSwimlaneId + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum BoardBackgroundColor {
|
||||
@SerializedName("belize")
|
||||
BELIZE,
|
||||
@SerializedName("nephritis")
|
||||
NEPHRITIS,
|
||||
@SerializedName("pomegranate")
|
||||
POMEGRANATE,
|
||||
@SerializedName("pumpkin")
|
||||
PUMPIK,
|
||||
@SerializedName("wisteria")
|
||||
WISTERIA,
|
||||
@SerializedName("moderatepink")
|
||||
MODERATEPINK,
|
||||
@SerializedName("strongcyan")
|
||||
STRONGCYAN,
|
||||
@SerializedName("limegreen")
|
||||
LIMEGREEN,
|
||||
@SerializedName("midnight")
|
||||
MIDNIGHT,
|
||||
@SerializedName("dark")
|
||||
DARK,
|
||||
@SerializedName("relax")
|
||||
RELAX,
|
||||
@SerializedName("corteza")
|
||||
CORTEZA
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum BoardPermission {
|
||||
@SerializedName("public")
|
||||
PUBLIC,
|
||||
@SerializedName("private")
|
||||
PRIVATE
|
||||
}
|
133
wrapper/src/main/java/wekan/wrapper/entity/BoardPrototype.java
Normal file
133
wrapper/src/main/java/wekan/wrapper/entity/BoardPrototype.java
Normal file
@ -0,0 +1,133 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
/**
|
||||
* Describes the properties of the new board
|
||||
*/
|
||||
public class BoardPrototype {
|
||||
private String title;
|
||||
private String owner;
|
||||
private boolean isAdmin;
|
||||
private boolean isActive;
|
||||
private boolean isNoComments;
|
||||
private boolean isCommentOnly;
|
||||
private BoardPermission permission;
|
||||
@SerializedName("color")
|
||||
private BoardBackgroundColor backgroundColor;
|
||||
|
||||
private BoardPrototype(
|
||||
String title,
|
||||
String owner,
|
||||
boolean isAdmin,
|
||||
boolean isActive,
|
||||
boolean isNoComments,
|
||||
boolean isCommentOnly,
|
||||
BoardPermission permission,
|
||||
BoardBackgroundColor backgroundColor
|
||||
) {
|
||||
this.title = title;
|
||||
this.owner = owner;
|
||||
this.isAdmin = isAdmin;
|
||||
this.isActive = isActive;
|
||||
this.isNoComments = isNoComments;
|
||||
this.isCommentOnly = isCommentOnly;
|
||||
this.permission = permission;
|
||||
this.backgroundColor = backgroundColor;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private String title;
|
||||
private String owner;
|
||||
private boolean isActive = true;
|
||||
private MemberPermission memberPermission = MemberPermission.ADMIN;
|
||||
private BoardPermission boardPermission = BoardPermission.PRIVATE;
|
||||
private BoardBackgroundColor backgroundColor = BoardBackgroundColor.BELIZE;
|
||||
|
||||
public Builder() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new BoardPrototype
|
||||
*
|
||||
* @return The board prototype
|
||||
*/
|
||||
public BoardPrototype build() {
|
||||
return new BoardPrototype(
|
||||
title,
|
||||
owner,
|
||||
memberPermission.isAdmin(),
|
||||
isActive,
|
||||
memberPermission.isNoComments(),
|
||||
memberPermission.isCommentOnly(),
|
||||
boardPermission,
|
||||
backgroundColor
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the title of the new board.
|
||||
*
|
||||
* @param title The title of the new board
|
||||
*/
|
||||
public Builder setTitle(String title) {
|
||||
this.title = title;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the owner of the new board.
|
||||
*
|
||||
* @param owner The owner of the new board
|
||||
*/
|
||||
public Builder setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the owner like an active member of the new board.
|
||||
*
|
||||
* @param active True by default
|
||||
*/
|
||||
public Builder setActive(boolean active) {
|
||||
isActive = active;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the permission of the owner on the new board.
|
||||
*
|
||||
* @param memberPermission ADMIN by default
|
||||
* @see MemberPermission
|
||||
*/
|
||||
public Builder setMemberPermission(MemberPermission memberPermission) {
|
||||
this.memberPermission = memberPermission;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the visibility of the new board.
|
||||
*
|
||||
* @param boardPermission PRIVATE by default
|
||||
* @see BoardPermission
|
||||
*/
|
||||
public Builder setBoardPermission(BoardPermission boardPermission) {
|
||||
this.boardPermission = boardPermission;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the background color of the new board.
|
||||
*
|
||||
* @param backgroundColor BELIZE by default
|
||||
* @see BoardBackgroundColor
|
||||
*/
|
||||
public Builder setBackgroundColor(BoardBackgroundColor backgroundColor) {
|
||||
this.backgroundColor = backgroundColor;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
56
wrapper/src/main/java/wekan/wrapper/entity/Color.java
Normal file
56
wrapper/src/main/java/wekan/wrapper/entity/Color.java
Normal file
@ -0,0 +1,56 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum Color {
|
||||
@SerializedName("white")
|
||||
WHITE,
|
||||
@SerializedName("green")
|
||||
GREEN,
|
||||
@SerializedName("yellow")
|
||||
YELLOW,
|
||||
@SerializedName("orange")
|
||||
ORANGE,
|
||||
@SerializedName("red")
|
||||
RED,
|
||||
@SerializedName("purple")
|
||||
PURPLE,
|
||||
@SerializedName("blue")
|
||||
BLUE,
|
||||
@SerializedName("sky")
|
||||
SKY,
|
||||
@SerializedName("lime")
|
||||
LIME,
|
||||
@SerializedName("pink")
|
||||
PINK,
|
||||
@SerializedName("black")
|
||||
BLACK,
|
||||
@SerializedName("silver")
|
||||
SILVER,
|
||||
@SerializedName("peachpuff")
|
||||
PEACHPUFF,
|
||||
@SerializedName("crimson")
|
||||
CRIMSON,
|
||||
@SerializedName("plum")
|
||||
PLUM,
|
||||
@SerializedName("darkgreen")
|
||||
DARKGREEN,
|
||||
@SerializedName("slateblue")
|
||||
SLATEBLUE,
|
||||
@SerializedName("magenta")
|
||||
MAGENTA,
|
||||
@SerializedName("gold")
|
||||
GOLD,
|
||||
@SerializedName("navy")
|
||||
NAVY,
|
||||
@SerializedName("gray")
|
||||
GRAY,
|
||||
@SerializedName("saddlebrown")
|
||||
SADDLEBROWN,
|
||||
@SerializedName("paleturquoise")
|
||||
PALETURQUOISE,
|
||||
@SerializedName("mistyrose")
|
||||
MISTYROSE,
|
||||
@SerializedName("indigo")
|
||||
INDIGO
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
public class ExampleEntity {
|
||||
|
||||
}
|
37
wrapper/src/main/java/wekan/wrapper/entity/Label.java
Normal file
37
wrapper/src/main/java/wekan/wrapper/entity/Label.java
Normal file
@ -0,0 +1,37 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public class Label {
|
||||
@SerializedName("_id")
|
||||
private String id;
|
||||
private String name;
|
||||
private Color color;
|
||||
|
||||
public Label(String id, String name, Color color) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Label{" +
|
||||
"id='" + id + '\'' +
|
||||
", name='" + name + '\'' +
|
||||
", color=" + color +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
/**
|
||||
* Describes the properties of the new label.
|
||||
*/
|
||||
public class LabelPrototype {
|
||||
private Label label;
|
||||
|
||||
/**
|
||||
* @param name The name of the new label
|
||||
* @param color The color of the new label
|
||||
*/
|
||||
public LabelPrototype(String name, Color color) {
|
||||
label = new Label(null, name, color);
|
||||
}
|
||||
}
|
48
wrapper/src/main/java/wekan/wrapper/entity/Member.java
Normal file
48
wrapper/src/main/java/wekan/wrapper/entity/Member.java
Normal file
@ -0,0 +1,48 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
public class Member {
|
||||
private String userId;
|
||||
private boolean isActive;
|
||||
private boolean isAdmin;
|
||||
private boolean isNoComments;
|
||||
private boolean isCommentOnly;
|
||||
|
||||
public Member(String userId, boolean isActive, boolean isAdmin, boolean isNoComments, boolean isCommentOnly) {
|
||||
this.userId = userId;
|
||||
this.isActive = isActive;
|
||||
this.isAdmin = isAdmin;
|
||||
this.isNoComments = isNoComments;
|
||||
this.isCommentOnly = isCommentOnly;
|
||||
}
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
public boolean isAdmin() {
|
||||
return isAdmin;
|
||||
}
|
||||
|
||||
public boolean isNoComments() {
|
||||
return isNoComments;
|
||||
}
|
||||
|
||||
public boolean isCommentOnly() {
|
||||
return isCommentOnly;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Member{" +
|
||||
"userId='" + userId + '\'' +
|
||||
", isActive=" + isActive +
|
||||
", isAdmin=" + isAdmin +
|
||||
", isNoComments=" + isNoComments +
|
||||
", isCommentOnly=" + isCommentOnly +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
public class MemberPermission {
|
||||
/**
|
||||
* The user is an admin of the board
|
||||
*/
|
||||
public final static MemberPermission ADMIN = new MemberPermission(
|
||||
true,
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
/**
|
||||
* The use is an normal member of the board
|
||||
*/
|
||||
public final static MemberPermission NORMAL = new MemberPermission(
|
||||
false,
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
/**
|
||||
* The user isn't allowed to make comments on the board
|
||||
*/
|
||||
public final static MemberPermission NO_COMMENTS = new MemberPermission(
|
||||
false,
|
||||
true,
|
||||
false
|
||||
);
|
||||
|
||||
/**
|
||||
* The user is only allowed to make comments on the board
|
||||
*/
|
||||
public final static MemberPermission COMMENT_ONLY = new MemberPermission(
|
||||
false,
|
||||
false,
|
||||
true
|
||||
);
|
||||
|
||||
private boolean isAdmin;
|
||||
private boolean isNoComments;
|
||||
private boolean isCommentOnly;
|
||||
|
||||
private MemberPermission(boolean isAdmin, boolean isNoComments, boolean isCommentOnly) {
|
||||
this.isAdmin = isAdmin;
|
||||
this.isNoComments = isNoComments;
|
||||
this.isCommentOnly = isCommentOnly;
|
||||
}
|
||||
|
||||
public boolean isAdmin() {
|
||||
return isAdmin;
|
||||
}
|
||||
|
||||
public boolean isNoComments() {
|
||||
return isNoComments;
|
||||
}
|
||||
|
||||
public boolean isCommentOnly() {
|
||||
return isCommentOnly;
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum PresentParentTask {
|
||||
@SerializedName("prefix-with-full-path")
|
||||
PREFIX_WITH_FULL_PATH,
|
||||
@SerializedName("prefix-with-parent")
|
||||
PREFIX_WITH_PARENT,
|
||||
@SerializedName("subtext-with-full-path")
|
||||
SUBTEXT_WITH_FULL_PATH,
|
||||
@SerializedName("subtext-with-parent")
|
||||
SUBTEXT_WITH_PARENT,
|
||||
@SerializedName("no-parent")
|
||||
NO_PARENT
|
||||
}
|
213
wrapper/src/test/java/wekan/wrapper/api/BoardServiceTest.java
Normal file
213
wrapper/src/test/java/wekan/wrapper/api/BoardServiceTest.java
Normal file
@ -0,0 +1,213 @@
|
||||
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.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class BoardServiceTest {
|
||||
private MockWebServer mockWebServer = new MockWebServer();
|
||||
private BoardService service = null;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
try {
|
||||
mockWebServer.start();
|
||||
service = new Retrofit.Builder()
|
||||
.baseUrl(mockWebServer.url("/"))
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
.create(BoardService.class);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@After
|
||||
public void teardown() {
|
||||
try {
|
||||
mockWebServer.shutdown();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getPublicBoard() {
|
||||
MockResponse response = new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_OK)
|
||||
.setBody(
|
||||
"[{\"_id\":\"e7pJ3T7WciDz5P2v0\",\"title\":\"board 0\"}," +
|
||||
"{\"_id\":\"e7pJ3T7WciDz5P2v1\",\"title\":\"board 1\"}]"
|
||||
);
|
||||
|
||||
mockWebServer.enqueue(response);
|
||||
|
||||
try {
|
||||
List<Board> boards = service.getPublicBoards().
|
||||
execute().body();
|
||||
|
||||
assertNotNull(boards);
|
||||
assertEquals(2, boards.size());
|
||||
|
||||
for (int i = 0; i < boards.size(); i++) {
|
||||
assertEquals("e7pJ3T7WciDz5P2v" + i, boards.get(i).getId());
|
||||
assertEquals("board " + i, boards.get(i).getTitle());
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void newBoardTest() {
|
||||
MockResponse response = new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_OK)
|
||||
.setBody(
|
||||
"{\"_id\":\"cYGkSRfKfEEFDQjv2\",\"defaultSwimlaneId\":\"TffifkXqDvwz9LJNs\"}"
|
||||
);
|
||||
|
||||
mockWebServer.enqueue(response);
|
||||
|
||||
try {
|
||||
Board board = service.newBoard(
|
||||
new BoardPrototype.Builder()
|
||||
.setTitle("title")
|
||||
.setOwner("owner")
|
||||
.build()
|
||||
)
|
||||
.execute().body();
|
||||
|
||||
assertNotNull(board);
|
||||
assertEquals("cYGkSRfKfEEFDQjv2", board.getId());
|
||||
assertEquals("TffifkXqDvwz9LJNs", board.getDefaultSwimlaneId());
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBoardTest() {
|
||||
MockResponse response = new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_OK)
|
||||
.setBody(board1);
|
||||
|
||||
mockWebServer.enqueue(response);
|
||||
|
||||
try {
|
||||
Board board = service.getBoard("id")
|
||||
.execute().body();
|
||||
|
||||
assertNotNull(board);
|
||||
assertEquals("id1", board.getId());
|
||||
assertEquals("my title1", board.getTitle());
|
||||
assertEquals("my-title-1", board.getSlug());
|
||||
assertFalse(board.isArchived());
|
||||
assertEquals(0, board.getStarts());
|
||||
assertEquals(BoardPermission.PRIVATE, board.getPermission());
|
||||
assertEquals(BoardBackgroundColor.CORTEZA, board.getBackgroundColor());
|
||||
assertTrue(board.isAllowsSubtasks());
|
||||
assertEquals(PresentParentTask.NO_PARENT, board.getPresentParentTask());
|
||||
assertEquals(0, board.getSpentTime());
|
||||
assertFalse(board.isOvertime());
|
||||
assertEquals("board", board.getType());
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBoardsFromUser() {
|
||||
MockResponse response = new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_OK)
|
||||
.setBody("[ " + board1 + ", " + board2 + ", " + board3 + " ]");
|
||||
|
||||
mockWebServer.enqueue(response);
|
||||
|
||||
try {
|
||||
List<Board> boards = service.getBoardsFromUser("user-id")
|
||||
.execute().body();
|
||||
|
||||
assertNotNull(boards);
|
||||
assertEquals(3, boards.size());
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static final String board1 =
|
||||
"{" +
|
||||
"\"_id\":\"id1\"," +
|
||||
"\"title\":\"my title1\"," +
|
||||
"\"members\":[{\"userId\":\"Si69gNgkJfQuk6uiJ\",\"isAdmin\":true,\"isActive\":true,\"isNoComments\":false,\"isCommentOnly\":false}]," +
|
||||
"\"permission\":\"private\"," +
|
||||
"\"color\":\"corteza\"," +
|
||||
"\"slug\":\"my-title-1\"," +
|
||||
"\"archived\":false," +
|
||||
"\"createdAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"modifiedAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"stars\":0," +
|
||||
"\"labels\":[{\"color\":\"green\",\"_id\":\"3NvZnG\",\"name\":\"\"},{\"color\":\"yellow\",\"_id\":\"AcBqR9\",\"name\":\"\"},{\"color\":\"orange\",\"_id\":\"JxEw9Z\",\"name\":\"\"},{\"color\":\"red\",\"_id\":\"grdRCS\",\"name\":\"\"},{\"color\":\"purple\",\"_id\":\"buMfKA\",\"name\":\"\"},{\"color\":\"blue\",\"_id\":\"sbi9FZ\",\"name\":\"\"}]," +
|
||||
"\"subtasksDefaultBoardId\":null," +
|
||||
"\"subtasksDefaultListId\":null," +
|
||||
"\"allowsSubtasks\":true," +
|
||||
"\"presentParentTask\":\"no-parent\"," +
|
||||
"\"isOvertime\":false," +
|
||||
"\"type\":\"board\"" +
|
||||
"}";
|
||||
private static final String board2 =
|
||||
"{" +
|
||||
"\"_id\":\"id2\"," +
|
||||
"\"title\":\"my title2\"," +
|
||||
"\"members\":[{\"userId\":\"Si69gNgkJfQuk6uiJ\",\"isAdmin\":true,\"isActive\":true,\"isNoComments\":false,\"isCommentOnly\":false}]," +
|
||||
"\"permission\":\"private\"," +
|
||||
"\"color\":\"corteza\"," +
|
||||
"\"slug\":\"my-title-2\"," +
|
||||
"\"archived\":false," +
|
||||
"\"createdAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"modifiedAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"stars\":0," +
|
||||
"\"labels\":[{\"color\":\"green\",\"_id\":\"3NvZnG\",\"name\":\"\"},{\"color\":\"yellow\",\"_id\":\"AcBqR9\",\"name\":\"\"},{\"color\":\"orange\",\"_id\":\"JxEw9Z\",\"name\":\"\"},{\"color\":\"red\",\"_id\":\"grdRCS\",\"name\":\"\"},{\"color\":\"purple\",\"_id\":\"buMfKA\",\"name\":\"\"},{\"color\":\"blue\",\"_id\":\"sbi9FZ\",\"name\":\"\"}]," +
|
||||
"\"subtasksDefaultBoardId\":null," +
|
||||
"\"subtasksDefaultListId\":null," +
|
||||
"\"allowsSubtasks\":true," +
|
||||
"\"presentParentTask\":\"no-parent\"," +
|
||||
"\"isOvertime\":false," +
|
||||
"\"type\":\"board\"" +
|
||||
"}";
|
||||
private static final String board3 =
|
||||
"{" +
|
||||
"\"_id\":\"id3\"," +
|
||||
"\"title\":\"my title3\"," +
|
||||
"\"members\":[{\"userId\":\"Si69gNgkJfQuk6uiJ\",\"isAdmin\":true,\"isActive\":true,\"isNoComments\":false,\"isCommentOnly\":false}]," +
|
||||
"\"permission\":\"private\"," +
|
||||
"\"color\":\"corteza\"," +
|
||||
"\"slug\":\"my-title-3\"," +
|
||||
"\"archived\":false," +
|
||||
"\"createdAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"modifiedAt\":\"2019-11-09T10:01:21.280Z\"," +
|
||||
"\"stars\":0," +
|
||||
"\"labels\":[{\"color\":\"green\",\"_id\":\"3NvZnG\",\"name\":\"\"},{\"color\":\"yellow\",\"_id\":\"AcBqR9\",\"name\":\"\"},{\"color\":\"orange\",\"_id\":\"JxEw9Z\",\"name\":\"\"},{\"color\":\"red\",\"_id\":\"grdRCS\",\"name\":\"\"},{\"color\":\"purple\",\"_id\":\"buMfKA\",\"name\":\"\"},{\"color\":\"blue\",\"_id\":\"sbi9FZ\",\"name\":\"\"}]," +
|
||||
"\"subtasksDefaultBoardId\":null," +
|
||||
"\"subtasksDefaultListId\":null," +
|
||||
"\"allowsSubtasks\":true," +
|
||||
"\"presentParentTask\":\"no-parent\"," +
|
||||
"\"isOvertime\":false," +
|
||||
"\"type\":\"board\"" +
|
||||
"}";
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ExampleTest {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
assertTrue(true);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user