From 5ee9f8e5a872af62a9f1e99e1798a23b1cd63d38 Mon Sep 17 00:00:00 2001 From: Yevheniy Oliynyk Date: Thu, 23 Apr 2020 12:15:43 +0300 Subject: [PATCH] feat: teams API --- README.md | 2 +- build.gradle | 2 +- src/main/java/com/crowdin/client/Client.java | 4 + .../com/crowdin/client/teams/TeamsApi.java | 134 ++++++++++++++++++ .../teams/model/AddTeamMembersRequest.java | 11 ++ .../teams/model/AddTeamMembersResponse.java | 15 ++ .../model/AddTeamMembersResponseInternal.java | 24 ++++ .../client/teams/model/AddTeamRequest.java | 9 ++ .../teams/model/AddTeamToProjectRequest.java | 12 ++ .../teams/model/ProjectTeamResource.java | 12 ++ .../teams/model/ProjectTeamResources.java | 9 ++ .../com/crowdin/client/teams/model/Team.java | 15 ++ .../client/teams/model/TeamMember.java | 16 +++ .../teams/model/TeamMemberResponseList.java | 26 ++++ .../teams/model/TeamMemberResponseObject.java | 9 ++ .../client/teams/model/TeamResponseList.java | 26 ++++ .../teams/model/TeamResponseObject.java | 9 ++ .../crowdin/client/tasks/TasksApiTest.java | 1 - .../crowdin/client/teams/TeamsApiTest.java | 124 ++++++++++++++++ .../api/teams/addTeamMembersRequest.json | 5 + .../api/teams/addTeamMembersResponse.json | 20 +++ .../resources/api/teams/addTeamRequest.json | 3 + .../api/teams/addTeamToProjectRequest.json | 6 + src/test/resources/api/teams/editTeam.json | 7 + src/test/resources/api/teams/listTeams.json | 17 +++ .../api/teams/projectTeamResources.json | 15 ++ src/test/resources/api/teams/team.json | 9 ++ .../resources/api/teams/teamMembersList.json | 18 +++ 28 files changed, 557 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/crowdin/client/teams/TeamsApi.java create mode 100644 src/main/java/com/crowdin/client/teams/model/AddTeamMembersRequest.java create mode 100644 src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponse.java create mode 100644 src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponseInternal.java create mode 100644 src/main/java/com/crowdin/client/teams/model/AddTeamRequest.java create mode 100644 src/main/java/com/crowdin/client/teams/model/AddTeamToProjectRequest.java create mode 100644 src/main/java/com/crowdin/client/teams/model/ProjectTeamResource.java create mode 100644 src/main/java/com/crowdin/client/teams/model/ProjectTeamResources.java create mode 100644 src/main/java/com/crowdin/client/teams/model/Team.java create mode 100644 src/main/java/com/crowdin/client/teams/model/TeamMember.java create mode 100644 src/main/java/com/crowdin/client/teams/model/TeamMemberResponseList.java create mode 100644 src/main/java/com/crowdin/client/teams/model/TeamMemberResponseObject.java create mode 100644 src/main/java/com/crowdin/client/teams/model/TeamResponseList.java create mode 100644 src/main/java/com/crowdin/client/teams/model/TeamResponseObject.java create mode 100644 src/test/java/com/crowdin/client/teams/TeamsApiTest.java create mode 100644 src/test/resources/api/teams/addTeamMembersRequest.json create mode 100644 src/test/resources/api/teams/addTeamMembersResponse.json create mode 100644 src/test/resources/api/teams/addTeamRequest.json create mode 100644 src/test/resources/api/teams/addTeamToProjectRequest.json create mode 100644 src/test/resources/api/teams/editTeam.json create mode 100644 src/test/resources/api/teams/listTeams.json create mode 100644 src/test/resources/api/teams/projectTeamResources.json create mode 100644 src/test/resources/api/teams/team.json create mode 100644 src/test/resources/api/teams/teamMembersList.json diff --git a/README.md b/README.md index 60d00638f..484ebd5cc 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ dependencies { com.github.crowdin crowdin-api-client-java - 1.0.0 + 1.1.0 ``` diff --git a/build.gradle b/build.gradle index c2bd0091b..5c62176cd 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { } sourceCompatibility = 8 -version '1.0.0' +version '1.1.0' repositories { mavenCentral() diff --git a/src/main/java/com/crowdin/client/Client.java b/src/main/java/com/crowdin/client/Client.java index 255e4b04e..c58b71c62 100644 --- a/src/main/java/com/crowdin/client/Client.java +++ b/src/main/java/com/crowdin/client/Client.java @@ -15,6 +15,7 @@ import com.crowdin.client.storage.StorageApi; import com.crowdin.client.stringtranslations.StringTranslationsApi; import com.crowdin.client.tasks.TasksApi; +import com.crowdin.client.teams.TeamsApi; import com.crowdin.client.translationmemory.TranslationMemoryApi; import com.crowdin.client.translations.TranslationsApi; import com.crowdin.client.translationstatus.TranslationStatusApi; @@ -46,6 +47,7 @@ public class Client extends CrowdinApi { private final UsersApi usersApi; private final VendorsApi vendorsApi; private final WebhooksApi webhooksApi; + private final TeamsApi teamsApi; public Client(Credentials credentials) { super(credentials); @@ -68,6 +70,7 @@ public Client(Credentials credentials) { this.usersApi = new UsersApi(credentials); this.vendorsApi = new VendorsApi(credentials); this.webhooksApi = new WebhooksApi(credentials); + this.teamsApi = new TeamsApi(credentials); } public Client(Credentials credentials, ClientConfig clientConfig) { @@ -91,6 +94,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) { this.usersApi = new UsersApi(credentials, clientConfig); this.vendorsApi = new VendorsApi(credentials, clientConfig); this.webhooksApi = new WebhooksApi(credentials, clientConfig); + this.teamsApi = new TeamsApi(credentials, clientConfig); } } diff --git a/src/main/java/com/crowdin/client/teams/TeamsApi.java b/src/main/java/com/crowdin/client/teams/TeamsApi.java new file mode 100644 index 000000000..c67291983 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/TeamsApi.java @@ -0,0 +1,134 @@ +package com.crowdin.client.teams; + +import com.crowdin.client.core.CrowdinApi; +import com.crowdin.client.core.http.HttpRequestConfig; +import com.crowdin.client.core.http.exceptions.HttpBadRequestException; +import com.crowdin.client.core.http.exceptions.HttpException; +import com.crowdin.client.core.model.ClientConfig; +import com.crowdin.client.core.model.Credentials; +import com.crowdin.client.core.model.PatchRequest; +import com.crowdin.client.core.model.ResponseList; +import com.crowdin.client.core.model.ResponseObject; +import com.crowdin.client.teams.model.AddTeamMembersRequest; +import com.crowdin.client.teams.model.AddTeamMembersResponse; +import com.crowdin.client.teams.model.AddTeamMembersResponseInternal; +import com.crowdin.client.teams.model.AddTeamRequest; +import com.crowdin.client.teams.model.AddTeamToProjectRequest; +import com.crowdin.client.teams.model.ProjectTeamResources; +import com.crowdin.client.teams.model.Team; +import com.crowdin.client.teams.model.TeamMember; +import com.crowdin.client.teams.model.TeamMemberResponseList; +import com.crowdin.client.teams.model.TeamResponseList; +import com.crowdin.client.teams.model.TeamResponseObject; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class TeamsApi extends CrowdinApi { + public TeamsApi(Credentials credentials) { + super(credentials); + } + + public TeamsApi(Credentials credentials, ClientConfig clientConfig) { + super(credentials, clientConfig); + } + + /** + * @param projectId project identifier + * @param request request object + * @return project team status + */ + public ProjectTeamResources addTeamToProject(Long projectId, AddTeamToProjectRequest request) throws HttpException, HttpBadRequestException { + return this.httpClient.post(this.url + "/projects/" + projectId + "/teams", request, new HttpRequestConfig(), ProjectTeamResources.class); + } + + /** + * @param limit maximum number of items to retrieve (default 25) + * @param offset starting offset in the collection (default 0) + * @return list of teams + */ + public ResponseList listTeams(Integer limit, Integer offset) throws HttpException, HttpBadRequestException { + Map> queryParams = HttpRequestConfig.buildUrlParams( + "limit", Optional.ofNullable(limit), + "offset", Optional.ofNullable(offset) + ); + TeamResponseList teamResponseList = this.httpClient.get(this.url + "/teams", new HttpRequestConfig(queryParams), TeamResponseList.class); + return TeamResponseList.to(teamResponseList); + } + + /** + * @param request request object + * @return newly created team + */ + public ResponseObject addTeam(AddTeamRequest request) throws HttpException, HttpBadRequestException { + TeamResponseObject teamResponseObject = this.httpClient.post(this.url + "/teams", request, new HttpRequestConfig(), TeamResponseObject.class); + return ResponseObject.of(teamResponseObject.getData()); + } + + /** + * @param teamId team identifier + * @return team + */ + public ResponseObject getTeam(Long teamId) throws HttpException, HttpBadRequestException { + TeamResponseObject teamResponseObject = this.httpClient.get(this.url + "/teams/" + teamId, new HttpRequestConfig(), TeamResponseObject.class); + return ResponseObject.of(teamResponseObject.getData()); + } + + /** + * @param teamId team identifier + */ + public void deleteTeam(Long teamId) throws HttpException, HttpBadRequestException { + this.httpClient.delete(this.url + "/teams/" + teamId, new HttpRequestConfig(), Void.class); + } + + /** + * @param teamId team identifier + * @param request request object + * @return updated team + */ + public ResponseObject editTeam(Long teamId, List request) throws HttpException, HttpBadRequestException { + TeamResponseObject teamResponseObject = this.httpClient.patch(this.url + "/teams/" + teamId, request, new HttpRequestConfig(), TeamResponseObject.class); + return ResponseObject.of(teamResponseObject.getData()); + } + + /** + * @param teamId team identifier + * @param limit maximum number of items to retrieve (default 25) + * @param offset starting offset in the collection (default 0) + * @return list of team members + */ + public ResponseList listTeamMembers(Long teamId, Integer limit, Integer offset) throws HttpException, HttpBadRequestException { + Map> queryParams = HttpRequestConfig.buildUrlParams( + "limit", Optional.ofNullable(limit), + "offset", Optional.ofNullable(offset) + ); + TeamMemberResponseList teamMemberResponseList = this.httpClient.get(this.url + "/teams/" + teamId + "/members", new HttpRequestConfig(queryParams), TeamMemberResponseList.class); + return TeamMemberResponseList.to(teamMemberResponseList); + } + + /** + * @param teamId team identifier + * @param request request object + * @return response + */ + public AddTeamMembersResponse addTeamMembers(Long teamId, AddTeamMembersRequest request) throws HttpException, HttpBadRequestException { + AddTeamMembersResponseInternal addTeamMembersResponseInternal = this.httpClient.post(this.url + "/teams/" + teamId + "/members", request, new HttpRequestConfig(), AddTeamMembersResponseInternal.class); + return AddTeamMembersResponseInternal.to(addTeamMembersResponseInternal); + } + + /** + * @param teamId team identifier + */ + public void deleteAllTeamMembers(Long teamId) throws HttpException, HttpBadRequestException { + this.httpClient.delete(this.url + "/teams/" + teamId + "/members", new HttpRequestConfig(), Void.class); + } + + /** + * @param teamId team identifier + * @param memberId member identifier + */ + public void deleteTeamMember(Long teamId, Long memberId) throws HttpException, HttpBadRequestException { + this.httpClient.delete(this.url + "/teams/" + teamId + "/members/" + memberId, new HttpRequestConfig(), Void.class); + } +} diff --git a/src/main/java/com/crowdin/client/teams/model/AddTeamMembersRequest.java b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersRequest.java new file mode 100644 index 000000000..113d4e71c --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersRequest.java @@ -0,0 +1,11 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class AddTeamMembersRequest { + + private List userIds; +} diff --git a/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponse.java b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponse.java new file mode 100644 index 000000000..6218b8916 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponse.java @@ -0,0 +1,15 @@ +package com.crowdin.client.teams.model; + +import com.crowdin.client.core.model.Pagination; +import com.crowdin.client.core.model.ResponseObject; +import lombok.Data; + +import java.util.List; + +@Data +public class AddTeamMembersResponse { + + private List> skipped; + private List> added; + private Pagination pagination; +} diff --git a/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponseInternal.java b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponseInternal.java new file mode 100644 index 000000000..354bedf4e --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/AddTeamMembersResponseInternal.java @@ -0,0 +1,24 @@ +package com.crowdin.client.teams.model; + +import com.crowdin.client.core.model.Pagination; +import com.crowdin.client.core.model.ResponseObject; +import lombok.Data; + +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class AddTeamMembersResponseInternal { + + private List skipped; + private List added; + private Pagination pagination; + + public static AddTeamMembersResponse to(AddTeamMembersResponseInternal addTeamMembersResponseInternal) { + AddTeamMembersResponse response = new AddTeamMembersResponse(); + response.setPagination(addTeamMembersResponseInternal.getPagination()); + response.setAdded(addTeamMembersResponseInternal.getAdded().stream().map(TeamMemberResponseObject::getData).map(ResponseObject::of).collect(Collectors.toList())); + response.setSkipped(addTeamMembersResponseInternal.getSkipped().stream().map(TeamMemberResponseObject::getData).map(ResponseObject::of).collect(Collectors.toList())); + return response; + } +} diff --git a/src/main/java/com/crowdin/client/teams/model/AddTeamRequest.java b/src/main/java/com/crowdin/client/teams/model/AddTeamRequest.java new file mode 100644 index 000000000..c373fbdfc --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/AddTeamRequest.java @@ -0,0 +1,9 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class AddTeamRequest { + + private String name; +} diff --git a/src/main/java/com/crowdin/client/teams/model/AddTeamToProjectRequest.java b/src/main/java/com/crowdin/client/teams/model/AddTeamToProjectRequest.java new file mode 100644 index 000000000..6f2c78bcc --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/AddTeamToProjectRequest.java @@ -0,0 +1,12 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class AddTeamToProjectRequest { + + private Long teamId; + private boolean accessToAllWorkflowSteps; + private boolean managerAccess; + private Object permissions; +} diff --git a/src/main/java/com/crowdin/client/teams/model/ProjectTeamResource.java b/src/main/java/com/crowdin/client/teams/model/ProjectTeamResource.java new file mode 100644 index 000000000..9b1fe9a14 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/ProjectTeamResource.java @@ -0,0 +1,12 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class ProjectTeamResource { + + private Long id; + private boolean hasManagerAccess; + private boolean hasAccessToAllWorkflowSteps; + private Object permissions; +} diff --git a/src/main/java/com/crowdin/client/teams/model/ProjectTeamResources.java b/src/main/java/com/crowdin/client/teams/model/ProjectTeamResources.java new file mode 100644 index 000000000..0bac133a2 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/ProjectTeamResources.java @@ -0,0 +1,9 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class ProjectTeamResources { + private ProjectTeamResource skipped; + private ProjectTeamResource added; +} diff --git a/src/main/java/com/crowdin/client/teams/model/Team.java b/src/main/java/com/crowdin/client/teams/model/Team.java new file mode 100644 index 000000000..ee9559d59 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/Team.java @@ -0,0 +1,15 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class Team { + + private Long id; + private String name; + private Integer totalMembers; + private Date createdAt; + private Date updatedAt; +} diff --git a/src/main/java/com/crowdin/client/teams/model/TeamMember.java b/src/main/java/com/crowdin/client/teams/model/TeamMember.java new file mode 100644 index 000000000..56ff01e5e --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/TeamMember.java @@ -0,0 +1,16 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class TeamMember { + + private Long id; + private String username; + private String firstName; + private String lastName; + private String avatarUrl; + private Date addedAt; +} diff --git a/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseList.java b/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseList.java new file mode 100644 index 000000000..e2169b727 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseList.java @@ -0,0 +1,26 @@ +package com.crowdin.client.teams.model; + +import com.crowdin.client.core.model.Pagination; +import com.crowdin.client.core.model.ResponseList; +import com.crowdin.client.core.model.ResponseObject; +import lombok.Data; + +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class TeamMemberResponseList { + + private List data; + private Pagination pagination; + + public static ResponseList to(TeamMemberResponseList teamMemberResponseList) { + return ResponseList.of( + teamMemberResponseList.getData().stream() + .map(TeamMemberResponseObject::getData) + .map(ResponseObject::of) + .collect(Collectors.toList()), + teamMemberResponseList.getPagination() + ); + } +} diff --git a/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseObject.java b/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseObject.java new file mode 100644 index 000000000..de30cecce --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/TeamMemberResponseObject.java @@ -0,0 +1,9 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class TeamMemberResponseObject { + + private TeamMember data; +} diff --git a/src/main/java/com/crowdin/client/teams/model/TeamResponseList.java b/src/main/java/com/crowdin/client/teams/model/TeamResponseList.java new file mode 100644 index 000000000..11fd1571f --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/TeamResponseList.java @@ -0,0 +1,26 @@ +package com.crowdin.client.teams.model; + +import com.crowdin.client.core.model.Pagination; +import com.crowdin.client.core.model.ResponseList; +import com.crowdin.client.core.model.ResponseObject; +import lombok.Data; + +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class TeamResponseList { + + private List data; + private Pagination pagination; + + public static ResponseList to(TeamResponseList teamResponseList) { + return ResponseList.of( + teamResponseList.getData().stream() + .map(TeamResponseObject::getData) + .map(ResponseObject::of) + .collect(Collectors.toList()), + teamResponseList.getPagination() + ); + } +} diff --git a/src/main/java/com/crowdin/client/teams/model/TeamResponseObject.java b/src/main/java/com/crowdin/client/teams/model/TeamResponseObject.java new file mode 100644 index 000000000..08eaf6198 --- /dev/null +++ b/src/main/java/com/crowdin/client/teams/model/TeamResponseObject.java @@ -0,0 +1,9 @@ +package com.crowdin.client.teams.model; + +import lombok.Data; + +@Data +public class TeamResponseObject { + + private Team data; +} diff --git a/src/test/java/com/crowdin/client/tasks/TasksApiTest.java b/src/test/java/com/crowdin/client/tasks/TasksApiTest.java index ff017f331..970b2ff08 100644 --- a/src/test/java/com/crowdin/client/tasks/TasksApiTest.java +++ b/src/test/java/com/crowdin/client/tasks/TasksApiTest.java @@ -70,7 +70,6 @@ public void exportTaskStringsTest() { assertEquals(downloadLinkResponseObject.getData().getUrl(), link); } - @Test public void getTaskTest() { ResponseObject taskResponseObject = this.getTasksApi().getTask(projectId, taskId); diff --git a/src/test/java/com/crowdin/client/teams/TeamsApiTest.java b/src/test/java/com/crowdin/client/teams/TeamsApiTest.java new file mode 100644 index 000000000..c9abbb0e8 --- /dev/null +++ b/src/test/java/com/crowdin/client/teams/TeamsApiTest.java @@ -0,0 +1,124 @@ +package com.crowdin.client.teams; + +import com.crowdin.client.core.model.PatchOperation; +import com.crowdin.client.core.model.PatchRequest; +import com.crowdin.client.core.model.ResponseList; +import com.crowdin.client.core.model.ResponseObject; +import com.crowdin.client.framework.RequestMock; +import com.crowdin.client.framework.TestClient; +import com.crowdin.client.teams.model.AddTeamMembersRequest; +import com.crowdin.client.teams.model.AddTeamMembersResponse; +import com.crowdin.client.teams.model.AddTeamRequest; +import com.crowdin.client.teams.model.AddTeamToProjectRequest; +import com.crowdin.client.teams.model.ProjectTeamResources; +import com.crowdin.client.teams.model.Team; +import com.crowdin.client.teams.model.TeamMember; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPatch; +import org.apache.http.client.methods.HttpPost; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static java.util.Collections.singletonList; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class TeamsApiTest extends TestClient { + + private final Long projectId = 12L; + private final Long userId = 3L; + private final Long teamId = 1L; + private final String name = "French"; + + @Override + public List getMocks() { + return Arrays.asList( + RequestMock.build(this.url + "/projects/" + projectId + "/teams", HttpPost.METHOD_NAME, "api/teams/addTeamToProjectRequest.json", "api/teams/projectTeamResources.json"), + RequestMock.build(this.url + "/teams", HttpGet.METHOD_NAME, "api/teams/listTeams.json"), + RequestMock.build(this.url + "/teams", HttpPost.METHOD_NAME, "api/teams/addTeamRequest.json", "api/teams/team.json"), + RequestMock.build(this.url + "/teams/" + teamId, HttpGet.METHOD_NAME, "api/teams/team.json"), + RequestMock.build(this.url + "/teams/" + teamId, HttpDelete.METHOD_NAME), + RequestMock.build(this.url + "/teams/" + teamId, HttpPatch.METHOD_NAME, "api/teams/editTeam.json", "api/teams/team.json"), + RequestMock.build(this.url + "/teams/" + teamId + "/members", HttpGet.METHOD_NAME, "api/teams/teamMembersList.json"), + RequestMock.build(this.url + "/teams/" + teamId + "/members", HttpPost.METHOD_NAME, "api/teams/addTeamMembersRequest.json", "api/teams/addTeamMembersResponse.json"), + RequestMock.build(this.url + "/teams/" + teamId + "/members", HttpDelete.METHOD_NAME), + RequestMock.build(this.url + "/teams/" + teamId + "/members/" + userId, HttpDelete.METHOD_NAME) + ); + } + + @Test + public void addTeamToProjectTest() { + AddTeamToProjectRequest request = new AddTeamToProjectRequest(); + request.setTeamId(teamId); + ProjectTeamResources projectTeamResources = this.getTeamsApi().addTeamToProject(projectId, request); + assertEquals(projectTeamResources.getAdded().getId(), teamId); + } + + @Test + public void listTeamsTest() { + ResponseList teamResponseList = this.getTeamsApi().listTeams(null, null); + assertEquals(teamResponseList.getData().size(), 1); + assertEquals(teamResponseList.getData().get(0).getData().getId(), teamId); + assertEquals(teamResponseList.getData().get(0).getData().getName(), name); + } + + @Test + public void addTeamTest() { + AddTeamRequest request = new AddTeamRequest(); + request.setName(name); + ResponseObject teamResponseObject = this.getTeamsApi().addTeam(request); + assertEquals(teamResponseObject.getData().getId(), teamId); + assertEquals(teamResponseObject.getData().getName(), name); + } + + @Test + public void getTeamTest() { + ResponseObject teamResponseObject = this.getTeamsApi().getTeam(teamId); + assertEquals(teamResponseObject.getData().getId(), teamId); + assertEquals(teamResponseObject.getData().getName(), name); + } + + @Test + public void deleteTeamTest() { + this.getTeamsApi().deleteTeam(teamId); + } + + @Test + public void editTeamTest() { + PatchRequest request = new PatchRequest(); + request.setOp(PatchOperation.REPLACE); + request.setValue(name); + request.setPath("/name"); + ResponseObject teamResponseObject = this.getTeamsApi().editTeam(teamId, singletonList(request)); + assertEquals(teamResponseObject.getData().getId(), teamId); + assertEquals(teamResponseObject.getData().getName(), name); + } + + @Test + public void listTeamMembersTest() { + ResponseList teamMemberResponseList = this.getTeamsApi().listTeamMembers(teamId, null, null); + assertEquals(teamMemberResponseList.getData().size(), 1); + assertEquals(teamMemberResponseList.getData().get(0).getData().getId(), userId); + } + + @Test + public void addTeamMembersTest() { + AddTeamMembersRequest request = new AddTeamMembersRequest(); + request.setUserIds(singletonList(userId)); + AddTeamMembersResponse response = this.getTeamsApi().addTeamMembers(teamId, request); + assertEquals(response.getAdded().size(), 1); + assertEquals(response.getAdded().get(0).getData().getId(), userId); + } + + @Test + public void deleteAllTeamMembersTest() { + this.getTeamsApi().deleteAllTeamMembers(teamId); + } + + @Test + public void deleteTeamMemberTest() { + this.getTeamsApi().deleteTeamMember(teamId, userId); + } +} diff --git a/src/test/resources/api/teams/addTeamMembersRequest.json b/src/test/resources/api/teams/addTeamMembersRequest.json new file mode 100644 index 000000000..09288bcca --- /dev/null +++ b/src/test/resources/api/teams/addTeamMembersRequest.json @@ -0,0 +1,5 @@ +{ + "userIds": [ + 3 + ] +} diff --git a/src/test/resources/api/teams/addTeamMembersResponse.json b/src/test/resources/api/teams/addTeamMembersResponse.json new file mode 100644 index 000000000..bc88c1d71 --- /dev/null +++ b/src/test/resources/api/teams/addTeamMembersResponse.json @@ -0,0 +1,20 @@ +{ + "skipped": [ + ], + "added": [ + { + "data": { + "id": 3, + "username": "john.doe", + "firstName": "John", + "lastName": "Doe", + "avatarUrl": "", + "addedAt": "2019-09-23T09:04:29+00:00" + } + } + ], + "pagination": { + "offset": 0, + "limit": 25 + } +} diff --git a/src/test/resources/api/teams/addTeamRequest.json b/src/test/resources/api/teams/addTeamRequest.json new file mode 100644 index 000000000..a42184f43 --- /dev/null +++ b/src/test/resources/api/teams/addTeamRequest.json @@ -0,0 +1,3 @@ +{ + "name": "French" +} diff --git a/src/test/resources/api/teams/addTeamToProjectRequest.json b/src/test/resources/api/teams/addTeamToProjectRequest.json new file mode 100644 index 000000000..afb8ad4db --- /dev/null +++ b/src/test/resources/api/teams/addTeamToProjectRequest.json @@ -0,0 +1,6 @@ +{ + "teamId": 1, + "accessToAllWorkflowSteps": false, + "managerAccess": false, + "permissions": null +} diff --git a/src/test/resources/api/teams/editTeam.json b/src/test/resources/api/teams/editTeam.json new file mode 100644 index 000000000..073a6748c --- /dev/null +++ b/src/test/resources/api/teams/editTeam.json @@ -0,0 +1,7 @@ +[ + { + "op": "replace", + "path": "/name", + "value": "French" + } +] diff --git a/src/test/resources/api/teams/listTeams.json b/src/test/resources/api/teams/listTeams.json new file mode 100644 index 000000000..bcaf65264 --- /dev/null +++ b/src/test/resources/api/teams/listTeams.json @@ -0,0 +1,17 @@ +{ + "data": [ + { + "data": { + "id": 1, + "name": "French", + "totalMembers": 8, + "createdAt": "2019-09-23T09:04:29+00:00", + "updatedAt": "2019-09-23T09:04:29+00:00" + } + } + ], + "pagination": { + "offset": 0, + "limit": 25 + } +} diff --git a/src/test/resources/api/teams/projectTeamResources.json b/src/test/resources/api/teams/projectTeamResources.json new file mode 100644 index 000000000..5351d6f5e --- /dev/null +++ b/src/test/resources/api/teams/projectTeamResources.json @@ -0,0 +1,15 @@ +{ + "skipped": {}, + "added": { + "id": 1, + "hasManagerAccess": false, + "hasAccessToAllWorkflowSteps": false, + "permissions": { + "it": { + "workflowStepIds": [ + 313 + ] + } + } + } +} diff --git a/src/test/resources/api/teams/team.json b/src/test/resources/api/teams/team.json new file mode 100644 index 000000000..356b91e2f --- /dev/null +++ b/src/test/resources/api/teams/team.json @@ -0,0 +1,9 @@ +{ + "data": { + "id": 1, + "name": "French", + "totalMembers": 8, + "createdAt": "2019-09-23T09:04:29+00:00", + "updatedAt": "2019-09-23T09:04:29+00:00" + } +} diff --git a/src/test/resources/api/teams/teamMembersList.json b/src/test/resources/api/teams/teamMembersList.json new file mode 100644 index 000000000..9915ebe46 --- /dev/null +++ b/src/test/resources/api/teams/teamMembersList.json @@ -0,0 +1,18 @@ +{ + "data": [ + { + "data": { + "id": 3, + "username": "john.doe", + "firstName": "John", + "lastName": "Doe", + "avatarUrl": "", + "addedAt": "2019-09-23T09:04:29+00:00" + } + } + ], + "pagination": { + "offset": 0, + "limit": 25 + } +}