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 }