From 81ee306a2d34d9586aafa5c1abdda8ee49df08b8 Mon Sep 17 00:00:00 2001 From: Beppe Catanese Date: Wed, 24 Jan 2024 21:22:39 +0100 Subject: [PATCH 1/2] Validation of workflowId --- .../apiflows/parser/OpenAPIWorkflowValidator.java | 12 ++++++++++++ .../parser/OpenAPIWorkflowValidatorTest.java | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java index bbbcb5a..1bdce72 100644 --- a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java +++ b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java @@ -64,6 +64,11 @@ public OpenAPIWorkflowValidatorResult validate(OpenAPIWorkflow openAPIWorkflow) if (workflow.getWorkflowId() == null || workflow.getWorkflowId().isEmpty()) { result.addError("'Workflow[" + i + "] workflowId' is undefined"); } + + if (!isValidWorkflowId(workflow.getWorkflowId())) { + result.addError("'Workflow[" + i + "] workflowId' format is invalid (should match regex " + getWorkflowIdRegularExpression() + ")"); + } + if (workflow.getSteps() == null) { result.addError("'Workflow " + workflow.getWorkflowId() + "' no Steps are undefined"); } @@ -162,6 +167,10 @@ public OpenAPIWorkflowValidatorResult validate(OpenAPIWorkflow openAPIWorkflow) return result; } + boolean isValidWorkflowId(String workflowId) { + return Pattern.matches(getWorkflowIdRegularExpression(), workflowId); + } + boolean isValidStepId(String stepId) { return Pattern.matches(getStepIdRegularExpression(), stepId); } @@ -170,6 +179,9 @@ String getStepIdRegularExpression() { return "[A-Za-z0-9_\\-]+"; } + String getWorkflowIdRegularExpression() { + return "[A-Za-z0-9_\\\\-]++"; + } boolean isValidOutputsKey(String key) { return Pattern.matches(getOutputsKeyRegularExpression(), key); } diff --git a/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java b/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java index c641227..03850ed 100644 --- a/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java +++ b/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java @@ -16,4 +16,14 @@ void validate() { assertFalse(result.getErrors().isEmpty()); assertEquals("'workflowsSpec' is undefined", result.getErrors().get(0)); } + + @Test + void validWorkflowId() { + assertTrue(new OpenAPIWorkflowValidator().isValidWorkflowId("idOfTheWorkflow_1")); + } + + @Test + void invalidWorkflowId() { + assertFalse(new OpenAPIWorkflowValidator().isValidWorkflowId("workflow id")); + } } \ No newline at end of file From 62ffaeb20cbeb026c5b3df9475aaf9d05e0bdf59 Mon Sep 17 00:00:00 2001 From: Beppe Catanese Date: Wed, 24 Jan 2024 21:22:57 +0100 Subject: [PATCH 2/2] Test with file in the repo --- .../java/com/apiflows/parser/OpenAPIWorkflowParserTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/apiflows/parser/OpenAPIWorkflowParserTest.java b/src/test/java/com/apiflows/parser/OpenAPIWorkflowParserTest.java index 68b8bcf..2be3623 100644 --- a/src/test/java/com/apiflows/parser/OpenAPIWorkflowParserTest.java +++ b/src/test/java/com/apiflows/parser/OpenAPIWorkflowParserTest.java @@ -30,7 +30,7 @@ void parseFromFile() { @Test void parseFromUrl() { - final String WORKFLOWS_SPEC_FILE = "https://raw.githubusercontent.com/OAI/sig-workflows/main/examples/1.0.0/pet-coupons.workflow.yaml"; + final String WORKFLOWS_SPEC_FILE = "https://raw.githubusercontent.com/API-Flows/openapi-workflow-parser/main/src/test/resources/1.0.0/pet-coupons.workflow.yaml"; OpenAPIWorkflowParserResult result = parser.parse(WORKFLOWS_SPEC_FILE); assertNotNull(result.getOpenAPIWorkflow());