/*
* Copyright 2015 herd contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.finra.herd.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.finra.herd.dao.impl.MockJdbcOperations;
import org.finra.herd.model.api.xml.JdbcConnection;
import org.finra.herd.model.api.xml.JdbcDatabaseType;
import org.finra.herd.model.api.xml.JdbcExecutionRequest;
import org.finra.herd.model.api.xml.JdbcStatement;
import org.finra.herd.model.api.xml.JdbcStatementType;
@Component
public class JdbcServiceTestHelper
{
/**
* Creates a default test JDBC connection which is guaranteed to work. The connection points to the in-memory database setup as part of DAO mocks.
*
* @return a valid JDBC connection
*/
public JdbcConnection createDefaultJdbcConnection()
{
JdbcConnection jdbcConnection = new JdbcConnection();
jdbcConnection.setUrl("jdbc:h2:mem:herdTestDb");
jdbcConnection.setUsername("");
jdbcConnection.setPassword("");
jdbcConnection.setDatabaseType(JdbcDatabaseType.POSTGRES);
return jdbcConnection;
}
/**
* Creates a default JDBC execution request which is guaranteed to work. The request contains a single statement of QUERY type.
*
* @return a valid JDBC request
*/
public JdbcExecutionRequest createDefaultQueryJdbcExecutionRequest()
{
JdbcConnection jdbcConnection = createDefaultJdbcConnection();
List<JdbcStatement> jdbcStatements = createDefaultQueryJdbcStatements();
JdbcExecutionRequest jdbcExecutionRequest = createJdbcExecutionRequest(jdbcConnection, jdbcStatements);
return jdbcExecutionRequest;
}
/**
* Creates a default JDBC execution request which is guaranteed to work. The request contains a single statement of UPDATE type.
*
* @return a valid JDBC request
*/
public JdbcExecutionRequest createDefaultUpdateJdbcExecutionRequest()
{
JdbcConnection jdbcConnection = createDefaultJdbcConnection();
List<JdbcStatement> jdbcStatements = createDefaultUpdateJdbcStatements();
JdbcExecutionRequest jdbcExecutionRequest = createJdbcExecutionRequest(jdbcConnection, jdbcStatements);
return jdbcExecutionRequest;
}
/**
* Creates a JDBC request with the specified values.
*
* @param jdbcConnection JDBC connection
* @param jdbcStatements JDBC statements
*
* @return an execution request.
*/
public JdbcExecutionRequest createJdbcExecutionRequest(JdbcConnection jdbcConnection, List<JdbcStatement> jdbcStatements)
{
JdbcExecutionRequest jdbcExecutionRequest = new JdbcExecutionRequest();
jdbcExecutionRequest.setConnection(jdbcConnection);
jdbcExecutionRequest.setStatements(jdbcStatements);
return jdbcExecutionRequest;
}
/**
* Returns a valid list of JDBC QUERY statements.It contains only 1 statement, and the statement is CASE_1_SQL in mock JDBC (success, result 1)
*
* @return list of statements
*/
private List<JdbcStatement> createDefaultQueryJdbcStatements()
{
List<JdbcStatement> jdbcStatements = new ArrayList<>();
{
JdbcStatement jdbcStatement = new JdbcStatement();
jdbcStatement.setType(JdbcStatementType.QUERY);
jdbcStatement.setSql(MockJdbcOperations.CASE_1_SQL);
jdbcStatements.add(jdbcStatement);
}
return jdbcStatements;
}
/**
* Returns a valid list of JDBC UPDATE statements. It contains only 1 statement, and the statement is CASE_1_SQL in mock JDBC (success, result 1)
*
* @return list of statements.
*/
private List<JdbcStatement> createDefaultUpdateJdbcStatements()
{
List<JdbcStatement> jdbcStatements = new ArrayList<>();
{
JdbcStatement jdbcStatement = new JdbcStatement();
jdbcStatement.setType(JdbcStatementType.UPDATE);
jdbcStatement.setSql(MockJdbcOperations.CASE_1_SQL);
jdbcStatements.add(jdbcStatement);
}
return jdbcStatements;
}
}