View Javadoc
1   package com.atlassian.activeobjects.internal;
2   
3   import com.atlassian.activeobjects.spi.DatabaseType;
4   import com.atlassian.sal.api.transaction.TransactionCallback;
5   import com.google.common.collect.Sets;
6   import net.java.ao.DatabaseProvider;
7   import net.java.ao.DisposableDataSource;
8   import net.java.ao.EntityManager;
9   import org.junit.Before;
10  import org.junit.Test;
11  import org.junit.runner.RunWith;
12  import org.mockito.Mock;
13  import org.mockito.junit.MockitoJUnitRunner;
14  
15  import java.sql.Connection;
16  import java.sql.DatabaseMetaData;
17  import java.util.Set;
18  
19  import static org.mockito.Mockito.mock;
20  import static org.mockito.Mockito.verify;
21  import static org.mockito.Mockito.when;
22  
23  @RunWith(MockitoJUnitRunner.class)
24  public class EntityManagedActiveObjectsTest {
25      private EntityManagedActiveObjects activeObjects;
26  
27      @Mock
28      private EntityManager entityManager;
29      @Mock
30      private TransactionManager transactionManager;
31  
32      @Before
33      public void setUp() {
34          activeObjects = new EntityManagedActiveObjects(entityManager, transactionManager, DatabaseType.HSQL);
35      }
36  
37      @Test
38      public void testExecuteInTransaction() throws Exception {
39          final DatabaseProvider databaseProvider = mockProvider();
40          when(entityManager.getProvider()).thenReturn(databaseProvider);
41  
42          @SuppressWarnings({"unchecked"}) final TransactionCallback<Object> callback = mock(TransactionCallback.class);
43          activeObjects.executeInTransaction(callback);
44  
45          verify(transactionManager).doInTransaction(callback);
46      }
47  
48      private DatabaseProvider mockProvider() throws Exception {
49          final DisposableDataSource disposableDataSource = mock(DisposableDataSource.class);
50          final Connection connection = mock(Connection.class);
51          final DatabaseMetaData metaData = mock(DatabaseMetaData.class);
52  
53          when(disposableDataSource.getConnection()).thenReturn(connection);
54          when(connection.getMetaData()).thenReturn(metaData);
55          when(metaData.getIdentifierQuoteString()).thenReturn("");
56  
57          return new DatabaseProvider(disposableDataSource, null) {
58              @Override
59              protected Set<String> getReservedWords() {
60                  return Sets.newHashSet();
61              }
62          };
63      }
64  }