Merge pull request #9274 from jesperancinha/BAEL-2749

[BAEL-2749] Refactoring and cleanup
This commit is contained in:
Loredana Crusoveanu 2020-05-15 15:18:55 +03:00 committed by GitHub
commit 590ea4ec18
2 changed files with 98 additions and 81 deletions

View File

@ -24,6 +24,8 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import static com.baeldung.dbunit.ConnectionSettings.JDBC_URL; import static com.baeldung.dbunit.ConnectionSettings.JDBC_URL;
import static com.baeldung.dbunit.ConnectionSettings.PASSWORD;
import static com.baeldung.dbunit.ConnectionSettings.USER;
import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.joining;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.dbunit.Assertion.assertEqualsIgnoreCols; import static org.dbunit.Assertion.assertEqualsIgnoreCols;
@ -33,12 +35,14 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
private static final Logger logger = LoggerFactory.getLogger(DataSourceDBUnitTest.class); private static final Logger logger = LoggerFactory.getLogger(DataSourceDBUnitTest.class);
private Connection connection;
@Override @Override
protected DataSource getDataSource() { protected DataSource getDataSource() {
JdbcDataSource dataSource = new JdbcDataSource(); JdbcDataSource dataSource = new JdbcDataSource();
dataSource.setURL(JDBC_URL); dataSource.setURL(JDBC_URL);
dataSource.setUser("sa"); dataSource.setUser(USER);
dataSource.setPassword(""); dataSource.setPassword(PASSWORD);
return dataSource; return dataSource;
} }
@ -62,6 +66,7 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
super.setUp(); super.setUp();
connection = getConnection().getConnection();
} }
@After @After
@ -71,9 +76,7 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
@Test @Test
public void givenDataSet_whenSelect_thenFirstTitleIsGreyTShirt() throws SQLException { public void givenDataSet_whenSelect_thenFirstTitleIsGreyTShirt() throws SQLException {
final Connection connection = getDataSource().getConnection(); ResultSet rs = connection.createStatement().executeQuery("select * from ITEMS where id = 1");
final ResultSet rs = connection.createStatement().executeQuery("select * from ITEMS where id = 1");
assertThat(rs.next()).isTrue(); assertThat(rs.next()).isTrue();
assertThat(rs.getString("title")).isEqualTo("Grey T-Shirt"); assertThat(rs.getString("title")).isEqualTo("Grey T-Shirt");
@ -81,58 +84,59 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
@Test @Test
public void givenDataSetEmptySchema_whenDataSetCreated_thenTablesAreEqual() throws Exception { public void givenDataSetEmptySchema_whenDataSetCreated_thenTablesAreEqual() throws Exception {
final IDataSet expectedDataSet = getDataSet(); IDataSet expectedDataSet = getDataSet();
final ITable expectedTable = expectedDataSet.getTable("CLIENTS"); ITable expectedTable = expectedDataSet.getTable("CLIENTS");
final IDataSet databaseDataSet = getConnection().createDataSet(); IDataSet databaseDataSet = getConnection().createDataSet();
final ITable actualTable = databaseDataSet.getTable("CLIENTS"); ITable actualTable = databaseDataSet.getTable("CLIENTS");
Assertion.assertEquals(expectedTable, actualTable); Assertion.assertEquals(expectedTable, actualTable);
} }
@Test @Test
public void givenDataSet_whenInsert_thenTableHasNewClient() throws Exception { public void givenDataSet_whenInsert_thenTableHasNewClient() throws Exception {
try (final InputStream is = getClass().getClassLoader().getResourceAsStream("dbunit/expected-user.xml")) { try (InputStream is = getClass().getClassLoader().getResourceAsStream("dbunit/expected-user.xml")) {
final IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is); // given
final ITable expectedTable = expectedDataSet.getTable("CLIENTS"); IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is);
final Connection conn = getDataSource().getConnection(); ITable expectedTable = expectedDataSet.getTable("CLIENTS");
Connection conn = getDataSource().getConnection();
// when
conn.createStatement() conn.createStatement()
.executeUpdate( .executeUpdate("INSERT INTO CLIENTS (first_name, last_name) VALUES ('John', 'Jansen')");
"INSERT INTO CLIENTS (first_name, last_name) VALUES ('John', 'Jansen')"); ITable actualData = getConnection()
final ITable actualData = getConnection() .createQueryTable("result_name", "SELECT * FROM CLIENTS WHERE last_name='Jansen'");
.createQueryTable(
"result_name",
"SELECT * FROM CLIENTS WHERE last_name='Jansen'");
// then
assertEqualsIgnoreCols(expectedTable, actualData, new String[] { "id" }); assertEqualsIgnoreCols(expectedTable, actualData, new String[] { "id" });
} }
} }
@Test @Test
public void givenDataSet_whenDelete_thenItemIsDeleted() throws Exception { public void givenDataSet_whenDelete_thenItemIsDeleted() throws Exception {
final Connection connection = getConnection().getConnection(); try (InputStream is = DataSourceDBUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_delete.xml")) {
try (final InputStream is = DataSourceDBUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_delete.xml")) { // given
ITable expectedTable = (new FlatXmlDataSetBuilder().build(is)).getTable("ITEMS"); ITable expectedTable = (new FlatXmlDataSetBuilder().build(is)).getTable("ITEMS");
// when
connection.createStatement().executeUpdate("delete from ITEMS where id = 2"); connection.createStatement().executeUpdate("delete from ITEMS where id = 2");
final IDataSet databaseDataSet = getConnection().createDataSet(); // then
IDataSet databaseDataSet = getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
Assertion.assertEquals(expectedTable, actualTable); Assertion.assertEquals(expectedTable, actualTable);
} }
} }
@Test @Test
public void givenDataSet_whenUpdate_thenItemHasNewName() throws Exception { public void givenDataSet_whenUpdate_thenItemHasNewName() throws Exception {
final Connection connection = getConnection().getConnection(); try (InputStream is = DataSourceDBUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_rename.xml")) {
try (final InputStream is = DataSourceDBUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_rename.xml")) { // given
ITable expectedTable = (new FlatXmlDataSetBuilder().build(is)).getTable("ITEMS"); ITable expectedTable = (new FlatXmlDataSetBuilder().build(is)).getTable("ITEMS");
connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1"); connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1");
final IDataSet databaseDataSet = getConnection().createDataSet(); IDataSet databaseDataSet = getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
Assertion.assertEquals(expectedTable, actualTable); Assertion.assertEquals(expectedTable, actualTable);
@ -140,22 +144,24 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
} }
@Test @Test
public void givenDataSet_whenInsertUnexpectedData_thenFailOnAllUnexpectedValues() throws Exception { public void givenDataSet_whenInsertUnexpectedData_thenFail() throws Exception {
try (final InputStream is = getClass().getClassLoader().getResourceAsStream("dbunit/expected-multiple-failures.xml")) { try (InputStream is = getClass().getClassLoader()
final IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is); .getResourceAsStream("dbunit/expected-multiple-failures.xml")) {
final ITable expectedTable = expectedDataSet.getTable("ITEMS");
final Connection conn = getDataSource().getConnection();
final DiffCollectingFailureHandler collectingHandler = new DiffCollectingFailureHandler();
conn.createStatement().executeUpdate( // given
"INSERT INTO ITEMS (title, price) VALUES ('Battery', '1000000')"); IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is);
final ITable actualData = getConnection().createDataSet().getTable("ITEMS"); ITable expectedTable = expectedDataSet.getTable("ITEMS");
Connection conn = getDataSource().getConnection();
DiffCollectingFailureHandler collectingHandler = new DiffCollectingFailureHandler();
// when
conn.createStatement().executeUpdate("INSERT INTO ITEMS (title, price) VALUES ('Battery', '1000000')");
ITable actualData = getConnection().createDataSet().getTable("ITEMS");
// then
Assertion.assertEquals(expectedTable, actualData, collectingHandler); Assertion.assertEquals(expectedTable, actualData, collectingHandler);
if (!collectingHandler.getDiffList().isEmpty()) { if (!collectingHandler.getDiffList().isEmpty()) {
String message = (String) collectingHandler String message = (String) collectingHandler.getDiffList().stream()
.getDiffList()
.stream()
.map(d -> formatDifference((Difference) d)).collect(joining("\n")); .map(d -> formatDifference((Difference) d)).collect(joining("\n"));
logger.error(() -> message); logger.error(() -> message);
} }
@ -163,6 +169,8 @@ public class DataSourceDBUnitTest extends DataSourceBasedDBTestCase {
} }
private static String formatDifference(Difference diff) { private static String formatDifference(Difference diff) {
return "expected value in " + diff.getExpectedTable().getTableMetaData().getTableName() + "." + diff.getColumnName() + " row " + diff.getRowIndex() + ":" + diff.getExpectedValue() + ", but was: " + diff.getActualValue(); return "expected value in " + diff.getExpectedTable().getTableMetaData().getTableName() + "." + diff
.getColumnName() + " row " + diff.getRowIndex() + ":" + diff.getExpectedValue() + ", but was: " + diff
.getActualValue();
} }
} }

