package de.randi2.testUtility.utility;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import de.randi2.model.AbstractDomainObject;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/META-INF/spring-test.xml"})
public abstract class AbstractDomainDatabaseTest<TC extends AbstractDomainObject> {
@Autowired protected TestStringUtil stringUtil;
@Autowired protected DomainObjectFactory factory;
@Autowired protected ApplicationContext context;
@Autowired protected InitializeDatabaseUtil databaseUtil;
protected EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
protected Class<TC> testClass;
protected AbstractDomainDatabaseTest(Class<TC> _testClass) {
this.testClass = _testClass;
}
@Before
public void setUp(){
try {
databaseUtil.setUpDatabaseEmpty();
} catch (Exception e1) {
fail(e1.getMessage());
}
}
protected void assertValid(TC validDO) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<TC>> invalids = validator.validate(validDO);
StringBuilder message = new StringBuilder();
for(ConstraintViolation<TC> v : invalids){
message.append(v.getPropertyPath()).append(" : ").append(v.getMessage()).append("\n");
}
assertTrue(message.toString(), invalids.size()==0);
}
protected void assertInvalid(TC invalidDO, String[] messages) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<TC>> invalids = validator.validate(invalidDO);
assertTrue(invalids.size()>0);
}
protected void assertInvalid(TC invalidDO){
this.assertInvalid(invalidDO, new String[]{""});
}
}