Skip to content

Commit edf9962

Browse files
Merge pull request #1405 from cloudsufi/cherry-pick-25f06063d68ca4bf26831064bba9a46298583d65
[🍒][PLUGIN-1318] Added ArgumentsColumnsList Exists Validation, Fix PlaceHolder Key
2 parents 09d1e1e + ad3a7c8 commit edf9962

3 files changed

Lines changed: 75 additions & 1 deletion

File tree

src/main/java/io/cdap/plugin/gcp/bigquery/action/BigQueryArgumentSetterConfig.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ public QueryJobConfiguration getQueryJobConfiguration(FailureCollector collector
198198
Map<String, Field> argumentConditionFields = extractArgumentsFields(fields, argumentConditionMap);
199199

200200
checkIfArgumentsColumnsExitsInSource(argumentConditionMap, argumentConditionFields);
201+
checkIfArgumentsColumnsListExistsInSource(getArgumentsColumnsList(), fields, collector);
201202

202203
String selectClause = getSelectClause();
203204
String whereCondition = getWhereCondition(argumentConditionMap.keySet());
@@ -228,6 +229,25 @@ private void checkIfArgumentsColumnsExitsInSource(Map<String, String> argumentCo
228229
nonExistingColumnNames));
229230
}
230231

232+
static void checkIfArgumentsColumnsListExistsInSource(
233+
List<String> argumentsColumnsList, FieldList fields, FailureCollector collector) {
234+
Set<String> fieldsNames = fields.stream().map(Field::getName).collect(Collectors.toSet());
235+
List<String> nonExistingColumns = argumentsColumnsList.stream()
236+
.filter(columnName -> !fieldsNames.contains(columnName))
237+
.collect(Collectors.toList());
238+
if (!nonExistingColumns.isEmpty()) {
239+
String formattedNonExistingColumnsList = String.join(" ,", nonExistingColumns);
240+
String[] oneManyColumn = {"Column", "Columns"};
241+
String[] oneManyDo = {"does", "do"};
242+
int oneManyIndex = nonExistingColumns.size() == 1 ? 0 : 1;
243+
collector.addFailure(
244+
String.format("%s: \"%s\" %s not exist in table. Argument columns must exist in table.",
245+
oneManyColumn[oneManyIndex], formattedNonExistingColumnsList, oneManyDo[oneManyIndex]),
246+
"Ensure correct column names are provided.")
247+
.withConfigProperty(NAME_ARGUMENTS_COLUMNS);
248+
}
249+
}
250+
231251
private Map<String, Field> extractArgumentsFields(
232252
FieldList fields, Map<String, String> argumentConditionKeyPair) {
233253
return fields.stream()

src/test/java/io/cdap/plugin/gcp/bigquery/action/BigQueryArgumentSetterConfigTest.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,33 @@
1616

1717
package io.cdap.plugin.gcp.bigquery.action;
1818

19+
import com.google.cloud.bigquery.Field;
20+
import com.google.cloud.bigquery.FieldList;
21+
import com.google.cloud.bigquery.LegacySQLTypeName;
22+
import com.google.common.collect.ImmutableList;
1923
import io.cdap.cdap.etl.api.validation.CauseAttributes;
2024
import io.cdap.cdap.etl.api.validation.ValidationException;
2125
import io.cdap.cdap.etl.api.validation.ValidationFailure;
2226
import io.cdap.cdap.etl.mock.validation.MockFailureCollector;
2327
import org.junit.Assert;
28+
import org.junit.Before;
2429
import org.junit.Test;
2530

31+
import java.util.List;
32+
2633
public class BigQueryArgumentSetterConfigTest {
2734

2835
private static final String VALID_DATASET = "dataset";
2936
private static final String VALID_DATASET_PROJECT = "datasetProject";
3037
private static final String VALID_TABLE = "table";
3138
private static final String VALID_ARGUMENT_SELECTION_CONDITIONS = "feed=10;id=0";
3239
private static final String VALID_ARGUMENT_COLUMN = "name";
40+
private MockFailureCollector mockFailureCollector;
41+
42+
@Before
43+
public void setUp() {
44+
mockFailureCollector = new MockFailureCollector();
45+
}
3346

3447
@Test
3548
public void testValidateMissingArgumentSelectionConditions() {
@@ -43,6 +56,47 @@ public void testValidateMissingArgumentColumns() {
4356
validateConfigValidationFail(config, BigQueryArgumentSetterConfig.NAME_ARGUMENTS_COLUMNS);
4457
}
4558

59+
@Test
60+
public void testCheckIfArgumentsColumnsListExistsInSourceMatchOne() {
61+
List<String> argumentsColumnsList = ImmutableList.of("name");
62+
FieldList fields = FieldList.of(Field.newBuilder("name", LegacySQLTypeName.STRING).build());
63+
BigQueryArgumentSetterConfig.checkIfArgumentsColumnsListExistsInSource(argumentsColumnsList, fields,
64+
mockFailureCollector);
65+
Assert.assertEquals(0, mockFailureCollector.getValidationFailures().size());
66+
}
67+
68+
@Test
69+
public void testCheckIfArgumentsColumnsListExistsInSourceMatchSome() {
70+
List<String> argumentsColumnsList = ImmutableList.of("name");
71+
FieldList fields = FieldList.of(Field.newBuilder("name", LegacySQLTypeName.STRING).build(),
72+
Field.newBuilder("age", LegacySQLTypeName.INTEGER).build());
73+
BigQueryArgumentSetterConfig.checkIfArgumentsColumnsListExistsInSource(argumentsColumnsList, fields,
74+
mockFailureCollector);
75+
Assert.assertEquals(0, mockFailureCollector.getValidationFailures().size());
76+
}
77+
78+
@Test
79+
public void testCheckIfArgumentsColumnsListExistsInSourceFailedMatchOne() {
80+
List<String> argumentsColumnsList = ImmutableList.of("name");
81+
FieldList fields = FieldList.of(Field.newBuilder("age", LegacySQLTypeName.INTEGER).build());
82+
BigQueryArgumentSetterConfig.checkIfArgumentsColumnsListExistsInSource(argumentsColumnsList, fields,
83+
mockFailureCollector);
84+
Assert.assertEquals(1, mockFailureCollector.getValidationFailures().size());
85+
Assert.assertEquals("Column: \"name\" does not exist in table. Argument columns must exist in table.",
86+
mockFailureCollector.getValidationFailures().get(0).getMessage());
87+
}
88+
89+
@Test
90+
public void testCheckIfArgumentsColumnsListExistsInSourceFailedMatchSome() {
91+
List<String> argumentsColumnsList = ImmutableList.of("name", "city");
92+
FieldList fields = FieldList.of(Field.newBuilder("age", LegacySQLTypeName.INTEGER).build());
93+
BigQueryArgumentSetterConfig.checkIfArgumentsColumnsListExistsInSource(argumentsColumnsList, fields,
94+
mockFailureCollector);
95+
Assert.assertEquals(1, mockFailureCollector.getValidationFailures().size());
96+
Assert.assertEquals("Columns: \"name ,city\" do not exist in table. Argument columns must exist in table.",
97+
mockFailureCollector.getValidationFailures().get(0).getMessage());
98+
}
99+
46100
private static BigQueryArgumentSetterConfig.Builder getBuilder() {
47101
return BigQueryArgumentSetterConfig.builder()
48102
.setDatasetProject(VALID_DATASET_PROJECT)

widgets/BigQueryArgumentSetter-action.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"widget-type": "csv",
7373
"widget-attributes" : {
7474
"delimiter": ",",
75-
"placeholder": "The name of the column that contains the arguments for this run."
75+
"value-placeholder": "The name of the column that contains the arguments for this run."
7676
}
7777
}
7878
]

0 commit comments

Comments
 (0)