Skip to content

Commit

Permalink
feat: task add command - add '--include-pre-translated-strings-only' …
Browse files Browse the repository at this point in the history
…option (#634)
  • Loading branch information
andrii-bodnar authored Sep 7, 2023
1 parent c704029 commit 0c45d27
Show file tree
Hide file tree
Showing 9 changed files with 64 additions and 20 deletions.
1 change: 1 addition & 0 deletions prepare-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ sed -i.bak -e 's/\*\*--\[no-\]translate-untranslated-only\*\*/`--[no-]translate-
sed -i.bak -e 's/\*\*--\[no-\]translate-with-perfect-match-only\*\*/`--[no-]translate-with-perfect-match-only`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]skip-assigned-strings\*\*/`--[no-]skip-assigned-strings`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]skip-untranslated-strings\*\*/`--[no-]skip-untranslated-strings`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]include-pre-translated-strings-only\*\*/`--[no-]include-pre-translated-strings-only`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]auto-update\*\*/`--[no-]auto-update`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]auto-approve-imported\*\*/`--[no-]auto-approve-imported`/g' -- *.md
sed -i.bak -e 's/\*\*--\[no-\]import-eq-suggestions\*\*/`--[no-]import-eq-suggestions`/g' -- *.md
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/crowdin/cli/commands/Actions.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ NewAction<BaseProperties, ClientTm> tmDownload(

NewAction<ProjectProperties, ClientTask> taskList(boolean plainView, boolean isVerbose, String status, Long assigneeId);

NewAction<ProjectProperties, ClientTask> taskAdd(String title, Integer type, String language, List<Long> fileId, Long workflowStep, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, List<Long> labels);
NewAction<ProjectProperties, ClientTask> taskAdd(String title, Integer type, String language, List<Long> fileId, Long workflowStep, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, boolean includePreTranslatedStringsOnly, List<Long> labels);

NewAction<ProjectProperties, ClientDistribution> distributionList(boolean plainView);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,8 @@ public NewAction<ProjectProperties, ClientTask> taskList(boolean plainView, bool
}

@Override
public NewAction<ProjectProperties, ClientTask> taskAdd(String title, Integer type, String language, List<Long> fileId, Long workflowStep, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, List<Long> labels) {
return new TaskAddAction(title, type, language, fileId, workflowStep, description, skipAssignedStrings, skipUntranslatedStrings, labels);
public NewAction<ProjectProperties, ClientTask> taskAdd(String title, Integer type, String language, List<Long> fileId, Long workflowStep, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, boolean includePreTranslatedStringsOnly, List<Long> labels) {
return new TaskAddAction(title, type, language, fileId, workflowStep, description, skipAssignedStrings, skipUntranslatedStrings, includePreTranslatedStringsOnly, labels);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ class TaskAddAction implements NewAction<ProjectProperties, ClientTask> {

private boolean skipUntranslatedStrings;

private boolean includePreTranslatedStringsOnly;

private List<Long> labels;

@Override
Expand All @@ -53,6 +55,7 @@ public void act(Outputter out, ProjectProperties pb, ClientTask client) {
Optional.ofNullable(fileId).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setFileIds(value));
Optional.ofNullable(description).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setDescription(value));
Optional.ofNullable(skipAssignedStrings).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setSkipAssignedStrings(value));
Optional.ofNullable(includePreTranslatedStringsOnly).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setIncludePreTranslatedStringsOnly(value));
Optional.ofNullable(labels).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setLabelIds(value));
Optional.ofNullable(workflowStep).ifPresent(value -> ((EnterpriseTaskCreateFormRequest) addTaskRequest).setWorkflowStepId(value));
} else {
Expand All @@ -64,6 +67,7 @@ public void act(Outputter out, ProjectProperties pb, ClientTask client) {
Optional.ofNullable(description).ifPresent(value -> ((CrowdinTaskCreateFormRequest) addTaskRequest).setDescription(value));
Optional.ofNullable(skipAssignedStrings).ifPresent(value -> ((CrowdinTaskCreateFormRequest) addTaskRequest).setSkipAssignedStrings(value));
Optional.ofNullable(skipUntranslatedStrings).ifPresent(value -> ((CrowdinTaskCreateFormRequest) addTaskRequest).setSkipUntranslatedStrings(value));
Optional.ofNullable(includePreTranslatedStringsOnly).ifPresent(value -> ((CrowdinTaskCreateFormRequest) addTaskRequest).setIncludePreTranslatedStringsOnly(value));
Optional.ofNullable(labels).ifPresent(value -> ((CrowdinTaskCreateFormRequest) addTaskRequest).setLabelIds(value));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public static AddDistributionRequest addDistribution(String name, ExportMode exp
return request;
}

public static CrowdinTaskCreateFormRequest addCrowdinTask(String title, Integer type, String languageId, List<Long> fileId, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, List<Long> labelIds) {
public static CrowdinTaskCreateFormRequest addCrowdinTask(String title, Integer type, String languageId, List<Long> fileId, String description, boolean skipAssignedStrings, boolean skipUntranslatedStrings, boolean includePreTranslatedStringsOnly, List<Long> labelIds) {
CrowdinTaskCreateFormRequest request = new CrowdinTaskCreateFormRequest();
request.setTitle(title);
request.setType(type);
Expand All @@ -77,17 +77,19 @@ public static CrowdinTaskCreateFormRequest addCrowdinTask(String title, Integer
request.setDescription(description);
request.setSkipAssignedStrings(skipAssignedStrings);
request.setSkipUntranslatedStrings(skipUntranslatedStrings);
request.setIncludePreTranslatedStringsOnly(includePreTranslatedStringsOnly);
request.setLabelIds(labelIds);
return request;
}

public static EnterpriseTaskCreateFormRequest addEnterpriseTask(String title, String languageId, List<Long> fileId, String description, boolean skipAssignedStrings, List<Long> labelIds, Long workflowStepId) {
public static EnterpriseTaskCreateFormRequest addEnterpriseTask(String title, String languageId, List<Long> fileId, String description, boolean skipAssignedStrings, boolean includePreTranslatedStringsOnly, List<Long> labelIds, Long workflowStepId) {
EnterpriseTaskCreateFormRequest request = new EnterpriseTaskCreateFormRequest();
request.setTitle(title);
request.setLanguageId(languageId);
request.setFileIds(fileId);
request.setDescription(description);
request.setSkipAssignedStrings(skipAssignedStrings);
request.setIncludePreTranslatedStringsOnly(includePreTranslatedStringsOnly);
request.setLabelIds(labelIds);
request.setWorkflowStepId(workflowStepId);
return request;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,28 @@ class TaskAddSubcommand extends ActCommandTask {
@CommandLine.Option(names = {"--skip-untranslated-strings"}, paramLabel = "...", negatable = true, descriptionKey = "crowdin.task.add.skip-untranslated-strings", order = -2)
protected boolean skipUntranslatedStrings;

@CommandLine.Option(names = {"--include-pre-translated-strings-only"}, paramLabel = "...", negatable = true, descriptionKey = "crowdin.task.add.include-pre-translated-strings-only", order = -2)
protected boolean includePreTranslatedStringsOnly;

@CommandLine.Option(names = {"--label"}, paramLabel = "...", descriptionKey = "crowdin.task.add.label", order = -2)
protected List<Long> labels;

@Override
protected NewAction<ProjectProperties, ClientTask> getAction(Actions actions) {
int intType = TRANSLATE_TASK_TYPE.equalsIgnoreCase(type) ? 0 : 1;
return actions.taskAdd(title, intType, language, files, workflowStep, description, skipAssignedStrings, skipUntranslatedStrings, labels);

return actions.taskAdd(
title,
intType,
language,
files,
workflowStep,
description,
skipAssignedStrings,
skipUntranslatedStrings,
includePreTranslatedStringsOnly,
labels
);
}

@Override
Expand All @@ -66,23 +81,40 @@ protected List<String> checkOptions(boolean isEnterprise) {
if (Strings.isEmpty(type)) {
errors.add(RESOURCE_BUNDLE.getString("error.task.empty_type"));
}

if (Strings.isNotEmpty(type) && !(TRANSLATE_TASK_TYPE.equalsIgnoreCase(type) || PROOFREAD_TASK_TYPE.equalsIgnoreCase(type))) {
errors.add(RESOURCE_BUNDLE.getString("error.task.unsupported.type"));
}

if (TRANSLATE_TASK_TYPE.equalsIgnoreCase(type) && skipUntranslatedStrings) {
errors.add(RESOURCE_BUNDLE.getString("error.task.translate_type_skip_untranslated_strings"));
}

if (includePreTranslatedStringsOnly && !skipUntranslatedStrings) {
errors.add(RESOURCE_BUNDLE.getString("error.task.skip_untranslated_strings_include_pre_translated"));
}
} else {
if (workflowStep == null) {
errors.add(RESOURCE_BUNDLE.getString("error.task.empty_workflow_step"));
}
}

if (Strings.isEmpty(title)) {
errors.add(RESOURCE_BUNDLE.getString("error.task.empty_title"));
}

if (Strings.isEmpty(language)) {
errors.add(RESOURCE_BUNDLE.getString("error.task.empty_language"));
}

if (files == null || files.isEmpty()) {
errors.add(RESOURCE_BUNDLE.getString("error.task.empty_fileId"));
}

if (TRANSLATE_TASK_TYPE.equalsIgnoreCase(type) && includePreTranslatedStringsOnly) {
errors.add(RESOURCE_BUNDLE.getString("error.task.translate_type_include_pre_translated_strings"));
}

return errors;
}
}
6 changes: 5 additions & 1 deletion src/main/resources/messages/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ crowdin.task.add.workflow-step=Task workflow step (Crowdin Enterprise only)
crowdin.task.add.description=Task description
crowdin.task.add.skip-assigned-strings=Skip strings already included in other tasks
crowdin.task.add.skip-untranslated-strings=Defines whether to export only translated strings (crowdin.com only)
crowdin.task.add.include-pre-translated-strings-only=Defines whether to export only pre-translated strings
crowdin.task.add.label=Label identifier. Could be specified multiple times

# CROWDIN BUNDLE COMMAND
Expand Down Expand Up @@ -466,9 +467,12 @@ error.task_is_not_added=Task was not added: '%s'
error.task.unsupported.type=Unsupported task type. Possible values: translate, proofread
error.task.empty_type=Task type can not be empty. Possible values: translate, proofread
error.task.empty_title=Task title can not be empty
error.task.empty_language=Language can not be empty. (eg. es-ES, en-US)
error.task.empty_language=Language can not be empty. (e.g. es-ES, en-US)
error.task.empty_fileId=The '--file' value can not be empty
error.task.empty_workflow_step=Workflow step id can not be empty
error.task.translate_type_skip_untranslated_strings=The '--skip-untranslated-strings' option can't be used with the 'translate' task type
error.task.translate_type_include_pre_translated_strings=The '--include-pre-translated-strings-only' option can't be used with the 'translate' task type
error.task.skip_untranslated_strings_include_pre_translated=The '--include-pre-translated-strings-only' option should be used with the '--skip-untranslated-strings' option

error.bundle_is_not_added=Bundle was not added: '%s'
error.bundle.empty_name=Bundle name can't be empty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ public class TaskAddActionTest {
@ParameterizedTest
@MethodSource
public void testTaskAdd(String title, Integer type, String languageId, List<Long> fileIds, String description,
boolean skipAssignedStrings, boolean skipUntranslatedStrings, List<Long> labelIds) {
boolean skipAssignedStrings, boolean skipUntranslatedStrings, boolean includePreTranslatedStringsOnly, List<Long> labelIds) {
NewPropertiesWithFilesUtilBuilder pbBuilder = NewPropertiesWithFilesUtilBuilder
.minimalBuiltPropertiesBean("*", Utils.PATH_SEPARATOR + "%original_file_name%-CR-%locale%")
.setBasePath(Utils.PATH_SEPARATOR);
PropertiesWithFiles pb = pbBuilder.build();

CrowdinTaskCreateFormRequest request = RequestBuilder.addCrowdinTask(title, type, languageId, fileIds,
description, skipAssignedStrings, skipUntranslatedStrings, labelIds);
description, skipAssignedStrings, skipUntranslatedStrings, includePreTranslatedStringsOnly, labelIds);

ClientTask client = mock(ClientTask.class);
when(client.addTask(request))
Expand All @@ -59,15 +59,16 @@ public void testTaskAdd(String title, Integer type, String languageId, List<Long
setDescription(request.getDescription());
setTitle(request.getTitle());
}});
action = new TaskAddAction(title, type, languageId, fileIds, null, description, skipAssignedStrings,
skipUntranslatedStrings, labelIds);

action = new TaskAddAction(title, type, languageId, fileIds, null, description, skipAssignedStrings, skipUntranslatedStrings, includePreTranslatedStringsOnly, labelIds);
action.act(Outputter.getDefault(), pb, client);

verify(client).addTask(request);
verifyNoMoreInteractions(client);
}

public static Stream<Arguments> testTaskAdd() {
return Stream.of(arguments("My title", 1, "es", Arrays.asList(12L), "It's description", false, false, null));
return Stream.of(arguments("My title", 1, "es", Arrays.asList(12L), "It's description", false, false, false, null));
}

@ParameterizedTest
Expand All @@ -82,7 +83,7 @@ public void testEnterpriseTaskAdd(String title, String languageId, List<Long> fi
pb.setBaseUrl("https://testos.crowdin.com");

EnterpriseTaskCreateFormRequest request = RequestBuilder.addEnterpriseTask(title, languageId, fileIds,
description, skipAssignedStrings, labelIds, workflowStepId);
description, skipAssignedStrings, false, labelIds, workflowStepId);

ClientTask client = mock(ClientTask.class);
when(client.addTask(request))
Expand All @@ -92,9 +93,10 @@ public void testEnterpriseTaskAdd(String title, String languageId, List<Long> fi
setDescription(request.getDescription());
setTitle(request.getTitle());
}});
action = new TaskAddAction(title, null, languageId, fileIds, workflowStepId, description, skipAssignedStrings,
false, labelIds);

