2d7d6d2860b16f69dce6cc0e8b9dd358cbc6b716
[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.when;
7
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.Collection;
11 import java.util.Collections;
12 import javax.validation.ConstraintValidatorContext;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.mockito.Mock;
16 import org.mockito.MockitoAnnotations;
17 import org.onap.sdc.workflow.api.types.Parameter;
18
19 public class NoDuplicatesValidatorTest {
20
21     class AnnotationWrapper {
22
23         @NoDuplicates(message = "test message")
24         public Collection<Parameter> collection;
25     }
26
27     private NoDuplicatesValidator noDuplicatesValidator;
28
29     @Mock
30     private ConstraintValidatorContext context;
31     @Mock
32     private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
33     @Mock
34     private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext
35             nodeBuilderCustomizableContext;
36
37     @Before
38     public void init() throws NoSuchFieldException {
39         MockitoAnnotations.initMocks(this);
40         when(context.buildConstraintViolationWithTemplate(anyString())).thenReturn(constraintViolationBuilder);
41         when(constraintViolationBuilder.addPropertyNode(anyString())).thenReturn(nodeBuilderCustomizableContext);
42         noDuplicatesValidator = initializeValidator(AnnotationWrapper.class);
43     }
44
45     @Test
46     public void shouldFailIfCollectionHaveMoreThen1ParameterEntityWithSameName() {
47         Collection<Parameter> inputs = Arrays.asList(createParameter("name1"), createParameter("name1"));
48
49         assertFalse(noDuplicatesValidator.isValid(inputs, context));
50     }
51
52     @Test
53     public void shouldPassIfCollectionDontHaveMoreThen1ParameterEntityWithSameName() {
54         Collection<Parameter> inputs = Arrays.asList(createParameter("name2"), createParameter("name1"));
55
56         assertTrue(noDuplicatesValidator.isValid(inputs, context));
57     }
58
59     @Test
60     public void shouldPassIfCollectionContainsOnlyOneObject() {
61         Collection<Parameter> inputs = Collections.singletonList(createParameter("name2"));
62
63         assertTrue(noDuplicatesValidator.isValid(inputs, context));
64     }
65
66     @Test
67     public void shouldPassIfCollectionIsNull() {
68         assertTrue(noDuplicatesValidator.isValid(null, context));
69     }
70
71     @Test
72     public void shouldPassIfCollectionIsEmpty() {
73         assertTrue(noDuplicatesValidator.isValid(new ArrayList<>(), context));
74     }
75
76     private NoDuplicatesValidator initializeValidator(Class<?> classWithAnnotation) throws NoSuchFieldException {
77         NoDuplicates constraint = classWithAnnotation.getField("collection").getAnnotation(NoDuplicates.class);
78         NoDuplicatesValidator validator = new NoDuplicatesValidator();
79         validator.initialize(constraint);
80         return validator;
81     }
82
83     private Parameter createParameter(String name) {
84         Parameter parameter = new Parameter();
85         parameter.setName(name);
86         return parameter;
87     }
88 }