Fix name convention issue
[sdc/sdc-workflow-designer.git] / sdc-workflow-designer-be / src / test / java / org / onap / sdc / workflow / api / validation / ActivitySpecParameterNameValidatorTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.sdc.workflow.api.validation;
18
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 import static org.mockito.ArgumentMatchers.anyString;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
24
25 import javax.validation.ConstraintValidatorContext;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Mock;
30 import org.mockito.MockitoAnnotations;
31 import org.onap.sdc.workflow.persistence.types.ActivitySpecParameter;
32 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
33
34 @RunWith(SpringJUnit4ClassRunner.class)
35 public class ActivitySpecParameterNameValidatorTest {
36
37     class AnnotationWrapper {
38
39         @ValidName(message = "test message")
40         public ActivitySpecParameter parameter;
41     }
42
43     private String noSpacesMessage = "Input and output names must not contain any spaces";
44     private String matchPatternMessage = "Input and output names must match the validation pattern";
45
46     @Mock
47     private ConstraintValidatorContext context;
48     @Mock
49     private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
50     @Mock
51     private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext nodeBuilderCustomizableContext;
52
53     private ActivitySpecParameterNameValidator validator;
54
55
56     @Before
57     public void setup() throws NoSuchFieldException {
58         MockitoAnnotations.initMocks(this);
59         when(context.buildConstraintViolationWithTemplate(anyString())).thenReturn(constraintViolationBuilder);
60         when(constraintViolationBuilder.addPropertyNode(anyString())).thenReturn(nodeBuilderCustomizableContext);
61         validator = initializeValidator(ActivitySpecParameterNameValidatorTest.AnnotationWrapper.class);
62     }
63
64     @Test
65     public void shouldPassIfNoSpaces() {
66         validator.setValidationRegex("^\\S*$");
67         assertTrue(validator.isValid(createParameter("validName"), context));
68     }
69
70     @Test
71     public void shouldFailIfNameHasSpaces() {
72         validator.setValidationRegex("^\\S*$");
73         validator.setValidationMessage(noSpacesMessage);
74         assertFalse(validator.isValid(createParameter("not a valid name"), context));
75         verify(context).disableDefaultConstraintViolation();
76         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
77     }
78
79
80     @Test
81     public void shouldFailIfNameHasSpacesInStart() {
82         validator.setValidationRegex("^\\S*$");
83         validator.setValidationMessage(noSpacesMessage);
84         assertFalse(validator.isValid(createParameter("  name"), context));
85         verify(context).disableDefaultConstraintViolation();
86         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
87     }
88
89     @Test
90     public void shouldFailIfNameHasSpacesInEnd() {
91         validator.setValidationRegex("^\\S*$");
92         validator.setValidationMessage(noSpacesMessage);
93         assertFalse(validator.isValid(createParameter("name    "), context));
94         verify(context).disableDefaultConstraintViolation();
95         verify(context).buildConstraintViolationWithTemplate(noSpacesMessage);
96     }
97
98     @Test
99     public void shouldFailIfDoesNotMatchRegex() {
100         validator.setValidationRegex("^[a-zA-Z0-9-]*$");
101         validator.setValidationMessage(matchPatternMessage);
102         assertFalse(validator.isValid(createParameter("NotValid$$##"), context));
103         verify(context).disableDefaultConstraintViolation();
104         verify(context).buildConstraintViolationWithTemplate(matchPatternMessage);
105     }
106
107     @Test
108     public void shouldPassIfMatchRegex() {
109         validator.setValidationRegex("^[a-zA-Z0-9-]*$");
110         assertTrue(validator.isValid(createParameter("validName"), context));
111     }
112
113     private ActivitySpecParameterNameValidator initializeValidator(Class<?> classWithAnnotation)
114             throws NoSuchFieldException {
115         ValidName constraint = classWithAnnotation.getField("parameter").getAnnotation(ValidName.class);
116         ActivitySpecParameterNameValidator validator = new ActivitySpecParameterNameValidator();
117         validator.initialize(constraint);
118         return validator;
119     }
120
121     private ActivitySpecParameter createParameter(String name) {
122         ActivitySpecParameter parameter = new ActivitySpecParameter();
123         parameter.setName(name);
124         parameter.setValue("value");
125         parameter.setType("type");
126         return parameter;
127     }
128 }