action = new TaskAddAction(title, null, languageId, fileIds, workflowStepId, description, skipAssignedStrings, false, false, labelIds);
action.act(Outputter.getDefault(), pb, client);

verify(client).addTask(request);
verifyNoMoreInteractions(client);
}
Expand All @@ -112,17 +114,16 @@ public void testAddTaskThrows() {
ClientTask client = mock(ClientTask.class);

CrowdinTaskCreateFormRequest request = RequestBuilder.addCrowdinTask(null, null, null,
null, null, false, false, null);
null, null, false, false, false, null);

when(client.addTask(request))
.thenThrow(new RuntimeException("Whoops"));

action = new TaskAddAction(null, null, null,null, null, null,
false, false, null);
action = new TaskAddAction(null, null, null, null, null, null, false, false, false, null);

assertThrows(RuntimeException.class, () -> action.act(Outputter.getDefault(), pb, client));

verify(client).addTask(request);
verifyNoMoreInteractions(client);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ void mockActions() {
.thenReturn(actionMock);
when(actionsMock.taskList(anyBoolean(), anyBoolean(), any(), any()))
.thenReturn(actionMock);
when(actionsMock.taskAdd(any(), any(),any(), any(), anyLong(), any(), anyBoolean(), anyBoolean(), any()))
when(actionsMock.taskAdd(any(), any(),any(), any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean(), any()))
.thenReturn(actionMock);
when(actionsMock.distributionList(anyBoolean()))
.thenReturn(actionMock);
Expand Down

0 comments on commit 0c45d27

Please sign in to comment.