Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions src/main/java/com/apiflows/model/Components.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
package com.apiflows.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.models.media.Schema;

import java.util.HashMap;
import java.util.Map;

public class Components {

private Map<String, InputComponent> inputs;
private Map<String, ParameterComponent> parameters;
private Map<String, Schema> inputs = new HashMap<>();
private Map<String, Parameter> parameters = new HashMap<>();

// Getters and setters

@JsonProperty("inputs")
public Map<String, InputComponent> getInputs() {
public Map<String, Schema> getInputs() {
return inputs;
}

public void setInputs(Map<String, InputComponent> inputs) {
public void setInputs(Map<String, Schema> inputs) {
this.inputs = inputs;
}

@JsonProperty("parameters")
public Map<String, ParameterComponent> getParameters() {
public Map<String, Parameter> getParameters() {
return parameters;
}

public void setParameters(Map<String, ParameterComponent> parameters) {
public void setParameters(Map<String, Parameter> parameters) {
this.parameters = parameters;
}

public void addParameter(String key, Parameter parameter) {
this.parameters.put(key, parameter);
}

public void addInput(String key, Schema input) {
this.inputs.put(key, input);
}

}

32 changes: 0 additions & 32 deletions src/main/java/com/apiflows/model/InputComponent.java

This file was deleted.

38 changes: 0 additions & 38 deletions src/main/java/com/apiflows/model/ParameterComponent.java

This file was deleted.

44 changes: 42 additions & 2 deletions src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@ public OpenAPIWorkflowValidatorResult validate() {
result.addError("'workflowsSpec' is undefined");
}

// Info
result.addErrors(validateInfo(openAPIWorkflow.getInfo()));

// SourceDescriptions
result.addErrors(validateSourceDescriptions(openAPIWorkflow.getSourceDescriptions()));

// Workflows
if (openAPIWorkflow.getWorkflows() == null || openAPIWorkflow.getWorkflows().isEmpty()) {
result.addError("'Workflows' is undefined");
}
Expand All @@ -53,6 +54,8 @@ public OpenAPIWorkflowValidatorResult validate() {
}
}
}
// Components
result.addErrors(validateComponents(openAPIWorkflow.getComponents()));

if(!result.getErrors().isEmpty()) {
result.setValid(false);
Expand Down Expand Up @@ -318,6 +321,35 @@ List<String> validateCriterion(Criterion criterion, String stepId) {
return errors;
}

List<String> validateComponents(Components components) {
List<String> errors = new ArrayList<>();

if(components != null) {
if (components.getParameters() != null) {

for(String key : components.getParameters().keySet()) {
if(isValidComponentKey(key)) {
errors.add("'Component parameter " + key + " is invalid (should match regex " + getComponentKeyRegularExpression() + ")");
}
}

for (Parameter parameter : components.getParameters().values()) {
errors.addAll(validateParameter(parameter, "Components"));
}
}
if (components.getInputs() != null) {

for(String key : components.getInputs().keySet()) {
if(isValidComponentKey(key)) {
errors.add("'Component input " + key + " is invalid (should match regex " + getComponentKeyRegularExpression() + ")");
}
}

}
}

return errors;
}

boolean isValidWorkflowId(String workflowId) {
return Pattern.matches(getWorkflowIdRegularExpression(), workflowId);
Expand All @@ -327,13 +359,21 @@ boolean isValidStepId(String stepId) {
return Pattern.matches(getStepIdRegularExpression(), stepId);
}

boolean isValidComponentKey(String key) {
return Pattern.matches(getComponentKeyRegularExpression(), key);
}

String getStepIdRegularExpression() {
return "[A-Za-z0-9_\\-]+";
}

String getWorkflowIdRegularExpression() {
return "[A-Za-z0-9_\\\\-]++";
}
String getComponentKeyRegularExpression() {
return "^[a-zA-Z0-9\\.\\-_]+$";
}

boolean isValidOutputsKey(String key) {
return Pattern.matches(getOutputsKeyRegularExpression(), key);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,20 @@ void loadWorkflowIWithDuplicateIds() {
assertEquals(1, validator.loadWorkflowIds(list).size());
}

@Test
void validateComponentsParameterInvalidIn() {
Parameter parameter = new Parameter()
.name("param")
.value("1")
.in("dummy");
String worklowId = "q1";

Components components = new Components();
components.addParameter("param1", parameter);

assertEquals(1, validator.validateParameter(parameter, worklowId).size());
}

@Test
void loadStepsWithDuplicateIds() {
List<Workflow> list = List.of(
Expand Down Expand Up @@ -460,7 +474,7 @@ void validOutputsKey() {
}

@Test
void inalidOutputsKey() {
void invalidOutputsKey() {
assertFalse(new OpenAPIWorkflowValidator().isValidOutputsKey("$tokenExpires"));
}

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

@Test
void validComponentKey() {
assertTrue(new OpenAPIWorkflowValidator().isValidComponentKey("pagination"));
}

@Test
void invalidComponentKey() {
assertFalse(new OpenAPIWorkflowValidator().isValidComponentKey("pagination order"));
}

}