/* * Created on Mar 20, 2005 * */ package org.springframework.orm.toplink; import junit.framework.TestCase; import oracle.toplink.exceptions.TopLinkException; import oracle.toplink.sessions.Session; import org.easymock.MockControl; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller * @author <a href="mailto:james.x.clark@oracle.com">James Clark</a> * @since 28.04.2005 */ public class TopLinkTemplateTests extends TestCase { public void testTemplateNotAllowingCreate() { MockControl sessionControl = MockControl.createControl(Session.class); Session session = (Session) sessionControl.getMock(); SessionFactory factory = new SingleSessionFactory(session); TopLinkTemplate template = new TopLinkTemplate(); template.setAllowCreate(false); template.setSessionFactory(factory); try { template.execute(new TopLinkCallback() { public Object doInTopLink(Session session) throws TopLinkException { return null; } }); fail(); } catch (Exception e) { } } public void testTemplateWithCreate() { MockControl sessionControl = MockControl.createControl(Session.class); Session session = (Session) sessionControl.getMock(); SessionFactory factory = new SingleSessionFactory(session); session.release(); sessionControl.setVoidCallable(1); sessionControl.replay(); TopLinkTemplate template = new TopLinkTemplate(); template.setAllowCreate(true); template.setSessionFactory(factory); template.execute(new TopLinkCallback() { public Object doInTopLink(Session session) throws TopLinkException { assertTrue(session != null); return null; } }); assertFalse(TransactionSynchronizationManager.hasResource(factory)); sessionControl.verify(); } public void testTemplateWithExistingSessionAndNoCreate() { MockControl sessionControl = MockControl.createControl(Session.class); Session session = (Session) sessionControl.getMock(); SessionFactory factory = new SingleSessionFactory(session); sessionControl.replay(); SessionHolder sessionHolder = new SessionHolder(factory.createSession()); TransactionSynchronizationManager.bindResource(factory, sessionHolder); TopLinkTemplate template = new TopLinkTemplate(); template.setAllowCreate(false); template.setSessionFactory(factory); template.execute(new TopLinkCallback() { public Object doInTopLink(Session session) throws TopLinkException { assertTrue(session != null); return null; } }); assertTrue(TransactionSynchronizationManager.hasResource(factory)); sessionControl.verify(); TransactionSynchronizationManager.unbindResource(factory); } public void testTemplateWithExistingSessionAndCreateAllowed() { MockControl sessionControl = MockControl.createControl(Session.class); Session session = (Session) sessionControl.getMock(); SessionFactory factory = new SingleSessionFactory(session); sessionControl.replay(); SessionHolder sessionHolder = new SessionHolder(factory.createSession()); TransactionSynchronizationManager.bindResource(factory, sessionHolder); TopLinkTemplate template = new TopLinkTemplate(); template.setAllowCreate(true); template.setSessionFactory(factory); template.execute(new TopLinkCallback() { public Object doInTopLink(Session session) throws TopLinkException { assertTrue(session != null); return null; } }); assertTrue(TransactionSynchronizationManager.hasResource(factory)); sessionControl.verify(); TransactionSynchronizationManager.unbindResource(factory); } }