package alien4cloud.it.topology;
import static org.junit.Assert.*;
import java.util.List;
import java.util.Set;
import alien4cloud.it.Context;
import alien4cloud.paas.wf.AbstractStep;
import alien4cloud.paas.wf.Workflow;
import alien4cloud.rest.model.RestResponse;
import alien4cloud.rest.utils.JsonUtil;
import alien4cloud.topology.TopologyDTO;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class WorkflowStepDefinitions {
@Given("^I edit the workflow named \"(.*?)\"$")
public void i_edit_the_workflow_named(String workflowName) throws Throwable {
Context.getInstance().setCurrentWorkflowName(workflowName);
}
@When("^The workflow step \"(.*?)\" is followed by: (.*)$")
public void the_workflow_step_is_followed_by(String stepId, List<String> followers) throws Throwable {
String topologyResponseText = Context.getInstance().getRestResponse();
RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper());
String workflowName = Context.getInstance().getCurrentWorkflowName();
Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName);
AbstractStep step = workflow.getSteps().get(stepId);
Set<String> actualFollowers = step.getFollowingSteps();
assertNotNull(actualFollowers);
assertEquals(followers.size(), actualFollowers.size());
for (String expectedFollower : followers) {
// we just remove the surrounding quotes
String follower = expectedFollower.substring(1, expectedFollower.length() - 1);
assertTrue(actualFollowers.contains(follower));
}
}
@When("^The workflow step \"(.*?)\" is preceded by: (.*)$")
public void the_workflow_step_is_preceded_by(String stepId, List<String> predecesors) throws Throwable {
String topologyResponseText = Context.getInstance().getRestResponse();
RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper());
String workflowName = Context.getInstance().getCurrentWorkflowName();
Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName);
AbstractStep step = workflow.getSteps().get(stepId);
Set<String> actualPredecessors = step.getPrecedingSteps();
assertNotNull(actualPredecessors);
assertEquals(predecesors.size(), actualPredecessors.size());
for (String expectedPredecessor : predecesors) {
// we just remove the surrounding quotes
String predecessor = expectedPredecessor.substring(1, expectedPredecessor.length() - 1);
assertTrue(actualPredecessors.contains(predecessor));
}
}
@Then("^The workflow step \"(.*?)\" has no followers$")
public void the_workflow_step_has_no_followers(String stepId) throws Throwable {
String topologyResponseText = Context.getInstance().getRestResponse();
RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper());
String workflowName = Context.getInstance().getCurrentWorkflowName();
Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName);
AbstractStep step = workflow.getSteps().get(stepId);
assertTrue(step.getFollowingSteps() == null || step.getFollowingSteps().isEmpty());
}
@Then("^The workflow step \"(.*?)\" has no predecessors$")
public void the_workflow_step_has_no_predecessors(String stepId) throws Throwable {
String topologyResponseText = Context.getInstance().getRestResponse();
RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper());
String workflowName = Context.getInstance().getCurrentWorkflowName();
Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName);
AbstractStep step = workflow.getSteps().get(stepId);
assertTrue(step.getPrecedingSteps() == null || step.getPrecedingSteps().isEmpty());
}
@Then("^the workflow should exist in the topology and I start editing it$")
public void the_workflow_should_exist_in_the_topology_and_I_start_editing_it() throws Throwable {
String topologyId = Context.getInstance().getTopologyId();
RestResponse<Workflow> workflowResponse = JsonUtil.read(Context.getInstance().takeRestResponse(), Workflow.class, Context.getJsonMapper());
String workflowName = workflowResponse.getData().getName();
String topologyRestResponse = Context.getRestClientInstance().get("/rest/v1/topologies/" + topologyId);
RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyRestResponse, TopologyDTO.class, Context.getJsonMapper());
assertTrue(topologyResponse.getData().getTopology().getWorkflows().containsKey(workflowName));
Context.getInstance().setCurrentWorkflowName(workflowName);
}
}