Package liquibase.database.core

Source Code of liquibase.database.core.MSSQLDatabaseTest

package liquibase.database.core;

import static org.easymock.classextension.EasyMock.*;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import liquibase.database.AbstractJdbcDatabaseTest;
import liquibase.database.Database;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.DatabaseException;

import static org.junit.Assert.*;
import org.junit.Test;

/**
* Tests for {@link MSSQLDatabase}
*/
public class MSSQLDatabaseTest extends AbstractJdbcDatabaseTest {

    public MSSQLDatabaseTest() throws Exception {
        super(new MSSQLDatabase());
    }

    @Override
    protected String getProductNameString() {
        return "Microsoft SQL Server";
    }


    @Override
    @Test
    public void supportsInitiallyDeferrableColumns() {
        assertFalse(getDatabase().supportsInitiallyDeferrableColumns());
    }

    @Override
    @Test
    public void getCurrentDateTimeFunction() {
        assertEquals("GETDATE()", getDatabase().getCurrentDateTimeFunction());
    }

    @Test
    public void getDefaultDriver() {
        Database database = new MSSQLDatabase();

        assertEquals("com.microsoft.sqlserver.jdbc.SQLServerDriver", database.getDefaultDriver("jdbc:sqlserver://localhost;databaseName=liquibase"));

        assertNull(database.getDefaultDriver("jdbc:oracle:thin://localhost;databaseName=liquibase"));
    }

    @Override
    @Test
    public void escapeTableName_noSchema() {
        Database database = new MSSQLDatabase();
        assertEquals("[tableName]", database.escapeTableName(null, null, "tableName"));
    }

    @Override
    @Test
    public void escapeTableName_withSchema() {
        Database database = new MSSQLDatabase();
        assertEquals("[schemaName].[tableName]", database.escapeTableName("catalogName", "schemaName", "tableName"));
    }

    @Test
    public void changeDefaultSchema() throws DatabaseException {
        Database database = new MSSQLDatabase();
        assertNull(database.getDefaultSchemaName());

        database.setDefaultSchemaName("myschema");
        assertEquals("myschema", database.getDefaultSchemaName());
    }
   
    private Database getADatabaseWithCollation( final String collation ) throws DatabaseException, SQLException {
    Database database = getDatabase();
    JdbcConnection connection = createMock(JdbcConnection.class);
    expect(connection.getConnectionUserName()).andReturn("user").anyTimes();
    expect(connection.getURL()).andReturn("URL").anyTimes();
    expect(connection.getAutoCommit()).andReturn(getDatabase().getAutoCommitMode()).anyTimes();

    Connection sqlConnection = createMock(Connection.class);
    Statement statement = createMock(Statement.class);
    ResultSet resultSet = createMock(ResultSet.class);
    ResultSetMetaData metadata = createMock(ResultSetMetaData.class);

    expect(connection.getUnderlyingConnection()).andReturn(sqlConnection).anyTimes();
    expect( sqlConnection.createStatement()).andReturn(statement);
    expect( statement.executeQuery("SELECT CONVERT(varchar(100), SERVERPROPERTY('COLLATION'))")).andReturn(resultSet);
    expect( resultSet.next() ).andReturn(true);
    expect( resultSet.getMetaData() ).andReturn(metadata);
    expect( metadata.getColumnCount() ).andReturn(1);
    expect( resultSet.getString(1)).andReturn(collation);
    expect( resultSet.next() ).andReturn(false);

    connection.attached(database);
    replay(connection, sqlConnection, statement, resultSet, metadata);
    database.setConnection(connection);
    return database;
    }
   
    @Test
    public void caseSensitiveBinaryCollation() throws Exception {
      Database database =  getADatabaseWithCollation("Latin1_General_BIN");
      assertTrue( "Should be case sensitive", database.isCaseSensitive() );
    }

    @Test
    public void caseSensitiveCICollation() throws Exception {
      Database database = getADatabaseWithCollation("Latin1_General_CI_AI");
      assertFalse( "Should be case insensitive", database.isCaseSensitive() );
    }
    @Test
    public void caseSensitiveCSCollation() throws Exception {
      Database database =getADatabaseWithCollation("Latin1_General_CS_AI");     
      assertTrue( "Should be case sensitive", database.isCaseSensitive() );
    }
}
TOP

Related Classes of liquibase.database.core.MSSQLDatabaseTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.