package net.codjo.dataprocess.server.dao; import net.codjo.database.common.api.JdbcFixture; import net.codjo.datagen.DatagenFixture; import net.codjo.dataprocess.common.DataProcessConstants; import net.codjo.dataprocess.common.context.DataProcessContext; import net.codjo.dataprocess.common.model.ExecutionListModel; import net.codjo.dataprocess.common.model.TreatmentModel; import net.codjo.dataprocess.server.util.TestUtils; import net.codjo.test.common.fixture.CompositeFixture; import net.codjo.tokio.TokioFixture; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static net.codjo.test.common.matcher.JUnitMatchers.*; /** * */ public class StatusDaoTest { private static final TokioFixture TOKIO = new TokioFixture(StatusDaoTest.class); private static final DatagenFixture DATAGEN = new DatagenFixture(StatusDaoTest.class); private static final CompositeFixture COMPOSITE_FIXTURE = new CompositeFixture(TOKIO, DATAGEN); @BeforeClass public static void beforeClass() throws Exception { COMPOSITE_FIXTURE.doSetUp(); final JdbcFixture jdbcFixture = TOKIO.getJdbcFixture(); jdbcFixture.advanced().dropAllObjects(); try { DATAGEN.generate(); TestUtils.initScript(jdbcFixture, DATAGEN, "PM_TREATMENT_STATUS.tab"); TestUtils.initScript(jdbcFixture, DATAGEN, "PM_EXECUTION_LIST_STATUS.tab"); } catch (Exception ex) { COMPOSITE_FIXTURE.doTearDown(); fail(ex.getLocalizedMessage()); } } @AfterClass public static void afterClass() throws Exception { COMPOSITE_FIXTURE.doTearDown(); } @Test public void fillExecutionListStatus() throws Exception { DataProcessContext context = new DataProcessContext(); TOKIO.executeQuery("delete PM_EXECUTION_LIST_STATUS"); Connection con = TOKIO.getConnection(); StatusDao statusDao = new StatusDao(); ExecutionListModel executionListModel1 = buildModel(con, 1, DataProcessConstants.TO_DO); statusDao.updateExecutionListStatus(con, executionListModel1, context, DataProcessConstants.FAILED, true); assertThat(DataProcessConstants.FAILED, equalTo(statusDao.getExecutionListStatus(con, executionListModel1))); ExecutionListModel executionListModel2 = buildModel(con, 2, DataProcessConstants.TO_DO); statusDao.updateExecutionListStatus(con, executionListModel2, context, DataProcessConstants.FAILED, false); assertThat(DataProcessConstants.FAILED, equalTo(statusDao.getExecutionListStatus(con, executionListModel2))); ExecutionListModel executionListModel3 = buildModel(con, 3, DataProcessConstants.DONE); statusDao.updateExecutionListStatus(con, executionListModel3, context, DataProcessConstants.FAILED, true); assertThat(DataProcessConstants.FAILED, equalTo(statusDao.getExecutionListStatus(con, executionListModel3))); ExecutionListModel executionListModel4 = buildModel(con, 4, DataProcessConstants.DONE); statusDao.updateExecutionListStatus(con, executionListModel4, context, DataProcessConstants.FAILED, false); assertThat(DataProcessConstants.FAILED, equalTo(statusDao.getExecutionListStatus(con, executionListModel4))); ExecutionListModel executionListModel5 = buildModel(con, 5, DataProcessConstants.FAILED); statusDao.updateExecutionListStatus(con, executionListModel5, context, DataProcessConstants.DONE, true); assertThat(DataProcessConstants.DONE, equalTo(statusDao.getExecutionListStatus(con, executionListModel5))); ExecutionListModel executionListModel6 = buildModel(con, 6, DataProcessConstants.FAILED); statusDao.updateExecutionListStatus(con, executionListModel6, context, DataProcessConstants.DONE, false); assertThat(DataProcessConstants.FAILED, equalTo(statusDao.getExecutionListStatus(con, executionListModel6))); } @Test public void fillTreatmentStatus() throws Exception { TOKIO.insertInputInDb("STATUS"); TreatmentModel treatmentModel = new TreatmentModel(); treatmentModel.setId("MON_TRAITEMENT"); ExecutionListModel execListModel = buildModel(TOKIO.getConnection(), 15, DataProcessConstants.TO_DO); ExecutionListModel execListModel2 = buildModel(TOKIO.getConnection(), 44, DataProcessConstants.TO_DO); ExecutionListModel execListModel3 = buildModel(TOKIO.getConnection(), 98, DataProcessConstants.TO_DO); DataProcessContext context = new DataProcessContext(); StatusDao statusDao = new StatusDao(); statusDao.updateTreatmentStatus(TOKIO.getConnection(), execListModel, treatmentModel, context, DataProcessConstants.TO_DO, "Tout est OK"); statusDao.updateTreatmentStatus(TOKIO.getConnection(), execListModel2, treatmentModel, context, DataProcessConstants.DONE, "Miam les pommes"); statusDao.updateTreatmentStatus(TOKIO.getConnection(), execListModel3, treatmentModel, context, DataProcessConstants.DONE, "Miam les poires"); TOKIO.assertAllOutputs("STATUS"); } private static ExecutionListModel buildModel(Connection con, int id, int status) throws SQLException { ExecutionListModel trtMod = new ExecutionListModel(); trtMod.setId(id); trtMod.setStatus(status); PreparedStatement stmt = con.prepareStatement("delete PM_EXECUTION_LIST_STATUS " + "insert into PM_EXECUTION_LIST_STATUS (EXECUTION_LIST_ID, STATUS) values (?, ?)"); try { stmt.setInt(1, id); stmt.setInt(2, status); stmt.execute(); return trtMod; } finally { stmt.close(); } } }