package net.codjo.control.server.plugin;
import net.codjo.aspect.AspectManager;
import net.codjo.control.common.loader.ApplicationIP;
import net.codjo.control.common.loader.IntegrationDefinition;
import net.codjo.control.common.loader.TransfertData;
import net.codjo.control.common.message.TransferJobRequest;
import net.codjo.database.common.api.DatabaseFactory;
import net.codjo.database.common.api.JdbcFixture;
import net.codjo.sql.server.JdbcServiceUtilMock;
import net.codjo.test.common.LogString;
import net.codjo.workflow.common.message.JobAudit;
import net.codjo.workflow.server.api.JobAgent;
import net.codjo.workflow.server.api.JobAgentTestCase;
import java.sql.SQLException;
public class TransferJobAgentTest extends JobAgentTestCase {
private static final String QUARANTINE = "AP_QUARANTINE";
private static final String USER_QUARANTINE = "AP_USER_QUARANTINE";
private ApplicationIP applicationIP = new ApplicationIP();
private JdbcFixture jdbc;
@Override
protected void doSetUp() throws Exception {
jdbc = new DatabaseFactory().createJdbcFixture();
jdbc.doSetUp();
}
@Override
protected void doTearDown() throws Exception {
jdbc.doTearDown();
}
public void test_executeQuarantineToUserTransfer() throws Exception {
createTable(QUARANTINE);
insertInto(QUARANTINE, "with Error", "5", "1");
insertInto(QUARANTINE, "no Error", "0", "2");
createTable(USER_QUARANTINE);
applicationIP.addIntegrationDefinition(
createDefinition(new TransfertData(QUARANTINE, USER_QUARANTINE)));
TransferJobRequest transferRequest = new TransferJobRequest();
transferRequest.setTransferType(TransferJobRequest.Transfer.QUARANTINE_TO_USER);
transferRequest.setQuarantine(QUARANTINE);
transferRequest.setUserQuarantine(USER_QUARANTINE);
record().startJobAgent(createJobAgent());
record().startTester("tester")
.sendMessage(createJobRequestMessage(transferRequest.toRequest()))
.then()
.receiveMessage(hasAuditType(JobAudit.Type.PRE))
.then()
.receiveMessage(hasAuditType(JobAudit.Type.POST))
.assertReceivedMessage(hasAuditStatus(JobAudit.Status.OK));
executeStory();
jdbc.assertContent(net.codjo.database.common.api.structure.SqlTable.table(QUARANTINE), new String[][]{
{"no Error", "0", "2"}
});
jdbc.assertContent(net.codjo.database.common.api.structure.SqlTable.table(USER_QUARANTINE),
new String[][]{
{"with Error", "5", "1"}
});
}
public void test_executeUserToQuarantineTransfer() throws Exception {
createTable(QUARANTINE);
createTable(USER_QUARANTINE);
insertInto(USER_QUARANTINE, "non trait�", "5", "1");
insertInto(USER_QUARANTINE, "corrig�", "0", "2");
applicationIP.addIntegrationDefinition(
createDefinition(new TransfertData(QUARANTINE, USER_QUARANTINE)));
TransferJobRequest transferRequest = new TransferJobRequest();
transferRequest.setTransferType(TransferJobRequest.Transfer.USER_TO_QUARANTINE);
transferRequest.setQuarantine(QUARANTINE);
transferRequest.setUserQuarantine(USER_QUARANTINE);
record().startJobAgent(createJobAgent());
record().startTester("tester")
.sendMessage(createJobRequestMessage(transferRequest.toRequest()))
.then()
.receiveMessage(hasAuditType(JobAudit.Type.PRE))
.then()
.receiveMessage(hasAuditType(JobAudit.Type.POST))
.assertReceivedMessage(hasAuditStatus(JobAudit.Status.OK));
executeStory();
jdbc.assertContent(net.codjo.database.common.api.structure.SqlTable.table(USER_QUARANTINE),
new String[][]{
{"non trait�", "5", "1"}
});
jdbc.assertContent(net.codjo.database.common.api.structure.SqlTable.table(QUARANTINE), new String[][]{
{"corrig�", "0", null}
});
}
private void insertInto(String tableName, String content, String errorType, String id)
throws SQLException {
jdbc.executeUpdate("insert into " + tableName
+ " values ("
+ "'" + content + "'"
+ ", " + errorType + ""
+ ", " + id + ""
+ ")");
}
private void createTable(String tableName) throws SQLException {
jdbc.create(net.codjo.database.common.api.structure.SqlTable.table(tableName),
"CONTENT varchar(255) null"
+ ", ERROR_TYPE int null, QUARANTINE_ID int null");
}
@Override
protected JobAgent createJobAgent() throws Exception {
return new TransferJobAgent(new JdbcServiceUtilMock(new LogString(), jdbc),
new ControlPreference(applicationIP, new AspectManager()));
}
@Override
protected String getServiceType() throws Exception {
return ControlServerPlugin.QUARANTINE_TRANSFER_TYPE;
}
private IntegrationDefinition createDefinition(TransfertData transfert) {
IntegrationDefinition integrationDefinition = new IntegrationDefinition();
integrationDefinition.setTransfert(transfert);
return integrationDefinition;
}
}