package org.jooby.internal.hbm;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.context.internal.ManagedSessionContext;
import org.jooby.test.MockUnit;
import org.jooby.test.MockUnit.Block;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({SessionProvider.class, ManagedSessionContext.class })
public class SessionProviderTest {
@Test
public void openSession() throws Exception {
new MockUnit(SessionFactory.class, Session.class)
.expect(hasBind(false))
.expect(unit -> {
expect(unit.get(SessionFactory.class).openSession()).andReturn(unit.get(Session.class));
})
.run(unit -> {
Session result = new SessionProvider(unit.get(SessionFactory.class)).get();
assertEquals(unit.get(Session.class), result);
});
}
@Test
public void currentSession() throws Exception {
new MockUnit(SessionFactory.class, Session.class)
.expect(hasBind(true))
.expect(unit -> {
expect(unit.get(SessionFactory.class).getCurrentSession())
.andReturn(unit.get(Session.class));
})
.run(unit -> {
Session result = new SessionProvider(unit.get(SessionFactory.class)).get();
assertEquals(unit.get(Session.class), result);
});
}
private Block hasBind(final boolean b) {
return unit -> {
unit.mockStatic(ManagedSessionContext.class);
expect(ManagedSessionContext.hasBind(unit.get(SessionFactory.class))).andReturn(b);
};
}
}