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.when;
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;
19 public class NoDuplicatesValidatorTest {
21 class AnnotationWrapper {
23 @NoDuplicates(message = "test message")
24 public Collection<Parameter> collection;
27 private NoDuplicatesValidator noDuplicatesValidator;
30 private ConstraintValidatorContext context;
32 private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
34 private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext
35 nodeBuilderCustomizableContext;
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);
46 public void shouldFailIfCollectionHaveMoreThen1ParameterEntityWithSameName() {
47 Collection<Parameter> inputs = Arrays.asList(createParameter("name1"), createParameter("name1"));
49 assertFalse(noDuplicatesValidator.isValid(inputs, context));
53 public void shouldPassIfCollectionDontHaveMoreThen1ParameterEntityWithSameName() {
54 Collection<Parameter> inputs = Arrays.asList(createParameter("name2"), createParameter("name1"));
56 assertTrue(noDuplicatesValidator.isValid(inputs, context));
60 public void shouldPassIfCollectionContainsOnlyOneObject() {
61 Collection<Parameter> inputs = Collections.singletonList(createParameter("name2"));
63 assertTrue(noDuplicatesValidator.isValid(inputs, context));
67 public void shouldPassIfCollectionIsNull() {
68 assertTrue(noDuplicatesValidator.isValid(null, context));
72 public void shouldPassIfCollectionIsEmpty() {
73 assertTrue(noDuplicatesValidator.isValid(new ArrayList<>(), context));
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);
83 private Parameter createParameter(String name) {
84 Parameter parameter = new Parameter();
85 parameter.setName(name);