Skip to content

Commit e04cc67

Browse files
authored
Merge pull request #25 from API-Flows/components-refactoring
Components refactoring
2 parents 7386e2b + 054aa48 commit e04cc67

File tree

5 files changed

+84
-79
lines changed

5 files changed

+84
-79
lines changed
Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,43 @@
11
package com.apiflows.model;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import io.swagger.v3.oas.models.media.Schema;
45

6+
import java.util.HashMap;
57
import java.util.Map;
68

79
public class Components {
810

9-
private Map<String, InputComponent> inputs;
10-
private Map<String, ParameterComponent> parameters;
11+
private Map<String, Schema> inputs = new HashMap<>();
12+
private Map<String, Parameter> parameters = new HashMap<>();
1113

1214
// Getters and setters
1315

1416
@JsonProperty("inputs")
15-
public Map<String, InputComponent> getInputs() {
17+
public Map<String, Schema> getInputs() {
1618
return inputs;
1719
}
1820

19-
public void setInputs(Map<String, InputComponent> inputs) {
21+
public void setInputs(Map<String, Schema> inputs) {
2022
this.inputs = inputs;
2123
}
2224

2325
@JsonProperty("parameters")
24-
public Map<String, ParameterComponent> getParameters() {
26+
public Map<String, Parameter> getParameters() {
2527
return parameters;
2628
}
2729

28-
public void setParameters(Map<String, ParameterComponent> parameters) {
30+
public void setParameters(Map<String, Parameter> parameters) {
2931
this.parameters = parameters;
3032
}
33+
34+
public void addParameter(String key, Parameter parameter) {
35+
this.parameters.put(key, parameter);
36+
}
37+
38+
public void addInput(String key, Schema input) {
39+
this.inputs.put(key, input);
40+
}
41+
3142
}
3243

src/main/java/com/apiflows/model/InputComponent.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/com/apiflows/model/ParameterComponent.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

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)