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.mock;
7 import static org.mockito.Mockito.when;
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;
20 public class NoDuplicatesValidatorTest {
22 class AnnotationWrapper {
24 @NoDuplicates(message = "test message")
25 public Collection<ParameterEntity> collection;
28 private NoDuplicatesValidator noDuplicatesValidator;
31 private ConstraintValidatorContext context;
33 private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder;
35 private ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderCustomizableContext 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<ParameterEntity> inputs =
48 Arrays.asList(createParameterEntity("name1"), createParameterEntity("name1"));
50 assertFalse(noDuplicatesValidator.isValid(inputs, context));
54 public void shouldPassIfCollectionDontHaveMoreThen1ParameterEntityWithSameName() {
55 Collection<ParameterEntity> inputs =
56 Arrays.asList(createParameterEntity("name2"), createParameterEntity("name1"));
58 assertTrue(noDuplicatesValidator.isValid(inputs, context));
62 public void shouldPassIfCollectionContainsOnlyOneObject() {
63 Collection<ParameterEntity> inputs =
64 Arrays.asList(createParameterEntity("name2"));
66 assertTrue(noDuplicatesValidator.isValid(inputs, context));
70 public void shouldPassIfCollectionIsNull() {
71 assertTrue(noDuplicatesValidator.isValid(null, context));
75 public void shouldPassIfCollectionIsEmpty() {
76 assertTrue(noDuplicatesValidator.isValid(new ArrayList<>(), context));
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);
86 private ParameterEntity createParameterEntity(String name) {
87 ParameterEntity parameterEntity = new ParameterEntity();
88 parameterEntity.setName(name);
89 return parameterEntity;