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
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 }