package liquibase.database.core;
import static java.util.Arrays.*;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import liquibase.database.Database;
import liquibase.database.DatabaseConnection;
import liquibase.exception.DatabaseException;
import liquibase.executor.Executor;
import liquibase.executor.ExecutorService;
import liquibase.statement.SqlStatement;
import org.junit.Test;
public class SybaseDatabaseTest {
@Test
public void testIsSybaseProductName() {
SybaseDatabase database = new SybaseDatabase();
assertTrue("Sybase SQL Server is a valid product name", database.isSybaseProductName("Sybase SQL Server"));
assertTrue("sql server is a valid product name", database.isSybaseProductName("sql server"));
assertTrue("ASE is a valid product name", database.isSybaseProductName("ASE"));
assertTrue("Adaptive Server Enterprise is a valid product name", database.isSybaseProductName("Adaptive Server Enterprise"));
}
/**
* Configure the {@code Executor} associated with the provided {@code Database}
* to return the specified rows.
* @param database the database for which to configure an {@code Executor}
* @param viewInfoRows the rows to be returned by the {@code Executor}
*/
private void configureExecutor(Database database, String... viewInfoRows) {
Executor executor = createNiceMock(Executor.class);
try {
@SuppressWarnings("unchecked")
Class<String> stringClassMatcher = (Class<String>)anyObject();
expect(executor.queryForList((SqlStatement)anyObject(), stringClassMatcher)).andReturn(asList(viewInfoRows));
} catch (DatabaseException e) {
throw new RuntimeException(e);
}
replay(executor);
ExecutorService.getInstance().setExecutor(database, executor);
}
@Test
public void testGetViewDefinitionWhenNoRows() throws Exception {
SybaseDatabase database = new SybaseDatabase();
configureExecutor(database);
assertEquals("", database.getViewDefinition("dbo", "view_name"));
}
@Test
public void testGetViewDefinitionWhenSingleRow() throws Exception {
SybaseDatabase database = new SybaseDatabase();
configureExecutor(database, "foo");
assertEquals("foo", database.getViewDefinition("dbo", "view_name"));
}
@Test
public void testGetViewDefinitionWhenMultipleRows() throws Exception {
SybaseDatabase database = new SybaseDatabase();
configureExecutor(database, "foo", " bar", " bat");
assertEquals("foo bar bat", database.getViewDefinition("dbo", "view_name"));
}
@Test
public void testGetDatabaseMajorVersionWhenImplemented() throws Exception {
DatabaseConnection connection = createNiceMock(DatabaseConnection.class);
expect(connection.getDatabaseMajorVersion()).andReturn(15);
replay(connection);
SybaseDatabase database = new SybaseDatabase();
database.setConnection(connection);
assertEquals(15, database.getDatabaseMajorVersion());
}
@Test
public void testGetDatabaseMinorVersionWhenImplemented() throws Exception {
DatabaseConnection connection = createNiceMock(DatabaseConnection.class);
expect(connection.getDatabaseMinorVersion()).andReturn(5);
replay(connection);
SybaseDatabase database = new SybaseDatabase();
database.setConnection(connection);
assertEquals(5, database.getDatabaseMinorVersion());
}
@Test
public void testGetDatabaseMajorVersionWhenNotImplemented() throws Exception {
DatabaseConnection connection = createNiceMock(DatabaseConnection.class);
expect(connection.getDatabaseMajorVersion()).andThrow(new UnsupportedOperationException());
replay(connection);
SybaseDatabase database = new SybaseDatabase();
database.setConnection(connection);
assertEquals(-1, database.getDatabaseMajorVersion());
}
@Test
public void testGetDatabaseMinorVersionWhenNotImplemented() throws Exception {
DatabaseConnection connection = createNiceMock(DatabaseConnection.class);
expect(connection.getDatabaseMinorVersion()).andThrow(new UnsupportedOperationException());
replay(connection);
SybaseDatabase database = new SybaseDatabase();
database.setConnection(connection);
assertEquals(-1, database.getDatabaseMinorVersion());
}
}