package org.hibernate.envers.test.integration.interfaces.hbm.allAudited;
import org.hibernate.envers.exception.NotAuditedException;
import org.hibernate.envers.test.AbstractEntityTest;
import org.hibernate.envers.test.Priority;
import org.junit.Assert;
import org.junit.Test;
import javax.persistence.EntityManager;
import java.util.Arrays;
/**
* @author Hern�n Chanfreau
* @author Adam Warski (adam at warski dot org)
*/
public abstract class AbstractAllAuditedTest extends AbstractEntityTest {
private long ai_id;
private long nai_id;
@Test
@Priority(10)
public void initData() {
EntityManager em = getEntityManager();
AuditedImplementor ai = new AuditedImplementor();
ai.setData("La data");
ai.setAuditedImplementorData("audited implementor data");
NonAuditedImplementor nai = new NonAuditedImplementor();
nai.setData("info");
nai.setNonAuditedImplementorData("sttring");
// Revision 1
em.getTransaction().begin();
em.persist(ai);
em.persist(nai);
em.getTransaction().commit();
// Revision 2
em.getTransaction().begin();
ai = em.find(AuditedImplementor.class, ai.getId());
nai = em.find(NonAuditedImplementor.class, nai.getId());
ai.setData("La data 2");
ai.setAuditedImplementorData("audited implementor data 2");
nai.setData("info 2");
nai.setNonAuditedImplementorData("sttring 2");
em.getTransaction().commit();
//
ai_id = ai.getId();
nai_id = nai.getId();
}
@Test
public void testRevisions() {
Assert.assertEquals(getAuditReader().getRevisions(AuditedImplementor.class, ai_id), Arrays.asList(1, 2));
}
@Test
public void testRetrieveAudited() {
// levanto las versiones actuales
AuditedImplementor ai = getEntityManager().find(AuditedImplementor.class, ai_id);
assert ai != null;
SimpleInterface si = getEntityManager().find(SimpleInterface.class, ai_id);
assert si != null;
// levanto las de la revisi�n 1, ninguna debe ser null
AuditedImplementor ai_rev1 = getAuditReader().find(AuditedImplementor.class, ai_id, 1);
assert ai_rev1 != null;
SimpleInterface si_rev1 = getAuditReader().find(SimpleInterface.class, ai_id, 1);
assert si_rev1 != null;
AuditedImplementor ai_rev2 = getAuditReader().find(AuditedImplementor.class, ai_id, 2);
assert ai_rev2 != null;
SimpleInterface si_rev2 = getAuditReader().find(SimpleInterface.class, ai_id, 2);
assert si_rev2 != null;
// data de las actuales no debe ser null
Assert.assertEquals(ai.getData(), "La data 2");
Assert.assertEquals(si.getData(), "La data 2");
// la data de las revisiones no debe ser null
Assert.assertEquals(ai_rev1.getData(), "La data");
Assert.assertEquals(si_rev1.getData(), "La data");
Assert.assertEquals(ai_rev2.getData(), "La data 2");
Assert.assertEquals(si_rev2.getData(), "La data 2");
}
@Test
public void testRetrieveNonAudited() {
// levanto las versiones actuales
NonAuditedImplementor nai = getEntityManager().find(NonAuditedImplementor.class, nai_id);
assert nai != null;
SimpleInterface si = getEntityManager().find(SimpleInterface.class, nai_id);
assert si != null;
assert si.getData().equals(nai.getData());
try {
// levanto la revision
getAuditReader().find(NonAuditedImplementor.class, nai_id, 1);
assert false;
} catch (Exception e) {
// no es auditable!!!
assert (e instanceof NotAuditedException);
}
// levanto la revision que no es auditable pero con la interfaz, el resultado debe ser null
SimpleInterface si_rev1 = getAuditReader().find(SimpleInterface.class, nai_id, 1);
assert si_rev1 == null;
}
}