Skip to content

Commit dcdc704

Browse files
authored
feat: add Pre-Translation Batch Operations support (#368)
1 parent f204fcb commit dcdc704

4 files changed

Lines changed: 79 additions & 0 deletions

File tree

src/main/java/com/crowdin/client/translations/TranslationsApi.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,27 @@ public ResponseList<PreTranslation> listPreTranslations(Long projectId, Paginati
255255
return PreTranslationResponseList.to(preTranslationResponseList);
256256
}
257257

258+
/**
259+
* Pre-Translation Batch Operations
260+
*
261+
* @param projectId project identifier
262+
* @param request list of patch operations
263+
* @return list of updated pre-translations
264+
* @see <ul>
265+
* <li><a href="https://developer.crowdin.com/api/v2/#tag/Translations/operation/api.projects.pre-translations.patchBatch" target="_blank"><b>API Documentation</b></a></li>
266+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#tag/Translations/operation/api.projects.pre-translations.patchBatch" target="_blank"><b>Enterprise API Documentation</b></a></li>
267+
* </ul>
268+
*/
269+
public ResponseList<PreTranslation> batchEditPreTranslations(Long projectId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
270+
PreTranslationResponseList preTranslationResponseList = this.httpClient.patch(
271+
this.url + "/projects/" + projectId + "/pre-translations",
272+
request,
273+
new HttpRequestConfig(),
274+
PreTranslationResponseList.class
275+
);
276+
return PreTranslationResponseList.to(preTranslationResponseList);
277+
}
278+
258279
/**
259280
* Edit Pre-Translation
260281
*

src/test/java/com/crowdin/client/translations/TranslationsApiTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public List<RequestMock> getMocks() {
5151
RequestMock.build(this.url + "/projects/" + projectId + "/translations/builds/" + buildId, HttpDelete.METHOD_NAME),
5252
RequestMock.build(String.format("%s/projects/%d/translations/exports", this.url, projectId), HttpPost.METHOD_NAME, "api/translations/exportProjectTranslationRequest.json", "api/translations/exportProjectTranslationResponse.json"),
5353
RequestMock.build(this.url + "/projects/" + projectId + "/pre-translations", HttpGet.METHOD_NAME, "api/translations/listPreTranslations.json"),
54+
RequestMock.build(this.url + "/projects/" + projectId + "/pre-translations", HttpPatch.METHOD_NAME, "api/translations/batchEditPreTranslationsRequest.json", "api/translations/batchEditPreTranslationsResponse.json"),
5455
RequestMock.build(this.url + "/projects/" + projectId + "/pre-translations/" + preTranslationId, HttpPatch.METHOD_NAME, "api/translations/editPreTranslationRequest.json", "api/translations/editPreTranslationResponse.json"),
5556
RequestMock.build(this.url + "/projects/" + projectId + "/pre-translations/" + preTranslationId + "/report", HttpGet.METHOD_NAME, "api/translations/preTranslationReportResponse.json"),
5657
RequestMock.build(this.url + "/projects/" + projectId + "/translations/imports", HttpPost.METHOD_NAME, "api/translations/importTranslationsRequest.json", "api/translations/importTranslationsResponse.json"),
@@ -256,6 +257,22 @@ public void editPreTranslationTest() {
256257
assertEquals(fileId, preTranslationResponseObject.getData().getAttributes().getFileIds().get(0));
257258
}
258259

260+
@Test
261+
public void batchEditPreTranslationsTest() {
262+
PatchRequest request = new PatchRequest();
263+
request.setOp(PatchOperation.REPLACE);
264+
request.setPath("/status");
265+
request.setValue("cancelled");
266+
267+
ResponseList<PreTranslation> preTranslationsResponseList = this.getTranslationsApi().batchEditPreTranslations(projectId, Arrays.asList(request));
268+
assertEquals(1, preTranslationsResponseList.getData().size());
269+
PreTranslation preTranslation = preTranslationsResponseList.getData().get(0).getData();
270+
assertEquals(preTranslationId, preTranslation.getIdentifier());
271+
272+
assertEquals(language, preTranslation.getAttributes().getLanguageIds().get(0));
273+
assertEquals(fileId, preTranslation.getAttributes().getFileIds().get(0));
274+
}
275+
259276
@Test
260277
public void getPreTranslationReportTest() {
261278
ResponseObject<PreTranslationReportResponse> response = this.getTranslationsApi().getPreTranslationReport(projectId, preTranslationId);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "replace",
4+
"path": "/status",
5+
"value": "cancelled"
6+
}
7+
]
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"data": [
3+
{
4+
"data": {
5+
"identifier": "9e7de270-4f83-41cb-b606-2f90631f26e2",
6+
"status": "cancelled",
7+
"progress": 50,
8+
"attributes": {
9+
"method": "tm",
10+
"fileIds": [
11+
2
12+
],
13+
"languageIds": [
14+
"uk"
15+
],
16+
"autoApproveOption": "none",
17+
"fallbackLanguages": null,
18+
"duplicateTranslations": false,
19+
"skipApprovedTranslations": false,
20+
"translateUntranslatedOnly": true,
21+
"translateWithPerfectMatchOnly": false
22+
},
23+
"createdAt": "2024-01-01T01:00:00+00:00",
24+
"updatedAt": "2024-01-01T01:01:00+00:00",
25+
"startedAt": "2024-01-01T01:00:00+00:00",
26+
"finishedAt": "2024-01-01T01:01:00+00:00"
27+
}
28+
}
29+
],
30+
"pagination": {
31+
"offset": 0,
32+
"limit": 100
33+
}
34+
}

0 commit comments

Comments
 (0)