/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.server.kernel; import net.codjo.database.common.api.JdbcFixture; 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 SqlTreatmentWithResultTest { 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(); } @Test public void proceedTreatment() throws Exception { createTableTest(); DataProcessContext context = new DataProcessContext(); context.setProperty("separator_value", ", "); context.setProperty("quote_value", "\""); context.setProperty("column_value", "true"); ArgList argList = new ArgList(); TreatmentModel treatmentModel = new TreatmentModel(); treatmentModel.setTarget("select * from #T_TEMP"); treatmentModel.setType(DataProcessConstants.SQL_QUERY_TYPE_WITH_RESULT); argList.setArgs(buildArgsForExport()); treatmentModel.setArguments(argList); AbstractTreatment abstractTreatment = TreatmentFactory.buildTreatment(fixture.getConnection(), treatmentModel, 1, null); abstractTreatment.configure(context); Object result = abstractTreatment.proceedTreatment(context); assertThat(result instanceof String, equalTo(true)); assertThat(result.toString(), equalTo( "\"CODE_PORTEFEUILLE\", \"QUANTITE\"\n\"CP1\", \"10.00000\"\n\"CP2\", \"20.00000\"\n")); } @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_WITH_RESULT); argList.setArgs(buildArgsForExport()); treatmentModel.setArguments(argList); AbstractTreatment abstractTreatment = TreatmentFactory.buildTreatment(fixture.getConnection(), treatmentModel, 1, null); abstractTreatment.configure(context); Object result = abstractTreatment.proceedTreatment(context); assertThat(result instanceof String, equalTo(true)); assertThat(result.toString(), equalTo("")); } @Test public void getTemporaryTables() { String fakeSql = "select #table_temp.mon_champs, '#tatata' from #table_temp inner join #table_temp2 " + "on #table_temp.champ1 = #table_temp2.champ1"; SqlTreatmentWithResult sqlTreatmentWithResult = new SqlTreatmentWithResult(); List<String> result = sqlTreatmentWithResult.getTemporaryTables(fakeSql); assertThat(result.toString(), equalTo("[#table_temp, #table_temp2]")); } private void createTableTest() throws SQLException { JdbcFixture jdbcFixture = fixture.getJdbcFixture(); jdbcFixture.create(SqlTable.temporaryTable("T_TEMP"), "CODE_PORTEFEUILLE varchar(20) null, QUANTITE numeric(25,5) default 0 null"); jdbcFixture.executeUpdate("insert into #T_TEMP (CODE_PORTEFEUILLE, QUANTITE) values('CP1', 10)"); jdbcFixture.executeUpdate("insert into #T_TEMP (CODE_PORTEFEUILLE, QUANTITE) values('CP2', 20)"); } private static List<ArgModel> buildArgsForExport() { List<ArgModel> list = new ArrayList<ArgModel>(); list.add(new ArgModel("[separator]", "$separator_value$", 1, Types.VARCHAR)); list.add(new ArgModel("[quote]", "$quote_value$", 2, Types.VARCHAR)); list.add(new ArgModel("[with_column_header]", "true", 3, Types.VARCHAR)); return list; } }