package eu.scape_project.planning.plato.wf;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.weld.context.bound.Bound;
import org.jboss.weld.context.bound.BoundConversationContext;
import org.jboss.weld.context.bound.MutableBoundRequest;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.scape_project.planning.annotation.IntegrationTest;
import eu.scape_project.planning.application.PlatoDeploymentBuilder;
import eu.scape_project.planning.exception.PlanningException;
import eu.scape_project.planning.model.Plan;
import eu.scape_project.planning.model.PlanState;
import eu.scape_project.planning.model.User;
import eu.scape_project.planning.validation.ValidationError;
@Category(IntegrationTest.class)
@RunWith(Arquillian.class)
public class FullPlanningworkflowIT {
private static final Logger log = LoggerFactory.getLogger(FullPlanningworkflowIT.class);
@Inject
@Bound
private BoundConversationContext conversationContext;
@Inject
private Instance<DefineBasis> defineBasisSource;
@Inject
private Instance<DefineSampleObjects> defineSampleObjectSource;
@Inject
private User user;
@Deployment
public static WebArchive createDeployment() {
WebArchive platoWar = PlatoDeploymentBuilder.createPlatoWebArchive();
platoWar.addClasses(AbstractWorkflowStep.class, DefineBasis.class, DefineAlternatives.class,
FullPlanningworkflowIT.class, DefineSampleObjects.class);
;
return platoWar;
}
@Test
public void test() throws PlanningException {
log.info("entering test");
conversationContext.associate(new MutableBoundRequest(new HashMap<String, Object>(),
new HashMap<String, Object>()));
conversationContext.activate();
Assert.assertTrue(conversationContext.isActive());
DefineBasis defineBasis = defineBasisSource.get();
Assert.assertNotNull(defineBasis);
Plan plan = new Plan();
plan.getPlanProperties().setName("Test Plan");
plan.getPlanProperties().setAuthor(user.getUsername());
plan.getPlanProperties().setOwner(user.getUsername());
defineBasis.init(plan);
Assert.assertNotNull(defineBasis.getPlan());
defineBasis.save();
log.info("stored plan");
List<ValidationError> errors = new ArrayList<ValidationError>();
Assert.assertTrue(defineBasis.proceed(errors));
Assert.assertEquals(PlanState.BASIS_DEFINED, plan.getPlanProperties().getState());
DefineSampleObjects defineSamples = defineSampleObjectSource.get();
defineSamples.init(plan);
Assert.assertFalse(defineSamples.proceed(errors));
Assert.assertTrue(errors.size() != 0);
for (ValidationError ve : errors) {
log.debug(ve.getMessage());
}
}
}