SQLCloseResourcesTest.java

package org.dashbuilder.dataprovider.sql;

import org.dashbuilder.dataprovider.sql.dialect.Dialect;
import org.dashbuilder.dataprovider.sql.model.Column;
import org.dashbuilder.dataprovider.sql.model.Select;
import org.dashbuilder.dataset.DataSetLookup;
import org.dashbuilder.dataset.DataSetLookupFactory;
import org.dashbuilder.dataset.def.SQLDataSetDef;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Arrays;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@RunWith(PowerMockRunner.class)
@PrepareForTest(JDBCUtils.class)
public class SQLCloseResourcesTest {

    @Mock
    Connection connection;

    @Mock
    Statement statement;

    @Mock
    ResultSet resultSet;

    @Mock
    Dialect dialect;

    @Mock
    Select select;

    @Mock
    SQLDataSourceLocator dataSourceLocator;

    @Mock
    DataSource dataSource;

    @Mock
    ResultSetMetaData metaData;

    SQLDataSetProvider sqlDataSetProvider;
    ResultSetHandler resultSetHandler;
    SQLDataSetDef dataSetDef = new SQLDataSetDef();

    @Before
    public void setUp() throws Exception {
        resultSetHandler = new ResultSetHandler(resultSet, statement);
        dataSetDef.setDataSource("test");
        dataSetDef.setDbSQL("test");

        sqlDataSetProvider = SQLDataSetProvider.get();
        sqlDataSetProvider.setDataSourceLocator(dataSourceLocator);
        when(dataSourceLocator.lookup(any(SQLDataSetDef.class))).thenReturn(dataSource);
        when(dataSource.getConnection()).thenReturn(connection);

        PowerMockito.mockStatic(JDBCUtils.class);
        when(JDBCUtils.dialect(connection)).thenReturn(dialect);
        when(JDBCUtils.executeQuery(any(Connection.class), any())).thenReturn(resultSetHandler);
    }

    @Test
    public void testGetColumns() throws Exception {
        sqlDataSetProvider._getColumns(dataSetDef, connection);
        verify(statement).close();
        verify(resultSet).close();
    }

    @Test
    public void testLookup() throws Exception {
        DataSetLookup dataSetLookup = DataSetLookupFactory.newDataSetLookupBuilder()
                .column("column1")
                .buildLookup();

        when(JDBCUtils.getColumns(resultSet, null)).thenReturn(Arrays.asList(new Column("column1")));
        sqlDataSetProvider.lookupDataSet(dataSetDef, dataSetLookup);
        verify(resultSet, times(3)).close();
        verify(statement, times(3)).close();
        verify(connection).close();
    }
}