/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.server.kernel;
import net.codjo.database.common.api.structure.SqlTable;
import net.codjo.dataprocess.common.DataProcessConstants;
import net.codjo.dataprocess.common.context.DataProcessContext;
import net.codjo.dataprocess.common.model.ArgList;
import net.codjo.dataprocess.common.model.ArgModel;
import net.codjo.dataprocess.common.model.TreatmentModel;
import net.codjo.tokio.TokioFixture;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static net.codjo.test.common.matcher.JUnitMatchers.*;
/**
*
*/
public class SqlTreatmentTest {
private TokioFixture fixture = new TokioFixture(getClass());
@Before
public void before() throws Exception {
fixture.doSetUp();
fixture.getJdbcFixture().advanced().dropAllObjects();
}
@After
public void after() throws Exception {
fixture.doTearDown();
}
private void createTableTest() throws SQLException {
fixture.getJdbcFixture().create(SqlTable.temporaryTable("T_TEMP"),
"CODE_PORTEFEUILLE varchar(20) null, QUANTITE numeric(25,5) default 0 null");
}
@Test
public void proceedTreatment() throws Exception {
String sqlQuery = "insert into #T_TEMP (CODE_PORTEFEUILLE, QUANTITE) values (?, ?)";
DataProcessContext context = new DataProcessContext();
context.setProperty("portfolioCode", "MIMI");
createTableTest();
fixture.insertInputInDb("SqlTreatment");
ArgList argList = new ArgList();
TreatmentModel treatmentModel = new TreatmentModel();
treatmentModel.setTarget(sqlQuery);
treatmentModel.setType(DataProcessConstants.SQL_QUERY_TYPE);
argList.setArgs(buildArgsForQuery());
treatmentModel.setArguments(argList);
AbstractTreatment abstractTreatment =
TreatmentFactory.buildTreatment(fixture.getConnection(), treatmentModel, 0, null);
abstractTreatment.configure(context);
Object result = abstractTreatment.proceedTreatment(context);
assertThat(result instanceof Integer, equalTo(true));
if (result instanceof Integer) {
assertThat((Integer)result, equalTo(1));
}
fixture.assertAllOutputs("SqlTreatment");
}
@Test
public void proceedTreatmentEmpty() throws Exception {
DataProcessContext context = new DataProcessContext();
ArgList argList = new ArgList();
TreatmentModel treatmentModel = new TreatmentModel();
treatmentModel.setTarget(" ");
treatmentModel.setType(DataProcessConstants.SQL_QUERY_TYPE);
argList.setArgs(buildArgsForQuery());
treatmentModel.setArguments(argList);
AbstractTreatment abstractTreatment =
TreatmentFactory.buildTreatment(fixture.getConnection(), treatmentModel, 0, null);
abstractTreatment.configure(context);
Object result = abstractTreatment.proceedTreatment(context);
assertThat(result instanceof Integer, equalTo(true));
if (result instanceof Integer) {
assertThat((Integer)result, equalTo(0));
}
}
private static List<ArgModel> buildArgsForQuery() {
List<ArgModel> list = new ArrayList<ArgModel>();
list.add(new ArgModel("CODE_PORTEFEUILLE", "$portfolioCode$", 1, Types.VARCHAR));
list.add(new ArgModel("QUANTITE", "0.12345", 2, Types.NUMERIC));
return list;
}
}