package demo.ejb; import demo.ejb.demo.entities.Contact; import org.hibernate.LazyInitializationException; import org.jee6unit.AbstractJPATest; import org.jee6unit.annotations.RollbackAfterTest; import org.junit.Before; import org.junit.Test; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import java.util.List; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; public class ContactBeanTest extends AbstractJPATest { private ContactDao dao; @Before public void setup() throws Exception { dao = lookup(ContactDao.class); } /** * Transaction will be rolled back at the end of the test. * */ @Test public void testSaveContact() throws Exception { int nrOfContacts = countEntities(Contact.class); Contact c = new Contact(); c.setName("Paul"); dao.saveContact(c); assertEquals(nrOfContacts + 1, countEntities(Contact.class)); } @Test @RollbackAfterTest(false) public void testSaveContactNoRollback() throws Exception { int nrOfContacts = countEntities(Contact.class); Contact c = new Contact(); c.setName("Paul"); dao.saveContact(c); assertEquals(nrOfContacts + 1, countEntities(Contact.class)); } @Test public void testListContacts() throws Exception{ int nrOfContacts = countEntities(Contact.class); List contacts = dao.listContacts(); assertNotNull(contacts); assertEquals(nrOfContacts, contacts.size()); } /** * Non-transactional test to force detatching of entities to test lazy loading. */ @Test(expected = LazyInitializationException.class) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void testLazyLoadFriends() { Contact c = new Contact(); c.setName("Paul"); dao.saveContact(c); Contact friend = new Contact(); friend.addFriend(c); dao.saveContact(friend); Contact contactFromDB = dao.getContact(friend.getId()); assertEquals(1, contactFromDB.getFriends().size()); } /** * Non-transactional test to force detatching of entities to test lazy loading. */ @Test @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void testGetContactWithFriends() { Contact c = new Contact(); c.setName("Paul"); dao.saveContact(c); Contact friend = new Contact(); friend.addFriend(c); dao.saveContact(friend); Contact contactFromDB = dao.getContactWithFriends(friend.getId()); assertEquals(1, contactFromDB.getFriends().size()); } @Override protected String getDatasourceName() { return "jdbc/jpa_examples"; } }