1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.github.springtestdbunit.bean;
18
19 import static org.junit.Assert.*;
20 import static org.mockito.BDDMockito.given;
21 import static org.mockito.Mockito.*;
22
23 import java.sql.Connection;
24
25 import javax.sql.DataSource;
26
27 import org.dbunit.database.DatabaseDataSourceConnection;
28 import org.dbunit.database.IDatabaseConnection;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
32
33
34
35
36
37
38 public class DatabaseDataSourceConnectionFactoryBeanTest {
39
40 private DatabaseDataSourceConnectionFactoryBean factoryBean;
41
42 @Before
43 public void setup() {
44 this.factoryBean = new DatabaseDataSourceConnectionFactoryBean();
45 }
46
47 @Test
48 public void shouldNotAllowObjectWithoutDataSet() throws Exception {
49 try {
50 this.factoryBean.getObject();
51 fail();
52 } catch (IllegalArgumentException ex) {
53 assertEquals("The dataSource is required", ex.getMessage());
54 }
55 }
56
57 @Test
58 public void shouldCreateDatabaseDataSourceConnection() throws Exception {
59 DataSource dataSource = mock(DataSource.class);
60 Connection connection = mock(Connection.class);
61 given(dataSource.getConnection()).willReturn(connection);
62 this.factoryBean.setDataSource(dataSource);
63 DatabaseDataSourceConnection bean = this.factoryBean.getObject();
64 assertNotNull(bean);
65 bean.getConnection().createStatement();
66 verify(dataSource).getConnection();
67 }
68
69 @Test
70 public void shouldAcceptUsernameAndPassword() throws Exception {
71 DataSource dataSource = mock(DataSource.class);
72 this.factoryBean.setDataSource(dataSource);
73 this.factoryBean.setUsername("username");
74 this.factoryBean.setPassword("password");
75 DatabaseDataSourceConnection bean = this.factoryBean.getObject();
76 assertNotNull(bean);
77 bean.getConnection();
78 verify(dataSource).getConnection("username", "password");
79 }
80
81 @Test
82 public void shouldSupportSchema() throws Exception {
83 DataSource dataSource = mock(DataSource.class);
84 this.factoryBean.setDataSource(dataSource);
85 this.factoryBean.setSchema("schema");
86 DatabaseDataSourceConnection bean = this.factoryBean.getObject();
87 assertEquals("schema", bean.getSchema());
88 }
89
90 @Test
91 public void shouldSupportDatabaseConfigBean() throws Exception {
92 DataSource dataSource = mock(DataSource.class);
93 this.factoryBean.setDataSource(dataSource);
94 DatabaseConfigBean databaseConfig = mock(DatabaseConfigBean.class);
95 this.factoryBean.setDatabaseConfig(databaseConfig);
96 DatabaseDataSourceConnection bean = this.factoryBean.getObject();
97 assertNotNull(bean);
98 verify(databaseConfig).apply(bean.getConfig());
99 }
100
101 @Test
102 public void shouldBeSingleton() throws Exception {
103 assertTrue(this.factoryBean.isSingleton());
104 }
105
106 @Test
107 public void shouldBeCorrectClass() throws Exception {
108 assertEquals(DatabaseDataSourceConnection.class, this.factoryBean.getObjectType());
109 }
110
111 @Test
112 public void shouldCreateCreateTransactionAwareConnection() throws Exception {
113 DataSource dataSource = mock(DataSource.class);
114 this.factoryBean.setDataSource(dataSource);
115 DatabaseDataSourceConnection dataSourceConnection = this.factoryBean.getObject();
116 Connection connection = dataSourceConnection.getConnection();
117 assertTrue(connection.toString() + " is not transaction aware",
118 connection.toString().startsWith("Transaction-aware proxy"));
119 }
120
121 @Test
122 public void shouldNotWrapCreateTransactionAwareConnection() throws Exception {
123 DataSource dataSource = new TransactionAwareDataSourceProxy(mock(DataSource.class));
124 this.factoryBean.setDataSource(dataSource);
125 DatabaseDataSourceConnection dataSourceConnection = this.factoryBean.getObject();
126 Connection connection = dataSourceConnection.getConnection();
127 assertTrue(connection.toString() + " is not transaction aware", connection.toString()
128 .startsWith("Transaction-aware proxy for target Connection from DataSource [Mock for DataSource"));
129 }
130
131 @Test
132 public void shouldRespectTransactionAwareAttribute() throws Exception {
133 DataSource dataSource = mock(DataSource.class);
134 Connection connection = mock(Connection.class);
135 given(dataSource.getConnection()).willReturn(connection);
136 this.factoryBean.setDataSource(dataSource);
137 this.factoryBean.setTransactionAware(false);
138 DatabaseDataSourceConnection dataSourceConnection = this.factoryBean.getObject();
139 Connection actual = dataSourceConnection.getConnection();
140 assertSame(connection, actual);
141 }
142
143 @Test
144 public void shouldSupportNewConnection() throws Exception {
145 DataSource dataSource = mock(DataSource.class);
146 Connection connection = mock(Connection.class);
147 given(dataSource.getConnection()).willReturn(connection);
148 IDatabaseConnection databaseConnection = DatabaseDataSourceConnectionFactoryBean.newConnection(dataSource);
149 assertNotNull(databaseConnection);
150 databaseConnection.getConnection().createStatement();
151 verify(dataSource).getConnection();
152 }
153
154 }