Skip to content

Commit 054aa48

Browse files
committed
Validate components
1 parent 23b84ef commit 054aa48

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ public OpenAPIWorkflowValidatorResult validate() {
3434
result.addError("'workflowsSpec' is undefined");
3535
}
3636

37+
// Info
3738
result.addErrors(validateInfo(openAPIWorkflow.getInfo()));
38-
39+
// SourceDescriptions
3940
result.addErrors(validateSourceDescriptions(openAPIWorkflow.getSourceDescriptions()));
40-
41+
// Workflows
4142
if (openAPIWorkflow.getWorkflows() == null || openAPIWorkflow.getWorkflows().isEmpty()) {
4243
result.addError("'Workflows' is undefined");
4344
}
@@ -53,6 +54,8 @@ public OpenAPIWorkflowValidatorResult validate() {
5354
}
5455
}
5556
}
57+
// Components
58+
result.addErrors(validateComponents(openAPIWorkflow.getComponents()));
5659

5760
if(!result.getErrors().isEmpty()) {
5861
result.setValid(false);
@@ -318,6 +321,35 @@ List<String> validateCriterion(Criterion criterion, String stepId) {
318321
return errors;
319322
}
320323

324+
List<String> validateComponents(Components components) {
325+
List<String> errors = new ArrayList<>();
326+
327+
if(components != null) {
328+
if (components.getParameters() != null) {
329+
330+
for(String key : components.getParameters().keySet()) {
331+
if(isValidComponentKey(key)) {
332+
errors.add("'Component parameter " + key + " is invalid (should match regex " + getComponentKeyRegularExpression() + ")");
333+
}
334+
}
335+
336+
for (Parameter parameter : components.getParameters().values()) {
337+
errors.addAll(validateParameter(parameter, "Components"));
338+
}
339+
}
340+
if (components.getInputs() != null) {
341+
342+
for(String key : components.getInputs().keySet()) {
343+
if(isValidComponentKey(key)) {
344+
errors.add("'Component input " + key + " is invalid (should match regex " + getComponentKeyRegularExpression() + ")");
345+
}
346+
}
347+
348+
}
349+
}
350+
351+
return errors;
352+
}
321353

322354
boolean isValidWorkflowId(String workflowId) {
323355
return Pattern.matches(getWorkflowIdRegularExpression(), workflowId);
@@ -327,13 +359,21 @@ boolean isValidStepId(String stepId) {
327359
return Pattern.matches(getStepIdRegularExpression(), stepId);
328360
}
329361

362+
boolean isValidComponentKey(String key) {
363+
return Pattern.matches(getComponentKeyRegularExpression(), key);
364+
}
365+
330366
String getStepIdRegularExpression() {
331367
return "[A-Za-z0-9_\\-]+";
332368
}
333369

334370
String getWorkflowIdRegularExpression() {
335371
return "[A-Za-z0-9_\\\\-]++";
336372
}
373+
String getComponentKeyRegularExpression() {
374+
return "^[a-zA-Z0-9\\.\\-_]+$";
375+
}
376+
337377
boolean isValidOutputsKey(String key) {
338378
return Pattern.matches(getOutputsKeyRegularExpression(), key);
339379
}

src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,20 @@ void loadWorkflowIWithDuplicateIds() {
429429
assertEquals(1, validator.loadWorkflowIds(list).size());
430430
}
431431

432+
@Test
433+
void validateComponentsParameterInvalidIn() {
434+
Parameter parameter = new Parameter()
435+
.name("param")
436+
.value("1")
437+
.in("dummy");
438+
String worklowId = "q1";
439+
440+
Components components = new Components();
441+
components.addParameter("param1", parameter);
442+
443+
assertEquals(1, validator.validateParameter(parameter, worklowId).size());
444+
}
445+
432446
@Test
433447
void loadStepsWithDuplicateIds() {
434448
List<Workflow> list = List.of(
@@ -460,7 +474,7 @@ void validOutputsKey() {
460474
}
461475

462476
@Test
463-
void inalidOutputsKey() {
477+
void invalidOutputsKey() {
464478
assertFalse(new OpenAPIWorkflowValidator().isValidOutputsKey("$tokenExpires"));
465479
}
466480

@@ -469,4 +483,14 @@ void invalidOutputsKeyWithSpace() {
469483
assertFalse(new OpenAPIWorkflowValidator().isValidOutputsKey("$token Expires"));
470484
}
471485

486+
@Test
487+
void validComponentKey() {
488+
assertTrue(new OpenAPIWorkflowValidator().isValidComponentKey("pagination"));
489+
}
490+
491+
@Test
492+
void invalidComponentKey() {
493+
assertFalse(new OpenAPIWorkflowValidator().isValidComponentKey("pagination order"));
494+
}
495+
472496
}

0 commit comments

Comments
 (0)