2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.sdc.workflow.api.validation;
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;
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;
34 @RunWith(SpringJUnit4ClassRunner.class)
35 public class ActivitySpecParameterNameValidatorTest {
37 class AnnotationWrapper {
39 @ValidName(message = "test message")
40 public ActivitySpecParameter parameter;
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";
47 private ConstraintValidatorContext context;
49 private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
51 private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext nodeBuilderCustomizableContext;
53 private ActivitySpecParameterNameValidator validator;
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);
65 public void shouldPassIfNoSpaces() {
66 validator.setValidationRegex("^\\S*$");
67 assertTrue(validator.isValid(createParameter("validName"), context));
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);
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);
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);
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);
108 public void shouldPassIfMatchRegex() {
109 validator.setValidationRegex("^[a-zA-Z0-9-]*$");
110 assertTrue(validator.isValid(createParameter("validName"), context));
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);
121 private ActivitySpecParameter createParameter(String name) {
122 ActivitySpecParameter parameter = new ActivitySpecParameter();
123 parameter.setName(name);
124 parameter.setValue("value");
125 parameter.setType("type");