diff options
Diffstat (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util')
| -rw-r--r-- | src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java | 41 | ||||
| -rw-r--r-- | src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java | 153 | 
2 files changed, 194 insertions, 0 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java index b808206..618b06f 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java @@ -6,6 +6,12 @@ import java.util.List;  import javafx.stage.Modality;  import javafx.stage.Stage;  import javafx.stage.Window; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.ITable; +import org.dbunit.dataset.filter.DefaultColumnFilter; +import org.dbunit.util.fileloader.FlatXmlDataFileLoader;  import org.testfx.api.FxRobotContext;  public class Helper { @@ -25,4 +31,39 @@ public class Helper {                          .findFirst()                          .orElse(null);      } + +    public static ITable getActualFilteredTableData( +            IDatabaseConnection connection, String tableName, String[] excludedColumns) +            throws Exception { +        IDataSet actualDataSet = connection.createDataSet(); +        ITable actualTable = actualDataSet.getTable(tableName); +        return getFilteredTableData(actualTable, excludedColumns); +    } + +    public static ITable getExpectedFilteredTableData( +            String tableName, String[] excludedColumns, String expectedXmlDataFileName) +            throws Exception { +        IDataSet dataSet = loadDataSet(expectedXmlDataFileName); +        ITable table = dataSet.getTable(tableName); +        return getFilteredTableData(table, excludedColumns); +    } + +    public static ITable getActualFilteredQueryTableData( +            IDatabaseConnection connection, +            String resultTableName, +            String sql, +            String[] excludedColumns) +            throws Exception { +        ITable queryData = connection.createQueryTable(resultTableName, sql); +        return getFilteredTableData(queryData, excludedColumns); +    } + +    private static ITable getFilteredTableData(ITable tableData, String[] excludedColumns) +            throws DataSetException { +        return DefaultColumnFilter.excludedColumnsTable(tableData, excludedColumns); +    } + +    private static IDataSet loadDataSet(String fileName) { +        return new FlatXmlDataFileLoader().load("/" + fileName); +    }  } diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java new file mode 100644 index 0000000..daf4ec4 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/JdbcTestCase.java @@ -0,0 +1,153 @@ +package at.ac.tuwien.sepm.assignment.groupphase.util; + +import static org.dbunit.Assertion.assertEquals; + +import java.io.InputStream; +import java.lang.invoke.MethodHandles; +import java.sql.SQLException; +import java.sql.Types; +import org.dbunit.DefaultDatabaseTester; +import org.dbunit.IDatabaseTester; +import org.dbunit.IOperationListener; +import org.dbunit.database.DatabaseConfig; +import org.dbunit.database.DatabaseConnection; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.datatype.DataType; +import org.dbunit.dataset.datatype.DataTypeException; +import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; +import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory; +import org.dbunit.operation.DatabaseOperation; +import org.junit.After; +import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public abstract class JdbcTestCase { + +    private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); +    private static final String JDBC_URL = +            "jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:sql/database.sql'"; + +    private IDatabaseTester dbTester; +    private IDatabaseConnection connection; +    private IOperationListener operationListener; +    private JDBCConnectionManager jdbcConnectionManager; + +    protected JdbcTestCase() { +        jdbcConnectionManager = new JDBCConnectionManager(JDBC_URL); +    } + +    protected abstract IDataSet getDataSet() throws Exception; + +    protected IDataSet getDataSet(String xmlname) throws DataSetException { +        InputStream res = getClass().getClassLoader().getResourceAsStream(xmlname); +        FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); +        builder.setColumnSensing(true); +        return builder.build(res); +    } + +    protected JDBCConnectionManager getJdbcConnectionManager() { +        return jdbcConnectionManager; +    } + +    protected IDatabaseConnection getConnection() throws Exception { +        if (connection == null) +            connection = new DatabaseConnection(jdbcConnectionManager.getConnection(), null, true); + +        return connection; +    } + +    private IOperationListener getOperationListener() { +        if (operationListener == null) { +            operationListener = +                    new IOperationListener() { +                        @Override +                        public void connectionRetrieved(IDatabaseConnection connection) { +                            setUpDatabaseConfig(connection.getConfig()); +                        } + +                        @Override +                        public void operationSetUpFinished(IDatabaseConnection connection) { +                            LOG.debug("operationSetUpFinished(connection={}) - start", connection); +                        } + +                        @Override +                        public void operationTearDownFinished(IDatabaseConnection connection) { +                            LOG.debug( +                                    "operationTearDownFinished(connection={}) - start", connection); +                            try { +                                connection.close(); +                            } catch (SQLException e) { +                                LOG.error("Failed to close connection:" + e); +                                e.printStackTrace(); +                            } +                        } +                    }; +        } + +        return operationListener; +    } + +    // override DBUnit's enum handling +    private void setUpDatabaseConfig(DatabaseConfig config) { +        PostgresqlDataTypeFactory factory = +                new PostgresqlDataTypeFactory() { +                    @Override +                    public boolean isEnumType(String sqlTypeName) { +                        if (sqlTypeName.equalsIgnoreCase("enum")) return true; + +                        return super.isEnumType(sqlTypeName); +                    } + +                    @Override +                    public DataType createDataType(int sqlType, String sqlTypeName) +                            throws DataTypeException { +                        if (isEnumType(sqlTypeName)) { +                            sqlType = Types.VARCHAR; +                        } + +                        return super.createDataType(sqlType, sqlTypeName); +                    } +                }; + +        config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory); +    } + +    protected void compareWith(String xmlname, String[] tables) throws Exception { +        InputStream res = getClass().getClassLoader().getResourceAsStream(xmlname); +        IDataSet actual = getConnection().createDataSet(); +        IDataSet expected = new FlatXmlDataSetBuilder().build(res); + +        for (String table : tables) { +            assertEquals(actual.getTable(table), expected.getTable(table)); +        } +    } + +    @Before +    public void setUp() throws Exception { +        IDataSet dataSet = getDataSet(); + +        dbTester = new DefaultDatabaseTester(getConnection()); +        getOperationListener().connectionRetrieved(getConnection()); + +        dbTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT); +        dbTester.setTearDownOperation(DatabaseOperation.REFRESH); +        dbTester.setDataSet(dataSet); +        dbTester.setOperationListener(getOperationListener()); +        dbTester.onSetup(); +    } + +    @After +    public void tearDown() throws Exception { +        try { +            dbTester.onTearDown(); +            getConnection().close(); +        } finally { +            dbTester = null; +        } +    } +}  | 
