/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.control.server.plugin;
import net.codjo.agent.MessageTemplate;
import net.codjo.control.common.message.ControlJobRequest;
import net.codjo.control.common.message.SourceOfData;
import net.codjo.control.common.message.TransferJobRequest;
import net.codjo.workflow.common.message.JobRequest;
import net.codjo.workflow.common.message.ScheduleContract;
import net.codjo.workflow.server.api.ScheduleAgentTestCase;
/**
* Classe de test de {@link TransferScheduleAgent}.
*/
public class TransferScheduleAgentTest extends ScheduleAgentTestCase {
public static final String CONTROL = ControlServerPlugin.CONTROL_REQUEST_TYPE;
public static final String QUARANTINE_TRANSFER = ControlServerPlugin.QUARANTINE_TRANSFER_TYPE;
public void test_userToQuarantineWorkflow_step1Control() throws Exception {
record().startScheduleAgent(new TransferScheduleAgent());
record().startTester("schedule-leader-mock")
.sendMessage(createScheduleContractMessage(userToQuarantineContract("AP_Q_USER", "AP_Q")))
.then()
.play(receiveAndAcceptProposal())
.then()
.play(receiveResult(CONTROL,
matchControlQuarantine("AP_Q:" + SourceOfData.TRANSFERT_FROM_QUARANTINE)));
executeStory();
}
public void test_userToQuarantineWorkflow_step2BackToUser() throws Exception {
record().startScheduleAgent(new TransferScheduleAgent());
final ScheduleContract userToQuarantine = userToQuarantineContract("AP_Q_USER", "AP_Q");
record().startTester("schedule-leader-mock")
.sendMessage(createScheduleContractMessage(createContract("control", userToQuarantine)))
.then()
.play(receiveAndAcceptProposal())
.then()
.play(receiveResult(QUARANTINE_TRANSFER,
matchTransferRequest("quarantine-to-user, AP_Q, AP_Q_USER")));
executeStory();
}
public void test_userToQuarantineWorkflow() throws Exception {
record().startScheduleAgent(new TransferScheduleAgent());
final ScheduleContract userToQuarantine = userToQuarantineContract("AP_Q_USER", "AP_Q");
userToQuarantine.getRequest().setId("ID");
record().startTester("schedule-leader-mock")
.sendMessage(createScheduleContractMessage(userToQuarantine))
.then()
.play(receiveAndAcceptProposal())
.then()
.play(receiveResult(CONTROL,
matchControlQuarantine("AP_Q:" + SourceOfData.TRANSFERT_FROM_QUARANTINE)))
.then()
.sendMessage(createScheduleContractMessage(createContract("control", userToQuarantine)))
.then()
.play(receiveAndAcceptProposal())
.then()
.play(receiveResult(QUARANTINE_TRANSFER,
and(matchTransferRequest("quarantine-to-user, AP_Q, AP_Q_USER"),
matchId(null))));
executeStory();
}
private MessageTemplate matchId(String expectedId) {
return match(new AssertJobRequest("id", expectedId) {
@Override
protected String extractActual(JobRequest request) {
return request.getId();
}
});
}
private MessageTemplate matchTransferRequest(String expected) {
return match(new AssertJobRequest("transfert", expected) {
@Override
protected String extractActual(JobRequest request) {
TransferJobRequest transfert = new TransferJobRequest(request);
return transfert.getTransferType()
+ ", " + transfert.getQuarantine()
+ ", " + transfert.getUserQuarantine();
}
});
}
private MessageTemplate matchControlQuarantine(String expected) {
return match(new AssertJobRequest("quarantine", expected) {
@Override
protected String extractActual(JobRequest request) {
ControlJobRequest jobRequest = new ControlJobRequest(request);
return jobRequest.getQuarantineTable() + ":" + jobRequest.getPath();
}
});
}
private ScheduleContract userToQuarantineContract(String userQuarantine,
String quarantine) {
TransferJobRequest transferJobRequest = new TransferJobRequest();
transferJobRequest.setInitiatorLogin("user_tu");
transferJobRequest.setTransferType(TransferJobRequest.Transfer.USER_TO_QUARANTINE);
transferJobRequest.setQuarantine(quarantine);
transferJobRequest.setUserQuarantine(userQuarantine);
return createContract(transferJobRequest.toRequest());
}
}