package org.javaee7.jpa.extended.pc;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.junit.InSequence;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.ejb.EJB;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.junit.Assert.assertThat;
@RunWith(Arquillian.class)
public class ExtendedPersistenceContextTest {
@PersistenceContext
EntityManager em;
@EJB
CharactersBean bean;
@Deployment
public static WebArchive deploy() {
return ShrinkWrap.create(WebArchive.class)
.addPackage("org.javaee7.jpa.extended.pc")
.addAsResource("META-INF/persistence.xml")
.addAsResource("META-INF/create.sql")
.addAsResource("META-INF/drop.sql")
.addAsResource("META-INF/load.sql");
}
@Before
public void setup() {
Character wil = new Character(8, "Wil Wheaton");
bean.save(wil);
for (Character c : bean.get()) {
if ("Raj".equals(c.getName())) {
c.setName("Rajesh Ramayan");
bean.save(c);
}
}
}
@Test
@InSequence(1)
public void should_not_persist_changes_without_transaction_flush() {
List<Character> characters = em.createNamedQuery(Character.FIND_ALL, Character.class).getResultList();
Character raj = em.find(Character.class, 6);
assertThat(characters, hasSize(7));
assertThat(raj.getName(), is(equalTo("Raj")));
}
@Test
@InSequence(2)
public void should_update_characters_after_transaction_flush() {
//when
bean.commitChanges();
//then
List<Character> characters = em.createNamedQuery(Character.FIND_ALL, Character.class).getResultList();
Character rajesh = em.find(Character.class, 6);
Character wil = em.find(Character.class, 8);
assertThat(characters, hasSize(8));
assertThat(rajesh.getName(), is(equalTo("Rajesh Ramayan")));
assertThat(wil.getName(), is(equalTo("Wil Wheaton")));
}
}