View File

@ -31,13 +31,15 @@ public class OldSchoolDbUnitTest {
private static IDatabaseTester tester = null; private static IDatabaseTester tester = null;
private Connection connection;
@BeforeClass @BeforeClass
public static void setUp() throws Exception { public static void setUp() throws Exception {
tester = initDatabaseTester(); tester = initDatabaseTester();
} }
private static IDatabaseTester initDatabaseTester() throws Exception { private static IDatabaseTester initDatabaseTester() throws Exception {
final JdbcDatabaseTester tester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD); JdbcDatabaseTester tester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD);
tester.setDataSet(initDataSet()); tester.setDataSet(initDataSet());
tester.setSetUpOperation(DatabaseOperation.REFRESH); tester.setSetUpOperation(DatabaseOperation.REFRESH);
tester.setTearDownOperation(DatabaseOperation.DELETE_ALL); tester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
@ -45,7 +47,7 @@ public class OldSchoolDbUnitTest {
} }
private static IDataSet initDataSet() throws Exception { private static IDataSet initDataSet() throws Exception {
try (final InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/data.xml")) { try (InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/data.xml")) {
return new FlatXmlDataSetBuilder().build(is); return new FlatXmlDataSetBuilder().build(is);
} }
} }
@ -53,6 +55,7 @@ public class OldSchoolDbUnitTest {
@Before @Before
public void setup() throws Exception { public void setup() throws Exception {
tester.onSetup(); tester.onSetup();
connection = tester.getConnection().getConnection();
} }
@After @After
@ -62,94 +65,100 @@ public class OldSchoolDbUnitTest {
@Test @Test
public void givenDataSet_whenSelect_thenFirstTitleIsGreyTShirt() throws Exception { public void givenDataSet_whenSelect_thenFirstTitleIsGreyTShirt() throws Exception {
final Connection connection = tester.getConnection().getConnection(); ResultSet rs = connection.createStatement().executeQuery("select * from ITEMS where id = 1");
final ResultSet rs = connection.createStatement().executeQuery("select * from ITEMS where id = 1");
assertThat(rs.next()).isTrue(); assertThat(rs.next()).isTrue();
assertThat(rs.getString("title")).isEqualTo("Grey T-Shirt"); assertThat(rs.getString("title")).isEqualTo("Grey T-Shirt");
} }
@Test @Test
public void givenDataSet_whenInsert_thenGetResultsAreStillEqualIfIgnoringColumnsWithDifferentProduced() throws Exception { public void givenDataSet_whenInsert_thenGetResultsAreStillEqualIfIgnoringColumnsWithDifferentProduced()
final Connection connection = tester.getConnection().getConnection(); throws Exception {
final String[] excludedColumns = { "id", "produced" }; String[] excludedColumns = { "id", "produced" };
try (final InputStream is = getClass().getClassLoader().getResourceAsStream("dbunit/expected-ignoring-registered_at.xml")) { try (InputStream is = getClass().getClassLoader()
final IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is); .getResourceAsStream("dbunit/expected-ignoring-registered_at.xml")) {
final ITable expectedTable = DefaultColumnFilter.excludedColumnsTable( // given
expectedDataSet.getTable("ITEMS"), excludedColumns); IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(is);
ITable expectedTable = DefaultColumnFilter
.excludedColumnsTable(expectedDataSet.getTable("ITEMS"), excludedColumns);
connection.createStatement().executeUpdate( // when
"INSERT INTO ITEMS (title, price, produced) VALUES('Necklace', 199.99, now())"); connection.createStatement()
.executeUpdate("INSERT INTO ITEMS (title, price, produced) VALUES('Necklace', 199.99, now())");
final IDataSet databaseDataSet = tester.getConnection().createDataSet();
final ITable actualTable = DefaultColumnFilter.excludedColumnsTable(
databaseDataSet.getTable("ITEMS"), excludedColumns);
// then
IDataSet databaseDataSet = tester.getConnection().createDataSet();
ITable actualTable = DefaultColumnFilter
.excludedColumnsTable(databaseDataSet.getTable("ITEMS"), excludedColumns);
Assertion.assertEquals(expectedTable, actualTable); Assertion.assertEquals(expectedTable, actualTable);
} }
} }
@Test @Test
public void givenDataSet_whenDelete_thenItemIsRemoved() throws Exception { public void givenDataSet_whenDelete_thenItemIsRemoved() throws Exception {
final Connection connection = tester.getConnection().getConnection(); try (InputStream is = OldSchoolDbUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_delete.xml")) {
try (final InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_delete.xml")) { // given
ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS"); ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS");
// when
connection.createStatement().executeUpdate("delete from ITEMS where id = 2"); connection.createStatement().executeUpdate("delete from ITEMS where id = 2");
final IDataSet databaseDataSet = tester.getConnection().createDataSet(); // then
IDataSet databaseDataSet = tester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
assertEquals(expectedTable, actualTable); assertEquals(expectedTable, actualTable);
} }
} }
@Test @Test
public void givenDataSet_whenDelete_thenItemIsRemovedAndResultsEqualIfProducedIsIgnored() throws Exception { public void givenDataSet_whenProductIgnoredAndDelete_thenItemIsRemoved() throws Exception {
final Connection connection = tester.getConnection().getConnection(); try (InputStream is = OldSchoolDbUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_delete_no_produced.xml")) {
try (final InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_delete_no_produced.xml")) { // given
final ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS"); ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS");
// when
connection.createStatement().executeUpdate("delete from ITEMS where id = 2"); connection.createStatement().executeUpdate("delete from ITEMS where id = 2");
final IDataSet databaseDataSet = tester.getConnection().createDataSet(); // then
IDataSet databaseDataSet = tester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
actualTable = DefaultColumnFilter.excludedColumnsTable(actualTable, new String[] { "produced" }); actualTable = DefaultColumnFilter.excludedColumnsTable(actualTable, new String[] { "produced" });
assertEquals(expectedTable, actualTable); assertEquals(expectedTable, actualTable);
} }
} }
@Test @Test
public void givenDataSet_whenUpdate_thenItemHasNewName() throws Exception { public void givenDataSet_whenUpdate_thenItemHasNewName() throws Exception {
final Connection connection = tester.getConnection().getConnection(); try (InputStream is = OldSchoolDbUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_rename.xml")) {
try (final InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_rename.xml")) { // given
final ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS"); ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS");
// when
connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1"); connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1");
final IDataSet databaseDataSet = tester.getConnection().createDataSet(); // then
IDataSet databaseDataSet = tester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
assertEquals(expectedTable, actualTable); assertEquals(expectedTable, actualTable);
} }
} }
@Test @Test
public void givenDataSet_whenUpdateWithNoProduced_thenItemHasNewName() throws Exception { public void givenDataSet_whenUpdateWithNoProduced_thenItemHasNewName() throws Exception {
final Connection connection = tester.getConnection().getConnection(); try (InputStream is = OldSchoolDbUnitTest.class.getClassLoader()
.getResourceAsStream("dbunit/items_exp_rename_no_produced.xml")) {
try (final InputStream is = OldSchoolDbUnitTest.class.getClassLoader().getResourceAsStream("dbunit/items_exp_rename_no_produced.xml")) { // given
ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS"); ITable expectedTable = new FlatXmlDataSetBuilder().build(is).getTable("ITEMS");
expectedTable = DefaultColumnFilter.excludedColumnsTable(expectedTable, new String[] { "produced" }); expectedTable = DefaultColumnFilter.excludedColumnsTable(expectedTable, new String[] { "produced" });
// when
connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1"); connection.createStatement().executeUpdate("update ITEMS set title='new name' where id = 1");
final IDataSet databaseDataSet = tester.getConnection().createDataSet(); // then
IDataSet databaseDataSet = tester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("ITEMS"); ITable actualTable = databaseDataSet.getTable("ITEMS");
actualTable = DefaultColumnFilter.excludedColumnsTable(actualTable, new String[] { "produced" }); actualTable = DefaultColumnFilter.excludedColumnsTable(actualTable, new String[] { "produced" });
assertEquals(expectedTable, actualTable); assertEquals(expectedTable, actualTable);