package liquibase.ext.spatial.sqlgenerator; import static org.mockito.Mockito.*; import static org.testng.Assert.*; import liquibase.database.Database; import liquibase.database.core.DerbyDatabase; import liquibase.database.core.H2Database; import liquibase.database.core.OracleDatabase; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.statement.core.AddColumnStatement; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * <code>AddGeometryColumnGeneratorGeoDBTest</code> tests {@link AddGeometryColumnGeneratorGeoDB}. */ public class AddGeometryColumnGeneratorGeoDBTest { /** * Tests {@link AddGeometryColumnGeneratorGeoDB#supports(AddColumnStatement, Database)}. * * @param statement * the add column statement. * @param database * the database instance. * @param expected * the expected result from <code>supports</code>. */ @Test(dataProvider = "supportsTestData") public void testSupports(final AddColumnStatement statement, final Database database, final boolean expected) { final AddGeometryColumnGeneratorGeoDB generator = new AddGeometryColumnGeneratorGeoDB(); final boolean result = generator.supports(statement, database); assertEquals(result, expected); } /** * Provides test data to {@link #testSupports(AddColumnStatement, Database, boolean)}. * * @return the test data. */ @DataProvider public Object[][] supportsTestData() { final AddColumnStatement statement = new AddColumnStatement((String) null, null, null, null, null, null); return new Object[][] { new Object[] { statement, new DerbyDatabase(), true }, new Object[] { statement, new H2Database(), true }, new Object[] { statement, new OracleDatabase(), false }, }; } @Test(dataProvider = "generateSqlTestData") public void testGenerateSql(final AddColumnStatement statement, final Database database, final Sql[] expected) { final AddGeometryColumnGeneratorGeoDB generator = new AddGeometryColumnGeneratorGeoDB(); final SqlGeneratorChain sqlGeneratorChain = mock(SqlGeneratorChain.class); when(sqlGeneratorChain.generateSql(statement, database)).thenReturn(new Sql[0]); final Sql[] result = generator.generateSql(statement, database, sqlGeneratorChain); assertEquals(result.length, expected.length); if (result.length > 0) { for (int ii = 0; ii < result.length; ii++) { final Sql resultSql = result[ii]; final Sql expectedSql = expected[ii]; assertEquals(resultSql.toSql(), expectedSql.toSql()); } } } @DataProvider public Object[][] generateSqlTestData() { final Database database = new H2Database(); final AddColumnStatement notGeometry = new AddColumnStatement(null, null, null, null, "BOOLEAN", null); final AddColumnStatement nullSchema = new AddColumnStatement(null, null, "TEST", "COLUMN", "Geometry(Point, 4327)", null); final Sql nullSchemaExpected = new UnparsedSql("CALL AddGeometryColumn('" + database.getDefaultSchemaName() + "', 'TEST', 'COLUMN', 4327, 'Point', 2)"); final AddColumnStatement complete = new AddColumnStatement(null, database.getDefaultSchemaName(), "TEST", "COLUMN", "Geometry(Geometry,4326)", null); final Sql completeExpected = new UnparsedSql("CALL AddGeometryColumn('" + database.getDefaultSchemaName() + "', 'TEST', 'COLUMN', 4326, 'Geometry', 2)"); return new Object[][] { new Object[] { notGeometry, database, new Sql[0] }, new Object[] { nullSchema, database, new Sql[] { nullSchemaExpected } }, new Object[] { complete, database, new Sql[] { completeExpected } }, }; } }