Project

General

Profile

Download (2.84 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2015 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.validation;
11

    
12
import java.util.Set;
13

    
14
import javax.validation.ConstraintViolation;
15
import javax.validation.Validation;
16
import javax.validation.Validator;
17
import javax.validation.ValidatorFactory;
18

    
19
import org.junit.Assert;
20

    
21
/**
22
 * Class providing some base functionality for validator testing
23
 * @author a.mueller
24
 * @date 18.02.2015
25
 *
26
 */
27
public abstract class ValidationTestBase {
28

    
29
    protected Validator validator;
30

    
31
    {
32
        ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
33
        validator = validatorFactory.getValidator();
34
    }
35

    
36

    
37
    protected void validateHasConstraint(Object cdmBase, Class validatorClass, Class group) {
38
        Set<ConstraintViolation<Object>> constraintViolations  = validator.validate(cdmBase, group);
39
        assertHasConstraintOnValidator(constraintViolations, validatorClass);
40
    }
41

    
42
    protected void validateHasNoConstraint(Object cdmBase, Class validatorClass, Class group) {
43
        Set<ConstraintViolation<Object>> constraintViolations  = validator.validate(cdmBase, group);
44
        assertNoConstraintOnValidator(constraintViolations, validatorClass);
45
    }
46

    
47
    protected void assertNoConstraintOnValidator(Set<ConstraintViolation<Object>> constraintViolations, Class validatorClass) {
48
        assertHasConstraintOnValidator(constraintViolations, validatorClass, false);
49
    }
50

    
51
    protected void assertHasConstraintOnValidator(Set<ConstraintViolation<Object>> constraintViolations, Class validatorClass) {
52
        assertHasConstraintOnValidator(constraintViolations, validatorClass, true);
53
    }
54

    
55
    /**
56
     * @param constraintViolations
57
     * @return
58
     */
59
    private void assertHasConstraintOnValidator(Set<ConstraintViolation<Object>> constraintViolations, Class validatorClass, boolean requiresViolation) {
60
        boolean hasViolation = false;
61
        for (ConstraintViolation<?> violation : constraintViolations){
62
            Class<?> validatedValidatorClass = violation.getConstraintDescriptor().getConstraintValidatorClasses().iterator().next();
63
            if (validatedValidatorClass.equals(validatorClass)){
64
                hasViolation = true;
65
            }
66
        }
67
        if (! hasViolation  && requiresViolation){
68
            Assert.fail("constraint violations are missing an validator class " + validatorClass.getSimpleName());
69
        }else if (hasViolation  && ! requiresViolation){
70
            Assert.fail("constraint violations should not exist for validator class " + validatorClass.getSimpleName());
71
        }
72
        return;
73
    }
74
}
(10-10/10)