/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.envers.test.integration.collection.embeddable;
import java.util.Arrays;
import javax.persistence.EntityManager;
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.Priority;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
import junit.framework.Assert;
/**
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
*/
@TestForIssue(jiraKey = "HHH-6613")
public class BasicEmbeddableCollection extends BaseEnversJPAFunctionalTestCase {
private int id = -1;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {DarkCharacter.class};
}
@Test
@Priority(10)
public void initData() {
EntityManager em = getEntityManager();
// Revision 1 - empty element collection
em.getTransaction().begin();
DarkCharacter darkCharacter = new DarkCharacter( 1, 1 );
em.persist( darkCharacter );
em.getTransaction().commit();
id = darkCharacter.getId();
// Revision 2 - adding collection element
em.getTransaction().begin();
darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() );
darkCharacter.getNames().add( new Name( "Action", "Hank" ) );
darkCharacter = em.merge( darkCharacter );
em.getTransaction().commit();
// Revision 3 - adding another collection element
em.getTransaction().begin();
darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() );
darkCharacter.getNames().add( new Name( "Green", "Lantern" ) );
darkCharacter = em.merge( darkCharacter );
em.getTransaction().commit();
// Revision 4 - removing single collection element
em.getTransaction().begin();
darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() );
darkCharacter.getNames().remove( new Name( "Action", "Hank" ) );
darkCharacter = em.merge( darkCharacter );
em.getTransaction().commit();
// Revision 5 - removing all collection elements
em.getTransaction().begin();
darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() );
darkCharacter.getNames().clear();
darkCharacter = em.merge( darkCharacter );
em.getTransaction().commit();
em.close();
}
@Test
public void testRevisionsCount() {
Assert.assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( DarkCharacter.class, id ) );
}
@Test
public void testHistoryOfCharacter() {
DarkCharacter darkCharacter = new DarkCharacter( id, 1 );
DarkCharacter ver1 = getAuditReader().find( DarkCharacter.class, id, 1 );
Assert.assertEquals( darkCharacter, ver1 );
Assert.assertEquals( 0, ver1.getNames().size() );
darkCharacter.getNames().add( new Name( "Action", "Hank" ) );
DarkCharacter ver2 = getAuditReader().find( DarkCharacter.class, id, 2 );
Assert.assertEquals( darkCharacter, ver2 );
Assert.assertEquals( darkCharacter.getNames(), ver2.getNames() );
darkCharacter.getNames().add( new Name( "Green", "Lantern" ) );
DarkCharacter ver3 = getAuditReader().find( DarkCharacter.class, id, 3 );
Assert.assertEquals( darkCharacter, ver3 );
Assert.assertEquals( darkCharacter.getNames(), ver3.getNames() );
darkCharacter.getNames().remove( new Name( "Action", "Hank" ) );
DarkCharacter ver4 = getAuditReader().find( DarkCharacter.class, id, 4 );
Assert.assertEquals( darkCharacter, ver4 );
Assert.assertEquals( darkCharacter.getNames(), ver4.getNames() );
darkCharacter.getNames().clear();
DarkCharacter ver5 = getAuditReader().find( DarkCharacter.class, id, 5 );
Assert.assertEquals( darkCharacter, ver5 );
Assert.assertEquals( darkCharacter.getNames(), ver5.getNames() );
}
}