-
Notifications
You must be signed in to change notification settings - Fork 48
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(api): add the Translation Memory Segments API support (#158)
- Loading branch information
Showing
13 changed files
with
420 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
src/main/java/com/crowdin/client/translationmemory/model/CreateTmSegmentRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
import java.util.List; | ||
|
||
@Data | ||
public class CreateTmSegmentRequest { | ||
private List<TmSegmentRecordForm> records; | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/com/crowdin/client/translationmemory/model/TmSegment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
import java.util.List; | ||
|
||
@Data | ||
public class TmSegment { | ||
private Long id; | ||
private List<TmSegmentRecord> records; | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/crowdin/client/translationmemory/model/TmSegmentRecord.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
import java.util.Date; | ||
|
||
@Data | ||
public class TmSegmentRecord { | ||
private Long id; | ||
private String languageId; | ||
private String text; | ||
private Long usageCount; | ||
private Long createdBy; | ||
private Long updatedBy; | ||
private Date createdAt; | ||
private Date updatedAt; | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/crowdin/client/translationmemory/model/TmSegmentRecordForm.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
@Data | ||
public class TmSegmentRecordForm { | ||
private String languageId; | ||
private String text; | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/crowdin/client/translationmemory/model/TmSegmentRecordOperationAdd.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
@Data | ||
public class TmSegmentRecordOperationAdd { | ||
private String text; | ||
private String languageId; | ||
} |
25 changes: 25 additions & 0 deletions
25
src/main/java/com/crowdin/client/translationmemory/model/TmSegmentResponseList.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.crowdin.client.translationmemory.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 TmSegmentResponseList { | ||
private List<TmSegmentResponseObject> data; | ||
private Pagination pagination; | ||
|
||
public static ResponseList<TmSegment> to(TmSegmentResponseList responseList) { | ||
return ResponseList.of( | ||
responseList.getData().stream() | ||
.map(TmSegmentResponseObject::getData) | ||
.map(ResponseObject::of) | ||
.collect(Collectors.toList()), | ||
responseList.getPagination() | ||
); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/com/crowdin/client/translationmemory/model/TmSegmentResponseObject.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.crowdin.client.translationmemory.model; | ||
|
||
import lombok.Data; | ||
|
||
@Data | ||
public class TmSegmentResponseObject { | ||
private TmSegment data; | ||
} |
163 changes: 163 additions & 0 deletions
163
src/test/java/com/crowdin/client/translationmemory/TranslationMemorySegmentsApiTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
package com.crowdin.client.translationmemory; | ||
|
||
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.translationmemory.model.*; | ||
|
||
import lombok.SneakyThrows; | ||
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.text.SimpleDateFormat; | ||
import java.util.*; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.junit.jupiter.api.Assertions.assertNotNull; | ||
|
||
public class TranslationMemorySegmentsApiTest extends TestClient { | ||
private final Long tmId = 1L; | ||
private final Long segmentId = 1L; | ||
|
||
@Override | ||
public List<RequestMock> getMocks() { | ||
return Arrays.asList( | ||
// LIST | ||
RequestMock.build( | ||
formUrl_tmSegments(tmId), | ||
HttpGet.METHOD_NAME, | ||
"api/translationmemory/segments/listTmSegmentsResponse.json", | ||
new HashMap<String, Integer>() {{ | ||
put("limit", 20); | ||
put("offset", 10); | ||
}} | ||
), | ||
|
||
// CREATE | ||
RequestMock.build( | ||
formUrl_tmSegments(tmId), | ||
HttpPost.METHOD_NAME, | ||
"api/translationmemory/segments/createTmSegmentRequest.json", | ||
"api/translationmemory/segments/commonResponses_single.json" | ||
), | ||
|
||
// GET | ||
RequestMock.build( | ||
formUrl_tmSegmentId(tmId, segmentId), | ||
HttpGet.METHOD_NAME, | ||
"api/translationmemory/segments/commonResponses_single.json" | ||
), | ||
|
||
// DELETE | ||
RequestMock.build( | ||
formUrl_tmSegmentId(tmId, segmentId), | ||
HttpDelete.METHOD_NAME | ||
), | ||
|
||
// EDIT | ||
RequestMock.build( | ||
formUrl_tmSegmentId(tmId, segmentId), | ||
HttpPatch.METHOD_NAME, | ||
"api/translationmemory/segments/editTmSegmentRequest.json", | ||
"api/translationmemory/segments/commonResponses_single.json" | ||
) | ||
); | ||
} | ||
|
||
//<editor-fold desc="Form Url methods for mocks"> | ||
|
||
private String formUrl_tmSegments(Long tmId) { | ||
return this.url + "/tms/" + tmId + "/segments"; | ||
} | ||
|
||
private String formUrl_tmSegmentId(Long tmId, Long segmentId) { | ||
return this.url + "/tms/" + tmId + "/segments/" + segmentId; | ||
} | ||
|
||
//</editor-fold> | ||
|
||
@Test | ||
public void listTmSegments() { | ||
ResponseList<TmSegment> response = this.getTranslationMemoryApi().listTmSegments(tmId, 20, 10); | ||
assertTmSegment(response.getData().get(0).getData()); | ||
} | ||
|
||
@Test | ||
public void createTmSegment() { | ||
CreateTmSegmentRequest request = new CreateTmSegmentRequest() {{ | ||
setRecords(Collections.singletonList(new TmSegmentRecordForm() {{ | ||
setLanguageId("uk"); | ||
setText("Перекладений текст"); | ||
}})); | ||
}}; | ||
|
||
ResponseObject<TmSegment> response = this.getTranslationMemoryApi().createTmSegment(tmId, request); | ||
assertTmSegment(response.getData()); | ||
} | ||
|
||
@Test | ||
public void getTmSegment() { | ||
ResponseObject<TmSegment> response = this.getTranslationMemoryApi().getTmSegment(tmId, segmentId); | ||
assertTmSegment(response.getData()); | ||
} | ||
|
||
@Test | ||
public void deleteTmSegment() { | ||
this.getTranslationMemoryApi().deleteTmSegment(tmId, segmentId); | ||
} | ||
|
||
@Test | ||
public void editTmSegment() { | ||
List<PatchRequest> request = new ArrayList<PatchRequest>() {{ | ||
add(new PatchRequest() {{ | ||
setOp(PatchOperation.ADD); | ||
setPath("/records/-"); | ||
setValue(new TmSegmentRecordOperationAdd() {{ | ||
setText("Перекладений текст"); | ||
setLanguageId("uk"); | ||
}}); | ||
}}); | ||
add(new PatchRequest() {{ | ||
setOp(PatchOperation.REPLACE); | ||
setPath("/records/1/text"); | ||
setValue("Перекладений текст 2"); | ||
}}); | ||
add(new PatchRequest() {{ | ||
setOp(PatchOperation.REMOVE); | ||
setPath("/records/2"); | ||
}}); | ||
}}; | ||
|
||
ResponseObject<TmSegment> response = this.getTranslationMemoryApi().editTmSegment(tmId, segmentId, request); | ||
assertTmSegment(response.getData()); | ||
} | ||
|
||
@SneakyThrows | ||
private static void assertTmSegment(TmSegment tmSegment) { | ||
assertNotNull(tmSegment); | ||
|
||
assertNotNull(tmSegment.getRecords()); | ||
assertEquals(1, tmSegment.getRecords().size()); | ||
|
||
TmSegmentRecord record = tmSegment.getRecords().get(0); | ||
assertNotNull(record); | ||
|
||
assertEquals(1, record.getId()); | ||
assertEquals("uk", record.getLanguageId()); | ||
assertEquals("Перекладений текст", record.getText()); | ||
assertEquals(13, record.getUsageCount()); | ||
assertEquals(1, record.getCreatedBy()); | ||
assertEquals(1, record.getUpdatedBy()); | ||
|
||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); | ||
|
||
assertEquals(sdf.parse("2019-09-16T13:48:04+00:00"), record.getCreatedAt()); | ||
assertEquals(sdf.parse("2019-09-16T13:48:04+00:00"), record.getUpdatedAt()); | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/test/resources/api/translationmemory/segments/commonResponses_single.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{ | ||
"data": { | ||
"id": 4, | ||
"records": [ | ||
{ | ||
"id": 1, | ||
"languageId": "uk", | ||
"text": "Перекладений текст", | ||
"usageCount": 13, | ||
"createdBy": 1, | ||
"updatedBy": 1, | ||
"createdAt": "2019-09-16T13:48:04+00:00", | ||
"updatedAt": "2019-09-16T13:48:04+00:00" | ||
} | ||
] | ||
} | ||
} |
Oops, something went wrong.