Skip to content

Commit b804116

Browse files
committed
Changing validator back to List
Signed-off-by: Francisco Javier Tirado Sarti <[email protected]>
1 parent 3c27208 commit b804116

File tree

5 files changed

+80
-159
lines changed

5 files changed

+80
-159
lines changed

api/src/main/java/io/serverlessworkflow/api/interfaces/WorkflowValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717

1818
import io.serverlessworkflow.api.Workflow;
1919
import io.serverlessworkflow.api.validation.ValidationError;
20-
import java.util.Collection;
20+
import java.util.List;
2121

2222
public interface WorkflowValidator {
2323

2424
WorkflowValidator setWorkflow(Workflow workflow);
2525

2626
WorkflowValidator setSource(String source);
2727

28-
Collection<ValidationError> validate();
28+
List<ValidationError> validate();
2929

3030
boolean isValid();
3131

api/src/main/java/io/serverlessworkflow/api/validation/ValidationError.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package io.serverlessworkflow.api.validation;
1717

18-
import java.util.Objects;
19-
2018
public class ValidationError {
2119
private static final String MSG_FORMAT = "%s:%s";
2220
public static final String SCHEMA_VALIDATION = "schemavalidation";
@@ -45,18 +43,4 @@ public void setType(String type) {
4543
public String toString() {
4644
return String.format(MSG_FORMAT, type, message);
4745
}
48-
49-
@Override
50-
public int hashCode() {
51-
return Objects.hash(message, type);
52-
}
53-
54-
@Override
55-
public boolean equals(Object obj) {
56-
if (this == obj) return true;
57-
if (obj == null) return false;
58-
if (getClass() != obj.getClass()) return false;
59-
ValidationError other = (ValidationError) obj;
60-
return Objects.equals(message, other.message) && Objects.equals(type, other.type);
61-
}
6246
}

api/src/test/java/io/serverlessworkflow/api/test/ValidationErrorTest.java

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

validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@
3232
import io.serverlessworkflow.api.validation.ValidationError;
3333
import io.serverlessworkflow.api.validation.WorkflowSchemaLoader;
3434
import java.io.IOException;
35-
import java.util.Collection;
35+
import java.util.ArrayList;
3636
import java.util.HashSet;
37-
import java.util.LinkedHashSet;
3837
import java.util.List;
3938
import java.util.Set;
4039
import org.slf4j.Logger;
@@ -44,7 +43,7 @@ public class WorkflowValidatorImpl implements WorkflowValidator {
4443

4544
private static final Logger logger = LoggerFactory.getLogger(WorkflowValidatorImpl.class);
4645
private boolean schemaValidationEnabled = true;
47-
private Collection<ValidationError> validationErrors = new LinkedHashSet<>();
46+
private List<ValidationError> validationErrors = new ArrayList<>();
4847
private JsonNode workflowSchema = WorkflowSchemaLoader.getWorkflowSchema();
4948
private String source;
5049
private Workflow workflow;
@@ -62,7 +61,7 @@ public WorkflowValidator setSource(String source) {
6261
}
6362

6463
@Override
65-
public Collection<ValidationError> validate() {
64+
public List<ValidationError> validate() {
6665
validationErrors.clear();
6766
if (workflow == null) {
6867
try {
@@ -359,7 +358,8 @@ private boolean haveEventsDefinition(String eventName, List<EventDefinition> eve
359358
}
360359
}
361360

362-
private static final Set<String> skipMessages = Set.of("$.start: string found, object expected");
361+
private static final Set<String> skipMessages =
362+
Set.of("$.start: string found, object expected", "$.functions: array found, object expected");
363363

364364
private void addValidationError(String message, String type) {
365365
if (skipMessages.contains(message)) {

validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java

Lines changed: 73 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import io.serverlessworkflow.api.workflow.Retries;
3838
import io.serverlessworkflow.validation.WorkflowValidatorImpl;
3939
import java.util.Arrays;
40-
import java.util.Collection;
40+
import java.util.List;
4141
import org.junit.jupiter.api.Assertions;
4242
import org.junit.jupiter.api.Test;
4343

@@ -46,7 +46,7 @@ public class WorkflowValidationTest {
4646
@Test
4747
public void testIncompleteJsonWithSchemaValidation() {
4848
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
49-
Collection<ValidationError> validationErrors =
49+
List<ValidationError> validationErrors =
5050
workflowValidator.setSource("{\n" + " \"id\": \"abc\" \n" + "}").validate();
5151
Assertions.assertNotNull(validationErrors);
5252
Assertions.assertEquals(3, validationErrors.size());
@@ -55,7 +55,7 @@ public void testIncompleteJsonWithSchemaValidation() {
5555
@Test
5656
public void testIncompleteYamlWithSchemaValidation() {
5757
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
58-
Collection<ValidationError> validationErrors =
58+
List<ValidationError> validationErrors =
5959
workflowValidator.setSource("---\n" + "key: abc\n").validate();
6060
Assertions.assertNotNull(validationErrors);
6161
Assertions.assertEquals(3, validationErrors.size());
@@ -77,22 +77,18 @@ public void testFromIncompleteWorkflow() {
7777
.withDuration("PT1M")));
7878

7979
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
80-
Collection<ValidationError> validationErrors =
81-
workflowValidator.setWorkflow(workflow).validate();
80+
List<ValidationError> validationErrors = workflowValidator.setWorkflow(workflow).validate();
8281
Assertions.assertNotNull(validationErrors);
8382
Assertions.assertEquals(1, validationErrors.size());
84-
Assertions.assertTrue(
85-
validationErrors.stream()
86-
.anyMatch(
87-
v ->
88-
v.getMessage()
89-
.equals("No state name found that matches the workflow start definition")));
83+
Assertions.assertEquals(
84+
"No state name found that matches the workflow start definition",
85+
validationErrors.get(0).getMessage());
9086
}
9187

9288
@Test
9389
public void testWorkflowMissingStates() {
9490
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
95-
Collection<ValidationError> validationErrors =
91+
List<ValidationError> validationErrors =
9692
workflowValidator
9793
.setSource(
9894
"{\n"
@@ -106,14 +102,13 @@ public void testWorkflowMissingStates() {
106102
Assertions.assertNotNull(validationErrors);
107103
Assertions.assertEquals(1, validationErrors.size());
108104

109-
Assertions.assertTrue(
110-
validationErrors.stream().anyMatch(v -> v.getMessage().equals("No states found")));
105+
Assertions.assertEquals("No states found", validationErrors.get(0).getMessage());
111106
}
112107

113108
@Test
114109
public void testWorkflowMissingStatesIdAndKey() {
115110
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
116-
Collection<ValidationError> validationErrors =
111+
List<ValidationError> validationErrors =
117112
workflowValidator
118113
.setSource(
119114
"{\n"
@@ -125,64 +120,16 @@ public void testWorkflowMissingStatesIdAndKey() {
125120
.validate();
126121
Assertions.assertNotNull(validationErrors);
127122
Assertions.assertEquals(2, validationErrors.size());
128-
Assertions.assertEquals(
129-
validationErrors.stream()
130-
.filter(
131-
v ->
132-
v.getMessage().equals("No states found")
133-
|| v.getMessage().equals("Workflow id or key should not be empty"))
134-
.count(),
135-
2);
136-
}
137-
138-
@Test
139-
void testFunctionCall() {
140-
Workflow workflow =
141-
new Workflow()
142-
.withId("test-workflow")
143-
.withVersion("1.0")
144-
.withStart(new Start().withStateName("start"))
145-
.withFunctions(
146-
new Functions(
147-
Arrays.asList(new FunctionDefinition("expression").withType(Type.EXPRESSION))))
148-
.withStates(
149-
Arrays.asList(
150-
new OperationState()
151-
.withName("start")
152-
.withType(OPERATION)
153-
.withActions(
154-
Arrays.asList(
155-
new Action().withFunctionRef(new FunctionRef("expression"))))
156-
.withEnd(new End())));
157-
Assertions.assertTrue(new WorkflowValidatorImpl().setWorkflow(workflow).validate().isEmpty());
158-
}
159123

160-
@Test
161-
void testEventCall() {
162-
Workflow workflow =
163-
new Workflow()
164-
.withId("test-workflow")
165-
.withVersion("1.0")
166-
.withStart(new Start().withStateName("start"))
167-
.withEvents(new Events(Arrays.asList(new EventDefinition().withName("event"))))
168-
.withRetries(new Retries(Arrays.asList(new RetryDefinition("start", "PT1S"))))
169-
.withStates(
170-
Arrays.asList(
171-
new OperationState()
172-
.withName("start")
173-
.withType(OPERATION)
174-
.withActions(
175-
Arrays.asList(
176-
new Action()
177-
.withEventRef(new EventRef().withTriggerEventRef("event"))))
178-
.withEnd(new End())));
179-
Assertions.assertTrue(new WorkflowValidatorImpl().setWorkflow(workflow).validate().isEmpty());
124+
Assertions.assertEquals(
125+
"Workflow id or key should not be empty", validationErrors.get(0).getMessage());
126+
Assertions.assertEquals("No states found", validationErrors.get(1).getMessage());
180127
}
181128

182129
@Test
183130
public void testOperationStateNoFunctionRef() {
184131
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
185-
Collection<ValidationError> validationErrors =
132+
List<ValidationError> validationErrors =
186133
workflowValidator
187134
.setSource(
188135
"{\n"
@@ -225,6 +172,10 @@ public void testOperationStateNoFunctionRef() {
225172

226173
Assertions.assertNotNull(validationErrors);
227174
Assertions.assertEquals(1, validationErrors.size());
175+
176+
Assertions.assertEquals(
177+
"Operation State action functionRef does not reference an existing workflow function definition",
178+
validationErrors.get(0).getMessage());
228179
}
229180

230181
@Test
@@ -242,16 +193,15 @@ public void testValidateWorkflowForOptionalStartStateAndWorkflowName() {
242193
.withDuration("PT1M")));
243194

244195
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
245-
Collection<ValidationError> validationErrors =
246-
workflowValidator.setWorkflow(workflow).validate();
196+
List<ValidationError> validationErrors = workflowValidator.setWorkflow(workflow).validate();
247197
Assertions.assertNotNull(validationErrors);
248198
Assertions.assertEquals(0, validationErrors.size());
249199
}
250200

251201
@Test
252202
public void testValidateWorkflowForOptionalIterationParam() {
253203
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
254-
Collection<ValidationError> validationErrors =
204+
List<ValidationError> validationErrors =
255205
workflowValidator
256206
.setSource(
257207
"{\n"
@@ -292,13 +242,15 @@ public void testValidateWorkflowForOptionalIterationParam() {
292242
.validate();
293243

294244
Assertions.assertNotNull(validationErrors);
295-
Assertions.assertEquals(1, validationErrors.size());
245+
Assertions.assertEquals(
246+
1,
247+
validationErrors.size()); // validation error raised for functionref not for iterationParam
296248
}
297249

298250
@Test
299251
public void testMissingFunctionRefForCallbackState() {
300252
WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
301-
Collection<ValidationError> validationErrors =
253+
List<ValidationError> validationErrors =
302254
workflowValidator
303255
.setSource(
304256
"{\n"
@@ -332,16 +284,54 @@ public void testMissingFunctionRefForCallbackState() {
332284
Assertions.assertNotNull(validationErrors);
333285
Assertions.assertEquals(2, validationErrors.size());
334286
Assertions.assertEquals(
335-
validationErrors.stream()
336-
.filter(
337-
v ->
338-
v.getMessage()
339-
.equals(
340-
"CallbackState event ref does not reference a defined workflow event definition")
341-
|| v.getMessage()
342-
.equals(
343-
"CallbackState action function ref does not reference a defined workflow function definition"))
344-
.count(),
345-
2);
287+
"CallbackState event ref does not reference a defined workflow event definition",
288+
validationErrors.get(0).getMessage());
289+
Assertions.assertEquals(
290+
"CallbackState action function ref does not reference a defined workflow function definition",
291+
validationErrors.get(1).getMessage());
292+
}
293+
294+
@Test
295+
void testFunctionCall() {
296+
Workflow workflow =
297+
new Workflow()
298+
.withId("test-workflow")
299+
.withVersion("1.0")
300+
.withStart(new Start().withStateName("start"))
301+
.withFunctions(
302+
new Functions(
303+
Arrays.asList(new FunctionDefinition("expression").withType(Type.EXPRESSION))))
304+
.withStates(
305+
Arrays.asList(
306+
new OperationState()
307+
.withName("start")
308+
.withType(OPERATION)
309+
.withActions(
310+
Arrays.asList(
311+
new Action().withFunctionRef(new FunctionRef("expression"))))
312+
.withEnd(new End())));
313+
Assertions.assertTrue(new WorkflowValidatorImpl().setWorkflow(workflow).validate().isEmpty());
314+
}
315+
316+
@Test
317+
void testEventCall() {
318+
Workflow workflow =
319+
new Workflow()
320+
.withId("test-workflow")
321+
.withVersion("1.0")
322+
.withStart(new Start().withStateName("start"))
323+
.withEvents(new Events(Arrays.asList(new EventDefinition().withName("event"))))
324+
.withRetries(new Retries(Arrays.asList(new RetryDefinition("start", "PT1S"))))
325+
.withStates(
326+
Arrays.asList(
327+
new OperationState()
328+
.withName("start")
329+
.withType(OPERATION)
330+
.withActions(
331+
Arrays.asList(
332+
new Action()
333+
.withEventRef(new EventRef().withTriggerEventRef("event"))))
334+
.withEnd(new End())));
335+
Assertions.assertTrue(new WorkflowValidatorImpl().setWorkflow(workflow).validate().isEmpty());
346336
}
347337
}

0 commit comments

Comments
 (0)