package liquibase.ext.spatial.sqlgenerator; import static org.mockito.Mockito.*; import static org.testng.Assert.*; import liquibase.database.Database; import liquibase.database.core.H2Database; import liquibase.database.core.OracleDatabase; import liquibase.ext.spatial.statement.CreateSpatialIndexStatement; import liquibase.sql.SingleLineComment; import liquibase.sql.Sql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.statement.core.DropTableStatement; import org.testng.annotations.Test; /** * <code>DropSpatialTableGeneratorOracleTest</code> tests {@link DropSpatialTableGeneratorOracle}. */ public class DropSpatialTableGeneratorOracleTest { /** * Tests {@link DropSpatialTableGeneratorOracle#supports(CreateSpatialIndexStatement, Database)} */ @Test public void testSupports() { final DropSpatialTableGeneratorOracle generator = new DropSpatialTableGeneratorOracle(); final DropTableStatement statement = mock(DropTableStatement.class); assertTrue(generator.supports(statement, new OracleDatabase())); assertFalse(generator.supports(statement, new H2Database())); } /** * Tests * {@link DropSpatialTableGeneratorOracle#generateSql(DropTableStatement, Database, SqlGeneratorChain)} */ @Test public void testGenerateSql() { final DropSpatialTableGeneratorOracle generator = new DropSpatialTableGeneratorOracle(); final Database database = new OracleDatabase(); final SqlGeneratorChain sqlGeneratorChain = mock(SqlGeneratorChain.class); final DropTableStatement statement = new DropTableStatement("catalog_name", "schema_name", "table_name", true); final Sql comment = new SingleLineComment("No-op", "--"); when(sqlGeneratorChain.generateSql(statement, database)).thenReturn(new Sql[] { comment }); final Sql[] result = generator.generateSql(statement, database, sqlGeneratorChain); assertNotNull(result); assertEquals(result.length, 2); assertEquals(result[1], comment); // Verify the DELETE statement. final String deleteSql = result[0].toSql(); String deletePattern = "(?i)DELETE FROM user_sdo_geom_metadata "; deletePattern += "WHERE table_name = '" + statement.getTableName().toUpperCase(); deletePattern += "'"; assertTrue(deleteSql.matches(deletePattern), "'" + deleteSql + "' does not match the pattern '" + deletePattern + "'"); assertNotNull(result[0].getAffectedDatabaseObjects()); assertTrue(result[0].getAffectedDatabaseObjects().size() >= 1, result[0] .getAffectedDatabaseObjects().toString()); } }