bfc7dc369ce4c957ee2038e091e2ffb765a586b0
[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.mock;
7 import static org.mockito.Mockito.when;
8
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.Collection;
12 import java.util.List;
13 import javax.validation.ConstraintValidatorContext;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.Mock;
17 import org.mockito.MockitoAnnotations;
18 import org.onap.sdc.workflow.persistence.types.ParameterEntity;
19
20 public class NoDuplicatesValidatorTest {
21
22     class AnnotationWrapper {
23
24         @NoDuplicates(message = "test message")
25         public Collection<ParameterEntity> collection;
26     }
27
28     private NoDuplicatesValidator noDuplicatesValidator;
29
30     @Mock
31     private ConstraintValidatorContext context;
32     @Mock
33     private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
34     @Mock
35     private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext 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<ParameterEntity> inputs =
48                 Arrays.asList(createParameterEntity("name1"), createParameterEntity("name1"));
49
50         assertFalse(noDuplicatesValidator.isValid(inputs, context));
51     }
52
53     @Test
54     public void shouldPassIfCollectionDontHaveMoreThen1ParameterEntityWithSameName() {
55         Collection<ParameterEntity> inputs =
56                 Arrays.asList(createParameterEntity("name2"), createParameterEntity("name1"));
57
58         assertTrue(noDuplicatesValidator.isValid(inputs, context));
59     }
60
61     @Test
62     public void shouldPassIfCollectionContainsOnlyOneObject() {
63         Collection<ParameterEntity> inputs =
64                 Arrays.asList(createParameterEntity("name2"));
65
66         assertTrue(noDuplicatesValidator.isValid(inputs, context));
67     }
68
69     @Test
70     public void shouldPassIfCollectionIsNull() {
71         assertTrue(noDuplicatesValidator.isValid(null, context));
72     }
73
74     @Test
75     public void shouldPassIfCollectionIsEmpty() {
76         assertTrue(noDuplicatesValidator.isValid(new ArrayList<>(), context));
77     }
78
79     private NoDuplicatesValidator initializeValidator(Class<?> classWithAnnotation) throws NoSuchFieldException {
80         NoDuplicates constraint = classWithAnnotation.getField("collection").getAnnotation(NoDuplicates.class);
81         NoDuplicatesValidator validator = new NoDuplicatesValidator();
82         validator.initialize(constraint);
83         return validator;
84     }
85
86     private ParameterEntity createParameterEntity(String name) {
87         ParameterEntity parameterEntity = new ParameterEntity();
88         parameterEntity.setName(name);
89         return parameterEntity;
90     }
91 }