diff --git a/src/main/java/com/crowdin/client/labels/LabelsApi.java b/src/main/java/com/crowdin/client/labels/LabelsApi.java index fadf89fdb..57ea481cf 100644 --- a/src/main/java/com/crowdin/client/labels/LabelsApi.java +++ b/src/main/java/com/crowdin/client/labels/LabelsApi.java @@ -13,7 +13,10 @@ import com.crowdin.client.labels.model.Label; import com.crowdin.client.labels.model.LabelResponseList; import com.crowdin.client.labels.model.LabelResponseObject; +import com.crowdin.client.labels.model.LabelToScreenshotsRequest; import com.crowdin.client.labels.model.LabelToStringsRequest; +import com.crowdin.client.screenshots.model.Screenshot; +import com.crowdin.client.screenshots.model.ScreenshotResponseList; import com.crowdin.client.sourcestrings.model.SourceString; import com.crowdin.client.sourcestrings.model.SourceStringResponseList; @@ -141,5 +144,32 @@ public ResponseList unassignLabelFromStrings(Long projectId, Long return SourceStringResponseList.to(response); } + /** + * @param projectId Project Identifier + * @param labelId Label Identifier + * @param request Request Object + * @return Screenshots + * @see + */ + public ResponseList assignLabelToScreenshots(Long projectId, Long labelId, LabelToScreenshotsRequest request) throws HttpException, HttpBadRequestException{ + String builtUrl = String.format("%s/projects/%d/labels/%d/screenshots", this.url, projectId, labelId); + ScreenshotResponseList response = this.httpClient.post(builtUrl, request, new HttpRequestConfig(), ScreenshotResponseList.class); + return ScreenshotResponseList.to(response); + } + /** + * @param projectId Project Identifier + * @param labelId Label Identifier + * @return Screenshots + * @see + */ + public ResponseList unassignLabelFromScreenshots(Long projectId, Long labelId) throws HttpException, HttpBadRequestException { + String builtUrl = String.format("%s/projects/%d/labels/%d/screenshots", this.url, projectId, labelId); + ScreenshotResponseList response = this.httpClient.delete(builtUrl, new HttpRequestConfig(), ScreenshotResponseList.class); + return ScreenshotResponseList.to(response); + } } diff --git a/src/main/java/com/crowdin/client/labels/model/LabelToScreenshotsRequest.java b/src/main/java/com/crowdin/client/labels/model/LabelToScreenshotsRequest.java new file mode 100644 index 000000000..a13d4c6f9 --- /dev/null +++ b/src/main/java/com/crowdin/client/labels/model/LabelToScreenshotsRequest.java @@ -0,0 +1,11 @@ +package com.crowdin.client.labels.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class LabelToScreenshotsRequest { + + private List screenshotIds; +} diff --git a/src/test/java/com/crowdin/client/labels/LabelsApiTest.java b/src/test/java/com/crowdin/client/labels/LabelsApiTest.java index 4c1df9847..f1fa2afd0 100644 --- a/src/test/java/com/crowdin/client/labels/LabelsApiTest.java +++ b/src/test/java/com/crowdin/client/labels/LabelsApiTest.java @@ -8,7 +8,9 @@ import com.crowdin.client.framework.TestClient; import com.crowdin.client.labels.model.AddLabelRequest; import com.crowdin.client.labels.model.Label; +import com.crowdin.client.labels.model.LabelToScreenshotsRequest; import com.crowdin.client.labels.model.LabelToStringsRequest; +import com.crowdin.client.screenshots.model.Screenshot; import com.crowdin.client.sourcestrings.model.SourceString; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; @@ -37,19 +39,23 @@ private String file(String fileName) { @Override public List getMocks() { return Arrays.asList( - RequestMock.build(String.format("%s/projects/%d/labels", this.url, projectId), HttpGet.METHOD_NAME, - "api/labels/listLabels.json"), - RequestMock.build(String.format("%s/projects/%d/labels", this.url, projectId), HttpPost.METHOD_NAME, - "api/labels/addLabelRequest.json", "api/labels/label.json"), - RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpGet.METHOD_NAME, - "api/labels/label.json"), - RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpDelete.METHOD_NAME), - RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpPatch.METHOD_NAME, - "api/labels/editLabelRequest.json", "api/labels/label.json"), - RequestMock.build(String.format("%s/projects/%d/labels/%d/strings", this.url, projectId, labelId), HttpPost.METHOD_NAME, - "api/labels/labelToStringsRequest.json", "api/labels/listStrings.json"), - RequestMock.build(String.format("%s/projects/%d/labels/%d/strings", this.url, projectId, labelId), HttpDelete.METHOD_NAME, - "api/labels/listStrings.json") + RequestMock.build(String.format("%s/projects/%d/labels", this.url, projectId), HttpGet.METHOD_NAME, + "api/labels/listLabels.json"), + RequestMock.build(String.format("%s/projects/%d/labels", this.url, projectId), HttpPost.METHOD_NAME, + "api/labels/addLabelRequest.json", "api/labels/label.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpGet.METHOD_NAME, + "api/labels/label.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpDelete.METHOD_NAME), + RequestMock.build(String.format("%s/projects/%d/labels/%d", this.url, projectId, labelId), HttpPatch.METHOD_NAME, + "api/labels/editLabelRequest.json", "api/labels/label.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d/strings", this.url, projectId, labelId), HttpPost.METHOD_NAME, + "api/labels/labelToStringsRequest.json", "api/labels/listStrings.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d/strings", this.url, projectId, labelId), HttpDelete.METHOD_NAME, + "api/labels/listStrings.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d/screenshots", this.url, projectId, labelId), HttpPost.METHOD_NAME, + "api/labels/labelToScreenshotsRequest.json", "api/labels/listStrings.json"), + RequestMock.build(String.format("%s/projects/%d/labels/%d/screenshots", this.url, projectId, labelId), HttpDelete.METHOD_NAME, + "api/labels/listStrings.json") ); } @@ -111,5 +117,19 @@ public void unassignLabelToStringTest() { assertEquals(1, response.getData().size()); } + @Test + public void assignLabelToScreenshot() { + LabelToScreenshotsRequest request = new LabelToScreenshotsRequest() {{ + setScreenshotIds(Arrays.asList(1L)); + }}; + ResponseList response = this.getLabelsApi().assignLabelToScreenshots(projectId, labelId, request); + assertEquals(1, response.getData().size()); + } + @Test + public void unassignLabelToScreenshot() { + ResponseList response = this.getLabelsApi().unassignLabelFromScreenshots(projectId, labelId); + assertEquals(1, response.getData().size()); + + } } diff --git a/src/test/resources/api/labels/labelToScreenshotsRequest.json b/src/test/resources/api/labels/labelToScreenshotsRequest.json new file mode 100644 index 000000000..223acbe48 --- /dev/null +++ b/src/test/resources/api/labels/labelToScreenshotsRequest.json @@ -0,0 +1,5 @@ +{ + "screenshotIds": [ + 1 + ] +} \ No newline at end of file diff --git a/src/test/resources/api/labels/listScreenshots.json b/src/test/resources/api/labels/listScreenshots.json new file mode 100644 index 000000000..48ead2758 --- /dev/null +++ b/src/test/resources/api/labels/listScreenshots.json @@ -0,0 +1,37 @@ +{ + "data": [ + { + "data": { + "id": 1, + "userId": 6, + "url": "https://production-enterprise-screenshots.downloads.crowdin.com/992000002/6/2/middle.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIGJKLQV66ZXPMMEA%2F20190923%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190923T093016Z&X-Amz-SignedHeaders=host&X-Amz-Expires=120&X-Amz-Signature=8df06f57594f7d1804b7c037629f6916224415e9b935c4f6619fbe002fb25e73", + "name": "translate_with_siri.jpg", + "size": { + "width": 267, + "height": 176 + }, + "tagsCount": 0, + "tags": [ + { + "id": 98, + "screenshotId": 2, + "stringId": 2822, + "position": { + "x": 474, + "y": 147, + "width": 490, + "height": 99 + }, + "createdAt": "2019-09-23T09:35:31+00:00" + } + ], + "createdAt": "2019-09-23T09:29:19+00:00", + "updatedAt": "2019-09-23T09:29:19+00:00" + } + } + ], + "pagination": { + "offset": 0, + "limit": 25 + } +}