+package eu.etaxonomy.cdm.persistence.dao.hibernate.validation;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+\r
+import java.io.FileNotFoundException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.List;\r
+import java.util.Set;\r
+import java.util.UUID;\r
+\r
+import javax.validation.ConstraintViolation;\r
+import javax.validation.Validation;\r
+import javax.validation.ValidatorFactory;\r
+\r
+import org.hibernate.validator.HibernateValidator;\r
+import org.hibernate.validator.HibernateValidatorConfiguration;\r
+import org.junit.Ignore;\r
+import org.junit.Test;\r
+import org.unitils.dbunit.annotation.DataSet;\r
+import org.unitils.dbunit.annotation.ExpectedDataSet;\r
+import org.unitils.spring.annotation.SpringBeanByType;\r
+\r
+import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;\r
+import eu.etaxonomy.cdm.model.validation.EntityValidationResult;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationResultDao;\r
+import eu.etaxonomy.cdm.persistence.validation.Company;\r
+import eu.etaxonomy.cdm.persistence.validation.Employee;\r
+import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.validation.Level2;\r
+import eu.etaxonomy.cdm.model.validation.Severity;\r
+\r
+@DataSet\r
+public class EntityValidationResultDaoHibernateImplTest extends CdmTransactionalIntegrationTest {\r
+\r
+ private static final String MEDIA = "eu.etaxonomy.cdm.model.media.Media";\r
+ private static final String SYNONYM_RELATIONSHIP = "eu.etaxonomy.cdm.model.taxon.SynonymRelationship";\r
+ private static final String GATHERING_EVENT = "eu.etaxonomy.cdm.model.occurrence.GatheringEvent";\r
+\r
+ @SpringBeanByType\r
+ private IEntityValidationResultDao dao;\r
+\r
+\r
+ @Test\r
+ public void init(){\r
+ assertNotNull("Expecting an instance of IEntityValidationResultDao", dao);\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testSaveValidationResult(){\r
+\r
+ HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure();\r
+ ValidatorFactory factory = config.buildValidatorFactory();\r
+\r
+ // This is the bean that is going to be tested\r
+ Employee emp = new Employee();\r
+ emp.setId(1);\r
+ UUID uuid = emp.getUuid();\r
+ // ERROR 1 (should be JOHN)\r
+ emp.setFirstName("john");\r
+ // This is an error (should be SMITH), but it is a Level-3\r
+ // validation error, so the error should be ignored\r
+ emp.setLastName("smith");\r
+\r
+ // This is an @Valid bean on the Employee class, so Level-2\r
+ // validation errors on the Company object should also be\r
+ // listed.\r
+ Company comp = new Company();\r
+ // ERROR 2 (should be GOOGLE)\r
+ comp.setName("Google");\r
+ emp.setCompany(comp);\r
+\r
+ Set<ConstraintViolation<Employee>> errors = factory.getValidator().validate(emp, Level2.class);\r
+ dao.saveValidationResult(errors, emp, CRUDEventType.NONE);\r
+\r
+ EntityValidationResult result = dao.getValidationResult(Employee.class.getName(), 1);\r
+ assertNotNull(result);\r
+ assertEquals("Unexpected UUID", result.getValidatedEntityUuid(), uuid);\r
+ assertEquals("Unexpected number of constraint violations", 2, result.getEntityConstraintViolations().size());\r
+ Set<EntityConstraintViolation> violations = result.getEntityConstraintViolations();\r
+ List<EntityConstraintViolation> list = new ArrayList<EntityConstraintViolation>(violations);\r
+ Collections.sort(list, new Comparator<EntityConstraintViolation>() {\r
+ @Override\r
+ public int compare(EntityConstraintViolation o1, EntityConstraintViolation o2)\r
+ {\r
+ return o1.getPropertyPath().toString().compareTo(o2.getPropertyPath().toString());\r
+ }\r
+ });\r
+ assertEquals("Unexpected propertypath", list.get(0).getPropertyPath().toString(), "company.name");\r
+ assertEquals("Unexpected propertypath", list.get(1).getPropertyPath().toString(), "firstName");\r
+ }\r
+\r
+\r
+ @Test\r
+ @ExpectedDataSet\r
+ @Ignore //FIXME unignore entity validation result dao delete test\r
+ public void testDeleteValidationResult(){\r
+ dao.deleteValidationResult(SYNONYM_RELATIONSHIP, 2);\r
+ \r
+ commitAndStartNewTransaction(null);\r
+ \r
+ List<EntityValidationResult> results = dao.getEntityValidationResults(SYNONYM_RELATIONSHIP);\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testGetEntityValidationResult(){\r
+ EntityValidationResult result;\r
+\r
+ result = dao.getValidationResult(MEDIA, 100);\r
+ assertNotNull(result);\r
+ assertEquals("Unexpected entity id", 1, result.getId());\r
+ assertEquals("Unexpected number of constraint violations", 1, result.getEntityConstraintViolations().size());\r
+\r
+ result = dao.getValidationResult(SYNONYM_RELATIONSHIP, 200);\r
+ assertNotNull(result);\r
+ assertEquals("Unexpected entity id", 2, result.getId());\r
+ assertEquals("Unexpected number of constraint violations", 2, result.getEntityConstraintViolations().size());\r
+\r
+ result = dao.getValidationResult(GATHERING_EVENT, 300);\r
+ assertNotNull(result);\r
+ assertEquals("Unexpected entity id", 3, result.getId());\r
+ assertEquals("Unexpected number of constraint violations", 3, result.getEntityConstraintViolations().size());\r
+\r
+ result = dao.getValidationResult(GATHERING_EVENT, 301);\r
+ assertNotNull(result);\r
+ assertEquals("Unexpected entity id", 4, result.getId());\r
+ assertEquals("Unexpected number of constraint violations", 1, result.getEntityConstraintViolations().size());\r
+\r
+ // Test we get a null back\r
+ result = dao.getValidationResult("Foo Bar", 100);\r
+ assertNull(result);\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testGetEntityValidationResults_String(){\r
+ List<EntityValidationResult> results;\r
+\r
+ results = dao.getEntityValidationResults(MEDIA);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+\r
+ results = dao.getEntityValidationResults(SYNONYM_RELATIONSHIP);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+\r
+ results = dao.getEntityValidationResults(GATHERING_EVENT);\r
+ assertEquals("Unexpected number of validation results", 2, results.size());\r
+\r
+ results = dao.getEntityValidationResults("foo.bar");\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testGetEntitiesViolatingConstraint_String(){\r
+ List<EntityValidationResult> results;\r
+\r
+ results = dao.getEntitiesViolatingConstraint("com.example.NameValidator");\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+\r
+ results = dao.getEntitiesViolatingConstraint("com.example.DistanceToGroundValidator");\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+\r
+ results = dao.getEntitiesViolatingConstraint("com.example.CountryValidator");\r
+ assertEquals("Unexpected number of validation results", 2, results.size());\r
+\r
+ results = dao.getEntitiesViolatingConstraint("foo.bar");\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testGetEntityValidationResults_String_Severity(){\r
+ List<EntityValidationResult> results;\r
+\r
+ results = dao.getValidationResults(MEDIA, Severity.NOTICE);\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ results = dao.getValidationResults(MEDIA, Severity.WARNING);\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ results = dao.getValidationResults(MEDIA, Severity.ERROR);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+ assertEquals("Unexpected number of validation results", 1, results.iterator().next().getEntityConstraintViolations().size());\r
+ assertEquals("Unexpected severity", Severity.ERROR, results.iterator().next().getEntityConstraintViolations().iterator().next().getSeverity());\r
+\r
+ results = dao.getValidationResults(SYNONYM_RELATIONSHIP, Severity.NOTICE);\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ results = dao.getValidationResults(SYNONYM_RELATIONSHIP, Severity.WARNING);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+ results = dao.getValidationResults(SYNONYM_RELATIONSHIP, Severity.ERROR);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+\r
+ results = dao.getValidationResults(GATHERING_EVENT, Severity.NOTICE);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+ results = dao.getValidationResults(GATHERING_EVENT, Severity.WARNING);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+ results = dao.getValidationResults(GATHERING_EVENT, Severity.ERROR);\r
+ assertEquals("Unexpected number of validation results", 2, results.size());\r
+\r
+ results = dao.getValidationResults("foo.bar", Severity.ERROR);\r
+ assertEquals("Unexpected number of validation results", 0, results.size());\r
+ }\r
+\r
+\r
+ @Test\r
+ public void testGetEntityValidationResults_Severity(){\r
+ List<EntityValidationResult> results;\r
+ results = dao.getValidationResults(Severity.NOTICE);\r
+ assertEquals("Unexpected number of validation results", 1, results.size());\r
+ results = dao.getValidationResults(Severity.WARNING);\r
+ assertEquals("Unexpected number of validation results", 2, results.size());\r
+ results = dao.getValidationResults(Severity.ERROR);\r
+ assertEquals("Unexpected number of validation results", 4, results.size());\r
+ }\r
+\r
+\r
+ @Override\r
+ public void createTestDataSet() throws FileNotFoundException {\r
+ // TODO Auto-generated method stub\r
+ }\r
+\r
+}\r