package org.hibernate.envers.test.integration.entityNames.auditedEntity;
import org.hibernate.MappingException;
import org.hibernate.envers.test.AbstractOneSessionTest;
import org.hibernate.envers.test.Priority;
import org.junit.Test;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
/**
* @author Hernán Chanfreau
*
*/
public class ReadEntityWhitEntityNameTest extends AbstractOneSessionTest{
private long id_pers1;
private long id_pers2;
private long id_pers3;
private Person person1_1;
private Person person1_2;
private Person person1_3;
private Person currentPers1;
protected void initMappings() throws MappingException, URISyntaxException {
URL url = Thread.currentThread().getContextClassLoader().getResource("mappings/entityNames/auditedEntity/mappings.hbm.xml");
config.addFile(new File(url.toURI()));
}
@Test
@Priority(10)
public void initData() {
initializeSession();
Person pers1 = new Person("Hernan", 28);
Person pers2 = new Person("Leandro", 29);
Person pers3 = new Person("Barba", 30);
//REV 1
getSession().getTransaction().begin();
getSession().persist("Personaje",pers1);
id_pers1 = pers1.getId();
getSession().getTransaction().commit();
//REV 2
getSession().getTransaction().begin();
pers1 = (Person)getSession().get("Personaje", id_pers1);
pers1.setAge(29);
getSession().persist("Personaje",pers1);
getSession().persist("Personaje",pers2);
id_pers2 = pers2.getId();
getSession().getTransaction().commit();
//REV
getSession().getTransaction().begin();
pers1 = (Person)getSession().get("Personaje", id_pers1);
pers1.setName("Hernan David");
pers2 = (Person)getSession().get("Personaje", id_pers2);
pers2.setAge(30);
getSession().persist("Personaje",pers1);
getSession().persist("Personaje",pers2);
getSession().persist("Personaje",pers3);
id_pers3 = pers3.getId();
getSession().getTransaction().commit();
getSession().getTransaction().begin();
currentPers1 = (Person)getSession().get("Personaje", id_pers1);
getSession().getTransaction().commit();
}
@Test
public void testRetrieveRevisionsWithEntityName() {
List<Number> pers1Revs = getAuditReader().getRevisions(Person.class,"Personaje", id_pers1);
List<Number> pers2Revs = getAuditReader().getRevisions(Person.class,"Personaje", id_pers2);
List<Number> pers3Revs = getAuditReader().getRevisions(Person.class,"Personaje", id_pers3);
assert(pers1Revs.size() == 3);
assert(pers2Revs.size() == 2);
assert(pers3Revs.size() == 1);
}
@Test
public void testRetrieveAuditedEntityWithEntityName() {
person1_1 = getAuditReader().find(Person.class, "Personaje", id_pers1, 1);
person1_2 = getAuditReader().find(Person.class, "Personaje", id_pers1, 2);
person1_3 = getAuditReader().find(Person.class, "Personaje", id_pers1, 3);
assert(person1_1 != null);
assert(person1_2 != null);
assert(person1_3 != null);
}
@Test
public void testObtainEntityNameAuditedEntityWithEntityName() {
String currentPers1EN = getSession().getEntityName(currentPers1);
String person1EN = getAuditReader().getEntityName(person1_1.getId(), 1, person1_1);
assert (currentPers1EN.equals(person1EN));
String person2EN = getAuditReader().getEntityName(person1_2.getId(), 2, person1_2);
assert (currentPers1EN.equals(person2EN));
String person3EN = getAuditReader().getEntityName(person1_3.getId(), 3, person1_3);
assert (currentPers1EN.equals(person3EN));
}
@Test
public void testRetrieveAuditedEntityWithEntityNameWithNewSession() {
// force a new session and AR
forceNewSession();
person1_1 = getAuditReader().find(Person.class, "Personaje", id_pers1, 1);
person1_2 = getAuditReader().find(Person.class, "Personaje", id_pers1, 2);
person1_3 = getAuditReader().find(Person.class, "Personaje", id_pers1, 3);
assert(person1_1 != null);
assert(person1_2 != null);
assert(person1_3 != null);
}
}