a62b6ac5f12d41c681159d344e49c69d1493bfb6
[sdc/sdc-workflow-designer.git] /
1 package org.onap.sdc.workflow.api.validation;
2
3 import static org.junit.Assert.assertFalse;
4 import static org.junit.Assert.assertTrue;
5 import static org.mockito.ArgumentMatchers.anyString;
6 import static org.mockito.Mockito.verify;
7 import static org.mockito.Mockito.when;
8
9 import javax.validation.ConstraintValidatorContext;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 import org.mockito.Mock;
14 import org.mockito.MockitoAnnotations;
15 import org.onap.sdc.workflow.persistence.types.ActivitySpecParameter;
16 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
17
18 @RunWith(SpringJUnit4ClassRunner.class)
19 public class ActivitySpecParameterNameValidatorTest {
20
21     class AnnotationWrapper {
22
23         @ValidName(message = "test message")
24         public ActivitySpecParameter parameter;
25     }
26
27     private String noSpacesMessage = "Input and output names must not contain any spaces";
28     private String matchPatternMessage = "Input and output names must match the validation pattern";
29
30     @Mock
31     private ConstraintValidatorContext context;
32     @Mock
33     private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
34     @Mock
35     private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext nodeBuilderCustomizableContext;
36
37     private ActivitySpecParameterNameValidator validator;
38
39
40     @Before
41     public void setup() throws NoSuchFieldException {
42         MockitoAnnotations.initMocks(this);
43         when(context.buildConstraintViolationWithTemplate(anyString())).thenReturn(constraintViolationBuilder);
44         when(constraintViolationBuilder.addPropertyNode(anyString())).thenReturn(nodeBuilderCustomizableContext);
45         validator = initializeValidator(ActivitySpecParameterNameValidatorTest.AnnotationWrapper.class);
46     }
47
48     @Test
49     public void shouldPassIfNoSpaces() {
50         validator.setValidationRegex("^\\S*$");
51         assertTrue(validator.isValid(createParameter("validName"), context));
52     }
53
54     @Test
55     public void shouldFailIfNameHasSpaces() {
56         validator.setValidationRegex("^\\S*$");
57         validator.setValidationMessage(noSpacesMessage);
58         assertFalse(validator.isValid(createParameter("not a valid name"), context));
59         verify(context).disableDefaultConstraintViolation();
60         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
61     }
62
63
64     @Test
65     public void shouldFailIfNameHasSpacesInStart() {
66         validator.setValidationRegex("^\\S*$");
67         validator.setValidationMessage(noSpacesMessage);
68         assertFalse(validator.isValid(createParameter("  name"), context));
69         verify(context).disableDefaultConstraintViolation();
70         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
71     }
72
73     @Test
74     public void shouldFailIfNameHasSpacesInEnd() {
75         validator.setValidationRegex("^\\S*$");
76         validator.setValidationMessage(noSpacesMessage);
77         assertFalse(validator.isValid(createParameter("name    "), context));
78         verify(context).disableDefaultConstraintViolation();
79         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
80     }
81
82     @Test
83     public void shouldFailIfDoesNotMatchRegex() {
84         validator.setValidationRegex("^[a-zA-Z0-9-]*$");
85         validator.setValidationMessage(matchPatternMessage);
86         assertFalse(validator.isValid(createParameter("NotValid$$##"), context));
87         verify(context).disableDefaultConstraintViolation();
88         verify(context).buildConstraintViolationWithTemplate(matchPatternMessage);
89     }
90
91     @Test
92     public void shouldPassIfMatchRegex() {
93         validator.setValidationRegex("^[a-zA-Z0-9-]*$");
94         assertTrue(validator.isValid(createParameter("validName"), context));
95     }
96
97     private ActivitySpecParameterNameValidator initializeValidator(Class<?> classWithAnnotation)
98             throws NoSuchFieldException {
99         ValidName constraint = classWithAnnotation.getField("parameter").getAnnotation(ValidName.class);
100         ActivitySpecParameterNameValidator validator = new ActivitySpecParameterNameValidator();
101         validator.initialize(constraint);
102         return validator;
103     }
104
105     private ActivitySpecParameter createParameter(String name) {
106         ActivitySpecParameter parameter = new ActivitySpecParameter();
107         parameter.setName(name);
108         parameter.setValue("value");
109         parameter.setType("type");
110         return parameter;
111     }
112 }