View Javadoc
1   package com.atlassian.activeobjects.confluence.hibernate;
2   
3   import com.atlassian.hibernate.PluginHibernateSessionFactory;
4   import com.atlassian.sal.api.transaction.TransactionCallback;
5   import com.atlassian.sal.api.transaction.TransactionTemplate;
6   import net.sf.hibernate.Session;
7   import net.sf.hibernate.SessionFactory;
8   import net.sf.hibernate.dialect.Dialect;
9   import net.sf.hibernate.engine.SessionFactoryImplementor;
10  import org.junit.After;
11  import org.junit.Before;
12  import org.junit.Test;
13  import org.junit.runner.RunWith;
14  import org.mockito.Mock;
15  import org.mockito.junit.MockitoJUnitRunner;
16  
17  import static org.junit.Assert.assertEquals;
18  import static org.junit.Assert.assertNull;
19  import static org.mockito.ArgumentMatchers.any;
20  import static org.mockito.Mockito.mock;
21  import static org.mockito.Mockito.when;
22  
23  /**
24   * Testing {@link com.atlassian.activeobjects.confluence.hibernate.HibernateSessionDialectExtractor}
25   */
26  @RunWith(MockitoJUnitRunner.class)
27  public class HibernateSessionDialectExtractorTest {
28      private HibernateSessionDialectExtractor dialectExtractor;
29  
30      @Mock
31      private PluginHibernateSessionFactory pluginSessionFactory;
32  
33      @Mock
34      private TransactionTemplate transactionTemplate;
35  
36      @Before
37      public void setUp() {
38          dialectExtractor = new HibernateSessionDialectExtractor(pluginSessionFactory, transactionTemplate);
39          when(transactionTemplate.execute(any())).thenAnswer(invocation ->
40                  ((TransactionCallback<?>) invocation.getArgument(0)).doInTransaction());
41      }
42  
43      @After
44      public void tearDown() {
45          dialectExtractor = null;
46      }
47  
48      @Test
49      public void testGetDialectReturnsNullIfSessionFactoryDoesNotImplementSessionFactoryImplementor() {
50          mockPluginSessionFactory(SessionFactory.class);
51          assertNull(dialectExtractor.getDialect());
52      }
53  
54      @Test
55      public void testGetDialectReturnsCorrectDialectIfSessionFactoryDoesImplementSessionFactoryImplementor() {
56          final Dialect dialect = mock(Dialect.class);
57          final SessionFactoryImplementor sessionFactory = mockPluginSessionFactory(SessionFactoryImplementor.class);
58          when(sessionFactory.getDialect()).thenReturn(dialect);
59  
60          assertEquals(dialect.getClass(), dialectExtractor.getDialect());
61      }
62  
63      private <S extends SessionFactory> S mockPluginSessionFactory(Class<S> sessionFactoryClass) {
64          final Session session = mock(Session.class);
65          final S sessionFactory = mock(sessionFactoryClass);
66          when(pluginSessionFactory.getSession()).thenReturn(session);
67          when(session.getSessionFactory()).thenReturn(sessionFactory);
68          return sessionFactory;
69      }
70  }