diff --git a/src/main/java/com/crowdin/client/stringcomments/StringCommentsApi.java b/src/main/java/com/crowdin/client/stringcomments/StringCommentsApi.java index 80c7d33ae..101ea84a1 100644 --- a/src/main/java/com/crowdin/client/stringcomments/StringCommentsApi.java +++ b/src/main/java/com/crowdin/client/stringcomments/StringCommentsApi.java @@ -2,6 +2,8 @@ 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.*; import com.crowdin.client.stringcomments.model.AddStringCommentRequest; import com.crowdin.client.stringcomments.model.IssueStatus; @@ -146,8 +148,8 @@ public ResponseObject editStringComment(Long projectId, Long stri * @param request request object * @return list of updated string comment objects * @see */ public ResponseList stringCommentBatchOperations(Long projectId, List request) { @@ -155,4 +157,18 @@ public ResponseList stringCommentBatchOperations(Long projectId, StringCommentResponseList response = this.httpClient.patch(builtUrl, request, new HttpRequestConfig(), StringCommentResponseList.class); return StringCommentResponseList.to(response); } + + /** + * @param projectId project identifier + * @param commentId comment identifier + * @param attachmentId attachment identifier + * @see + */ + public void deleteAttachmentFromStringComment(Long projectId, Long commentId, Long attachmentId) throws HttpException, HttpBadRequestException { + String builtUrl = String.format("%s/projects/%d/comments/%d/attachments/%d", this.url, projectId, commentId, attachmentId); + this.httpClient.delete(builtUrl, new HttpRequestConfig(), Void.class); + } } diff --git a/src/main/java/com/crowdin/client/stringcomments/model/AddStringCommentRequest.java b/src/main/java/com/crowdin/client/stringcomments/model/AddStringCommentRequest.java index b58f0fb32..d09b401d4 100644 --- a/src/main/java/com/crowdin/client/stringcomments/model/AddStringCommentRequest.java +++ b/src/main/java/com/crowdin/client/stringcomments/model/AddStringCommentRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + @Data public class AddStringCommentRequest { @@ -11,4 +13,5 @@ public class AddStringCommentRequest { private Type type; private String issueType; private IssueStatus issueStatus; + private List attachments; } \ No newline at end of file diff --git a/src/main/java/com/crowdin/client/stringcomments/model/Attachment.java b/src/main/java/com/crowdin/client/stringcomments/model/Attachment.java new file mode 100644 index 000000000..dde46b540 --- /dev/null +++ b/src/main/java/com/crowdin/client/stringcomments/model/Attachment.java @@ -0,0 +1,15 @@ +package com.crowdin.client.stringcomments.model; + +import lombok.Data; + +@Data +public class Attachment { + private Long id; + private String name; + private String mime; + private Long size; + private String category; + private String thumbnailUrl; + private String url; + private String downloadUrl; +} diff --git a/src/main/java/com/crowdin/client/stringcomments/model/StringComment.java b/src/main/java/com/crowdin/client/stringcomments/model/StringComment.java index cc805471e..9e48b00e9 100644 --- a/src/main/java/com/crowdin/client/stringcomments/model/StringComment.java +++ b/src/main/java/com/crowdin/client/stringcomments/model/StringComment.java @@ -3,6 +3,7 @@ import lombok.Data; import java.util.Date; +import java.util.List; @Data public class StringComment { @@ -18,6 +19,7 @@ public class StringComment { private String issueType; private IssueStatus issueStatus; private Date createdAt; + private List attachments; @Data public static class User { diff --git a/src/test/java/com/crowdin/client/stringcomments/StringCommentsApiTest.java b/src/test/java/com/crowdin/client/stringcomments/StringCommentsApiTest.java index 2b856c942..64a597ab1 100644 --- a/src/test/java/com/crowdin/client/stringcomments/StringCommentsApiTest.java +++ b/src/test/java/com/crowdin/client/stringcomments/StringCommentsApiTest.java @@ -4,6 +4,7 @@ import com.crowdin.client.framework.RequestMock; import com.crowdin.client.framework.TestClient; import com.crowdin.client.stringcomments.model.AddStringCommentRequest; +import com.crowdin.client.stringcomments.model.Attachment; import com.crowdin.client.stringcomments.model.IssueStatus; import com.crowdin.client.stringcomments.model.StringComment; import com.crowdin.client.stringcomments.model.Type; @@ -23,10 +24,12 @@ public class StringCommentsApiTest extends TestClient { private final Long projectId = 8L; private final Long project2Id = 9L; private final Long project3Id = 10L; - private final Long stringId = 64L; + private final Long stringId = 1L; private final Long stringCommentId = 512L; + private final Long attachmentId = 123L; + private final Long attachmentId2 = 10L; - private final String text = "some issue"; + private final String text = "some issue with translation"; private final String targetLanguageId = "en"; private final Type type = Type.ISSUE; private final String issueType = "translation_mistake"; @@ -58,7 +61,8 @@ public List getMocks() { HttpPatch.METHOD_NAME, "api/stringcomments/stringCommentBatchOperationsRequest.json", "api/stringcomments/stringCommentBatchOperationsResponse.json" - ) + ), + RequestMock.build(String.format("%s/projects/%d/comments/%d/attachments/%d", this.url, projectId, stringCommentId, attachmentId), HttpDelete.METHOD_NAME) ); } @@ -68,6 +72,7 @@ public void listStringCommentsTest() { assertNotNull(responseList); assertNotNull(responseList.getData()); assertEquals(1, responseList.getData().size(), "Size of list should be 1"); + assertEquals(attachmentId2, responseList.getData().get(0).getData().getAttachments().get(0).getId()); } @Test @@ -85,6 +90,7 @@ public void listStringCommentsTest_orderByNull() { assertNotNull(responseList); assertNotNull(responseList.getData()); assertEquals(1, responseList.getData().size(), "Size of list should be 1"); + assertEquals(attachmentId2, responseList.getData().get(0).getData().getAttachments().get(0).getId()); } @Test @@ -108,6 +114,7 @@ public void listStringCommentsTest_orderByIdNull() { assertEquals(2, responseList.getData().get(0).getData().getId(), "Id of list should be 2"); assertEquals(3, responseList.getData().get(1).getData().getId(), "Id of list should be 3"); + assertEquals(attachmentId2, responseList.getData().get(0).getData().getAttachments().get(0).getId()); } @Test @@ -132,6 +139,7 @@ public void listStringCommentsTest_orderByIdAsc() { assertEquals(2, responseList.getData().get(0).getData().getId(), "Id of list should be 2"); assertEquals(3, responseList.getData().get(1).getData().getId(), "Id of list should be 3"); + assertEquals(attachmentId2, responseList.getData().get(0).getData().getAttachments().get(0).getId()); } @Test @@ -156,21 +164,28 @@ public void listStringCommentsTest_orderByIdDesc() { assertEquals(3, responseList.getData().get(0).getData().getId(), "Id of list should be 3"); assertEquals(2, responseList.getData().get(1).getData().getId(), "Id of list should be 2"); + assertEquals(attachmentId2, responseList.getData().get(0).getData().getAttachments().get(0).getId()); } @Test public void addStringCommentTest() { + Attachment attachment = new Attachment(); + attachment.setId(attachmentId); + List attachments = Collections.singletonList(attachment); + AddStringCommentRequest request = new AddStringCommentRequest() {{ setText(text); setTargetLanguageId(targetLanguageId); setStringId(stringId); setType(type); setIssueType(issueType); - setIssueStatus(issueStatus); + setAttachments(attachments); }}; ResponseObject response = this.getStringCommentsApi().addStringComment(projectId, request); assertNotNull(response); assertNotNull(response.getData()); + + assertEquals(attachmentId2, response.getData().getAttachments().get(0).getId()); } @Test @@ -178,6 +193,8 @@ public void getStringCommentTest() { ResponseObject response = this.getStringCommentsApi().getStringComment(projectId, stringCommentId); assertNotNull(response); assertNotNull(response.getData()); + + assertEquals(attachmentId2, response.getData().getAttachments().get(0).getId()); } @Test @@ -197,6 +214,7 @@ public void editStringCommentTest() { assertNotNull(response); assertNotNull(response.getData()); + assertEquals(attachmentId2, response.getData().getAttachments().get(0).getId()); } @Test @@ -234,5 +252,11 @@ public void stringCommentBatchOperationsTest(){ assertNotNull(response.getData()); assertEquals(IssueStatus.UNRESOLVED, response.getData().get(0).getData().getIssueStatus()); + assertEquals(attachmentId2, response.getData().get(0).getData().getAttachments().get(0).getId()); + } + + @Test + public void deleteAttachmentFromStringCommentTest() { + this.getStringCommentsApi().deleteAttachmentFromStringComment(projectId, stringCommentId, attachmentId); } } diff --git a/src/test/resources/api/stringcomments/addStringCommentRequest.json b/src/test/resources/api/stringcomments/addStringCommentRequest.json index 3f7ee9eb4..787c30eee 100644 --- a/src/test/resources/api/stringcomments/addStringCommentRequest.json +++ b/src/test/resources/api/stringcomments/addStringCommentRequest.json @@ -1,8 +1,12 @@ { - "text": "some issue", + "stringId": 1, + "text": "some issue with translation", "targetLanguageId": "en", - "stringId": 64, "type": "issue", "issueType": "translation_mistake", - "issueStatus": "resolved" + "attachments": [ + { + "id": 123 + } + ] } \ No newline at end of file diff --git a/src/test/resources/api/stringcomments/listStringCommentsResponse.json b/src/test/resources/api/stringcomments/listStringCommentsResponse.json index 4581a6f88..e65ce5df6 100644 --- a/src/test/resources/api/stringcomments/listStringCommentsResponse.json +++ b/src/test/resources/api/stringcomments/listStringCommentsResponse.json @@ -25,7 +25,19 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } } ], diff --git a/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdAsc.json b/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdAsc.json index a34b7bba5..5dc2f5fb4 100644 --- a/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdAsc.json +++ b/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdAsc.json @@ -25,7 +25,19 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } }, { @@ -53,7 +65,19 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } } ], diff --git a/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdDesc.json b/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdDesc.json index fddc7439b..243ec3684 100644 --- a/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdDesc.json +++ b/src/test/resources/api/stringcomments/listStringCommentsResponseOrderByIdDesc.json @@ -25,7 +25,19 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } }, { @@ -53,7 +65,19 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } } ], diff --git a/src/test/resources/api/stringcomments/stringCommentBatchOperationsResponse.json b/src/test/resources/api/stringcomments/stringCommentBatchOperationsResponse.json index 1730b96da..dde3135ce 100644 --- a/src/test/resources/api/stringcomments/stringCommentBatchOperationsResponse.json +++ b/src/test/resources/api/stringcomments/stringCommentBatchOperationsResponse.json @@ -34,7 +34,19 @@ "avatarUrl": "" }, "resolvedAt": "2019-09-20T11:05:24+00:00", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } } ] diff --git a/src/test/resources/api/stringcomments/stringCommentResponse.json b/src/test/resources/api/stringcomments/stringCommentResponse.json index 4bf24a0d9..d875c6bd0 100644 --- a/src/test/resources/api/stringcomments/stringCommentResponse.json +++ b/src/test/resources/api/stringcomments/stringCommentResponse.json @@ -23,6 +23,18 @@ "type": "issue", "issueType": "source_mistake", "issueStatus": "unresolved", - "createdAt": "2019-09-20T11:05:24+00:00" + "createdAt": "2019-09-20T11:05:24+00:00", + "attachments": [ + { + "id": 10, + "name": "screenshot.png", + "mime": "image/png", + "size": 12345, + "category": "image", + "thumbnailUrl": "https://example.com/thumbnail.png", + "url": "https://example.com/original.png", + "downloadUrl": "https://example.com/raw.png" + } + ] } } \ No newline at end of file