package alien4cloud.it.topology; import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import java.util.Map; import org.apache.commons.lang3.ArrayUtils; import com.fasterxml.jackson.databind.ObjectMapper; import alien4cloud.it.Context; import org.alien4cloud.tosca.model.types.NodeType; import org.alien4cloud.tosca.model.templates.NodeTemplate; import org.alien4cloud.tosca.model.templates.RelationshipTemplate; import alien4cloud.rest.model.RestResponse; import alien4cloud.rest.utils.JsonUtil; import alien4cloud.topology.TopologyDTO; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import lombok.extern.slf4j.Slf4j; @Slf4j public class NodeTemplateStepDefinitions { private TopologyStepDefinitions topoSteps = new TopologyStepDefinitions(); private ObjectMapper jsoMapper = Context.getInstance().getJsonMapper(); @When("^I ask for replacements for the node \"([^\"]*)\"$") public void I_ask_for_replacements_for_the_node(String nodeTemplateName) throws Throwable { String topologyId = Context.getInstance().getTopologyId(); Context.getInstance().registerRestResponse( Context.getRestClientInstance().get("/rest/latest/editor/" + topologyId + "/nodetemplates/" + nodeTemplateName + "/replacementhelper")); } @Then("^the possible replacements nodes types should be$") public void the_possible_replacements_nodes_types_should_be(List<String> expectedElementIds) throws Throwable { NodeType[] replacements = JsonUtil.read(Context.getInstance().getRestResponse(), NodeType[].class).getData(); assertNotNull(replacements); String[] elementIds = topoSteps.getElementsId(replacements); assertEquals(expectedElementIds.size(), elementIds.length); String[] expectedArrayElementIds = expectedElementIds.toArray(new String[expectedElementIds.size()]); Arrays.sort(expectedArrayElementIds); Arrays.sort(elementIds); assertArrayEquals(expectedArrayElementIds, elementIds); } @Then("^the possible replacements nodes types should be \"([^\"]*)\"$") public void the_possible_replacements_nodes_types_should_be(String expectedElementId) throws Throwable { NodeType[] replacements = JsonUtil.read(Context.getInstance().getRestResponse(), NodeType[].class).getData(); assertNotNull(replacements); assertEquals(1, replacements.length); assertEquals(expectedElementId, replacements[0].getElementId()); } @Then("^I should not have the relationship \"([^\"]*)\" in \"([^\"]*)\" node template$") public void I_should_not_have_a_relationship_in_node_template(String relName, String nodeTempName) throws Throwable { String topologyJson = Context.getRestClientInstance().get("/rest/v1/topologies/" + Context.getInstance().getTopologyId()); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyJson, TopologyDTO.class, Context.getJsonMapper()); NodeTemplate sourceNode = topologyResponse.getData().getTopology().getNodeTemplates().get(nodeTempName); Map<String, RelationshipTemplate> rels = sourceNode.getRelationships(); if (rels != null) { assertFalse(rels.containsKey(relName)); } else { log.info("No relationship found in I_should_not_have_a_relationship_in_node_template(String relName, String nodeTempName)"); } } @Then("^there should be the followings in replacements nodes types$") public void there_should_be_the_followings_in_replacements_nodes_types(List<String> expectedElementIds) throws Throwable { NodeType[] replacements = JsonUtil.read(Context.getInstance().getRestResponse(), NodeType[].class).getData(); assertNotNull(replacements); String[] elementIds = topoSteps.getElementsId(replacements); String[] expectedElementIdsArray = expectedElementIds.toArray(new String[expectedElementIds.size()]); for (String expected : expectedElementIdsArray) { assertTrue(ArrayUtils.contains(elementIds, expected)); } } }