Add BoardService implementation. #3
22
wrapper/src/main/java/wekan/wrapper/api/BoardService.java
Normal file
22
wrapper/src/main/java/wekan/wrapper/api/BoardService.java
Normal file
@ -0,0 +1,22 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.GET;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.Path;
|
||||
import wekan.wrapper.entity.Board;
|
||||
import wekan.wrapper.entity.BoardPrototype;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BoardService {
|
||||
@GET("api/boards")
|
||||
Call<List<Board>> getPublicBoards();
|
||||
|
||||
@POST("api/boards")
|
||||
Call<Board> newBoard(@Body BoardPrototype boardPrototype);
|
||||
|
||||
@GET("api/boards/{boardId}")
|
||||
Call<Board> getBoard(@Path("boardId") String boardId);
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
public interface ExampleApi {
|
||||
}
|
143
wrapper/src/main/java/wekan/wrapper/entity/Board.java
Normal file
143
wrapper/src/main/java/wekan/wrapper/entity/Board.java
Normal file
@ -0,0 +1,143 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
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;
|
||||
// TODO list of labels
|
||||
// TODO list of members
|
||||
private Permission permission;
|
||||
private Color color;
|
||||
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 Permission getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
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 +
|
||||
", permission=" + permission +
|
||||
", color=" + color +
|
||||
", 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,25 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
public class BoardPrototype {
|
||||
private String title;
|
||||
private String owner;
|
||||
private boolean isAdmin = true;
|
||||
private boolean isActive = true;
|
||||
private boolean isNoComments = false;
|
||||
private boolean isCommentOnly = false;
|
||||
private Permission permission = Permission.PRIVATE;
|
||||
private Color color = Color.BELIZE;
|
||||
|
||||
public BoardPrototype(String title, String owner) {
|
||||
this.title = title;
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public BoardPrototype(String title, String owner, Color color) {
|
||||
this.title = title;
|
||||
this.owner = owner;
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
|
||||
|
30
wrapper/src/main/java/wekan/wrapper/entity/Color.java
Normal file
30
wrapper/src/main/java/wekan/wrapper/entity/Color.java
Normal file
@ -0,0 +1,30 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum Color {
|
||||
@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
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
public class ExampleEntity {
|
||||
|
||||
}
|
10
wrapper/src/main/java/wekan/wrapper/entity/Permission.java
Normal file
10
wrapper/src/main/java/wekan/wrapper/entity/Permission.java
Normal file
@ -0,0 +1,10 @@
|
||||
package wekan.wrapper.entity;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum Permission {
|
||||
@SerializedName("public")
|
||||
PUBLIC,
|
||||
@SerializedName("private")
|
||||
PRIVATE
|
||||
}
|
@ -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
|
||||
}
|
147
wrapper/src/test/java/wekan/wrapper/api/BoardServiceTest.java
Normal file
147
wrapper/src/test/java/wekan/wrapper/api/BoardServiceTest.java
Normal file
@ -0,0 +1,147 @@
|
||||
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("title", "owner"))
|
||||
.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(
|
||||
"{" +
|
||||
"\"_id\":\"id\"," +
|
||||
"\"title\":\"my title\"," +
|
||||
"\"members\":[{\"userId\":\"Si69gNgkJfQuk6uiJ\",\"isAdmin\":true,\"isActive\":true,\"isNoComments\":false,\"isCommentOnly\":false}]," +
|
||||
"\"permission\":\"private\"," +
|
||||
"\"color\":\"corteza\"," +
|
||||
"\"slug\":\"my-title\"," +
|
||||
"\"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\"" +
|
||||
"}"
|
||||
);
|
||||
|
||||
mockWebServer.enqueue(response);
|
||||
|
||||
try {
|
||||
Board board = service.getBoard("id")
|
||||
.execute().body();
|
||||
|
||||
assertNotNull(board);
|
||||
assertEquals("id", board.getId());
|
||||
assertEquals("my title", board.getTitle());
|
||||
assertEquals("my-title", board.getSlug());
|
||||
assertFalse(board.isArchived());
|
||||
assertEquals(0, board.getStarts());
|
||||
assertEquals(Permission.PRIVATE, board.getPermission());
|
||||
assertEquals(Color.CORTEZA, board.getColor());
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package wekan.wrapper.api;
|
||||
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.junit.Test;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
import wekan.wrapper.entity.Board;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class BoardServiceTestX {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
|
||||
|
||||
httpClient.addInterceptor(new Interceptor() {
|
||||
@Override
|
||||
public Response intercept(Chain chain) throws IOException {
|
||||
Request request = chain.request().newBuilder()
|
||||
.addHeader("Authorization", "Bearer GC0ibjF-5OlYczYe6WKCXX_72MtXVC-OEUK4puf9VeI")
|
||||
.addHeader("Accept", "application/json")
|
||||
.build();
|
||||
return chain.proceed(request);
|
||||
}
|
||||
});
|
||||
|
||||
Retrofit retrofit = new Retrofit.Builder()
|
||||
.baseUrl("https://board.norangeb.it")
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(httpClient.build())
|
||||
.build();
|
||||
|
||||
BoardService boardService = retrofit.create(BoardService.class);
|
||||
|
||||
try {
|
||||
List<Board> list = boardService.getPublicBoard().execute().body();
|
||||
for (Board b : list){
|
||||
System.out.println(b.getId());
|
||||
System.out.println(b.getTitle());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -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