1 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.validation
;
3 import static org
.junit
.Assert
.assertEquals
;
4 import static org
.junit
.Assert
.assertNotNull
;
5 import static org
.junit
.Assert
.assertNull
;
7 import java
.io
.FileNotFoundException
;
8 import java
.util
.ArrayList
;
9 import java
.util
.Collections
;
10 import java
.util
.Comparator
;
11 import java
.util
.List
;
13 import java
.util
.UUID
;
15 import javax
.validation
.ConstraintViolation
;
16 import javax
.validation
.Validation
;
17 import javax
.validation
.ValidatorFactory
;
19 import org
.hibernate
.validator
.HibernateValidator
;
20 import org
.hibernate
.validator
.HibernateValidatorConfiguration
;
21 import org
.junit
.Test
;
22 import org
.unitils
.dbunit
.annotation
.DataSet
;
23 import org
.unitils
.dbunit
.annotation
.ExpectedDataSet
;
24 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
26 import eu
.etaxonomy
.cdm
.model
.validation
.CRUDEventType
;
27 import eu
.etaxonomy
.cdm
.model
.validation
.EntityConstraintViolation
;
28 import eu
.etaxonomy
.cdm
.model
.validation
.EntityValidation
;
29 import eu
.etaxonomy
.cdm
.model
.validation
.Severity
;
30 import eu
.etaxonomy
.cdm
.persistence
.dao
.validation
.IEntityValidationDao
;
31 import eu
.etaxonomy
.cdm
.persistence
.validation
.Company
;
32 import eu
.etaxonomy
.cdm
.persistence
.validation
.Employee
;
33 import eu
.etaxonomy
.cdm
.test
.integration
.CdmTransactionalIntegrationTest
;
34 import eu
.etaxonomy
.cdm
.validation
.Level2
;
37 public class EntityValidationDaoHibernateImplTest
extends CdmTransactionalIntegrationTest
{
39 private static final String MEDIA
= "eu.etaxonomy.cdm.model.media.Media";
40 private static final String SYNONYM
= "eu.etaxonomy.cdm.model.taxon.Synonym";
41 private static final String GATHERING_EVENT
= "eu.etaxonomy.cdm.model.occurrence.GatheringEvent";
44 private IEntityValidationDao dao
;
48 assertNotNull("Expecting an instance of IEntityValidationDao", dao
);
52 public void testSaveValidationResult() {
54 HibernateValidatorConfiguration config
= Validation
.byProvider(HibernateValidator
.class).configure();
55 ValidatorFactory factory
= config
.buildValidatorFactory();
57 // This is the bean that is going to be tested
58 Employee emp
= new Employee();
60 UUID uuid
= emp
.getUuid();
61 // ERROR 1 (should be JOHN)
62 emp
.setGivenName("john");
63 // This is an error (should be SMITH), but it is a Level-3
64 // validation error, so the error should be ignored
65 emp
.setFamilyName("smith");
67 // This is an @Valid bean on the Employee class, so Level-2
68 // validation errors on the Company object should also be
70 Company comp
= new Company();
71 // ERROR 2 (should be GOOGLE)
72 comp
.setName("Google");
75 Set
<ConstraintViolation
<Employee
>> errors
= factory
.getValidator().validate(emp
, Level2
.class);
76 dao
.saveEntityValidation(emp
, errors
, CRUDEventType
.NONE
, null);
78 EntityValidation result
= dao
.getEntityValidation(Employee
.class.getName(), 1);
79 assertNotNull(result
);
80 assertEquals("Unexpected UUID", result
.getValidatedEntityUuid(), uuid
);
81 assertEquals("Unexpected number of constraint violations", 2, result
.getEntityConstraintViolations().size());
82 Set
<EntityConstraintViolation
> violations
= result
.getEntityConstraintViolations();
83 List
<EntityConstraintViolation
> list
= new ArrayList
<EntityConstraintViolation
>(violations
);
84 Collections
.sort(list
, new Comparator
<EntityConstraintViolation
>() {
86 public int compare(EntityConstraintViolation o1
, EntityConstraintViolation o2
) {
87 return o1
.getPropertyPath().toString().compareTo(o2
.getPropertyPath().toString());
90 assertEquals("Unexpected propertypath", list
.get(0).getPropertyPath().toString(), "company.name");
91 assertEquals("Unexpected propertypath", list
.get(1).getPropertyPath().toString(), "givenName");
96 public void testDeleteValidationResult() {
97 dao
.deleteEntityValidation(SYNONYM
, 200);
99 commitAndStartNewTransaction(null);
101 List
<EntityValidation
> results
= dao
.getEntityValidations(SYNONYM
);
102 assertEquals("Unexpected number of validation results", 0, results
.size());
106 public void testGetEntityValidation() {
107 EntityValidation result
;
109 result
= dao
.getEntityValidation(MEDIA
, 100);
110 assertNotNull(result
);
111 assertEquals("Unexpected entity id", 1, result
.getId());
112 assertEquals("Unexpected number of constraint violations", 1, result
.getEntityConstraintViolations().size());
114 result
= dao
.getEntityValidation(SYNONYM
, 200);
115 assertNotNull(result
);
116 assertEquals("Unexpected entity id", 2, result
.getId());
117 assertEquals("Unexpected number of constraint violations", 2, result
.getEntityConstraintViolations().size());
119 result
= dao
.getEntityValidation(GATHERING_EVENT
, 300);
120 assertNotNull(result
);
121 assertEquals("Unexpected entity id", 3, result
.getId());
122 assertEquals("Unexpected number of constraint violations", 3, result
.getEntityConstraintViolations().size());
124 result
= dao
.getEntityValidation(GATHERING_EVENT
, 301);
125 assertNotNull(result
);
126 assertEquals("Unexpected entity id", 4, result
.getId());
127 assertEquals("Unexpected number of constraint violations", 1, result
.getEntityConstraintViolations().size());
129 // Test we get a null back
130 result
= dao
.getEntityValidation("Foo Bar", 100);
135 public void testGetEntityValidations() {
136 List
<EntityValidation
> results
= dao
.getEntityValidations();
137 assertNotNull(results
);
138 assertEquals("Unexpected number of entity validations", 4, results
.size());
140 for(EntityValidation ev
: results
) {
141 errors
+= ev
.getEntityConstraintViolations().size();
143 assertEquals("Unexpected number of errors", 7, errors
);
147 public void testGetEntityValidations_String() {
148 List
<EntityValidation
> results
;
150 results
= dao
.getEntityValidations(MEDIA
);
151 assertEquals("Unexpected number of validation results", 1, results
.size());
152 assertEquals("Unexpected number of error", 1, results
.get(0).getEntityConstraintViolations().size());
154 results
= dao
.getEntityValidations(SYNONYM
);
155 assertEquals("Unexpected number of validation results", 1, results
.size());
156 assertEquals("Unexpected number of error", 2, results
.get(0).getEntityConstraintViolations().size());
158 results
= dao
.getEntityValidations(GATHERING_EVENT
);
159 assertEquals("Unexpected number of validation results", 2, results
.size());
160 assertEquals("Unexpected number of error", 3, results
.get(0).getEntityConstraintViolations().size());
161 assertEquals("Unexpected number of error", 1, results
.get(1).getEntityConstraintViolations().size());
163 results
= dao
.getEntityValidations("foo.bar");
164 assertEquals("Unexpected number of validation results", 0, results
.size());
168 public void testGetEntitiesViolatingConstraint_String() {
169 List
<EntityValidation
> results
;
171 results
= dao
.getEntitiesViolatingConstraint("com.example.NameValidator");
172 assertEquals("Unexpected number of validation results", 1, results
.size());
174 results
= dao
.getEntitiesViolatingConstraint("com.example.DistanceToGroundValidator");
175 assertEquals("Unexpected number of validation results", 1, results
.size());
177 results
= dao
.getEntitiesViolatingConstraint("com.example.CountryValidator");
178 assertEquals("Unexpected number of validation results", 2, results
.size());
180 results
= dao
.getEntitiesViolatingConstraint("foo.bar");
181 assertEquals("Unexpected number of validation results", 0, results
.size());
185 public void testGetEntityValidations_String_Severity() {
186 List
<EntityValidation
> results
;
188 results
= dao
.getEntityValidations(MEDIA
, Severity
.NOTICE
);
189 assertEquals("Unexpected number of validation results", 0, results
.size());
190 results
= dao
.getEntityValidations(MEDIA
, Severity
.WARNING
);
191 assertEquals("Unexpected number of validation results", 0, results
.size());
192 results
= dao
.getEntityValidations(MEDIA
, Severity
.ERROR
);
193 assertEquals("Unexpected number of validation results", 1, results
.size());
194 assertEquals("Unexpected number of validation results", 1, results
.iterator().next()
195 .getEntityConstraintViolations().size());
196 assertEquals("Unexpected severity", Severity
.ERROR
, results
.iterator().next().getEntityConstraintViolations()
197 .iterator().next().getSeverity());
199 results
= dao
.getEntityValidations(SYNONYM
, Severity
.NOTICE
);
200 assertEquals("Unexpected number of validation results", 0, results
.size());
201 results
= dao
.getEntityValidations(SYNONYM
, Severity
.WARNING
);
202 assertEquals("Unexpected number of validation results", 1, results
.size());
203 results
= dao
.getEntityValidations(SYNONYM
, Severity
.ERROR
);
204 assertEquals("Unexpected number of validation results", 1, results
.size());
206 results
= dao
.getEntityValidations(GATHERING_EVENT
, Severity
.NOTICE
);
207 assertEquals("Unexpected number of validation results", 1, results
.size());
208 results
= dao
.getEntityValidations(GATHERING_EVENT
, Severity
.WARNING
);
209 assertEquals("Unexpected number of validation results", 1, results
.size());
210 results
= dao
.getEntityValidations(GATHERING_EVENT
, Severity
.ERROR
);
211 assertEquals("Unexpected number of validation results", 2, results
.size());
213 results
= dao
.getEntityValidations("foo.bar", Severity
.ERROR
);
214 assertEquals("Unexpected number of validation results", 0, results
.size());
218 public void testGetEntityValidations_Severity() {
219 List
<EntityValidation
> results
;
220 results
= dao
.getEntityValidations(Severity
.NOTICE
);
221 assertEquals("Unexpected number of validation results", 1, results
.size());
222 results
= dao
.getEntityValidations(Severity
.WARNING
);
223 assertEquals("Unexpected number of validation results", 2, results
.size());
224 results
= dao
.getEntityValidations(Severity
.ERROR
);
225 assertEquals("Unexpected number of validation results", 4, results
.size());
229 public void createTestDataSet() throws FileNotFoundException
{
230 // TODO Auto-generated method stub