1 package org.onap.sdc.workflow.api.validation;
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;
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;
18 @RunWith(SpringJUnit4ClassRunner.class)
19 public class ActivitySpecParameterNameValidatorTest {
21 class AnnotationWrapper {
23 @ValidName(message = "test message")
24 public ActivitySpecParameter parameter;
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";
31 private ConstraintValidatorContext context;
33 private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
35 private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext nodeBuilderCustomizableContext;
37 private ActivitySpecParameterNameValidator validator;
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);
49 public void shouldPassIfNoSpaces() {
50 validator.setValidationRegex("^\\S*$");
51 assertTrue(validator.isValid(createParameter("validName"), context));
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);
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);
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);
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);
92 public void shouldPassIfMatchRegex() {
93 validator.setValidationRegex("^[a-zA-Z0-9-]*$");
94 assertTrue(validator.isValid(createParameter("validName"), context));
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);
105 private ActivitySpecParameter createParameter(String name) {
106 ActivitySpecParameter parameter = new ActivitySpecParameter();
107 parameter.setName(name);
108 parameter.setValue("value");
109 parameter.setType("type");