package alien4cloud.it.components; import java.util.List; import java.util.Map; import java.util.Set; import org.alien4cloud.tosca.catalog.CatalogVersionResult; import org.apache.commons.collections4.CollectionUtils; import org.junit.Assert; import com.google.common.collect.Sets; import alien4cloud.dao.model.FacetedSearchResult; import alien4cloud.it.Context; import alien4cloud.rest.model.RestResponse; import alien4cloud.rest.utils.JsonUtil; import cucumber.api.java.en.Then; public class MixingComponentVersionsDefinitionsSteps { @Then("^The response should contains (\\d+) elements from various types of version \"([^\"]*)\" and older versions are$") public void The_response_should_contains_elements_from_various_types_of_version_and_older_versions_are(int expectedElementSize, String expectedVersion, List<String> expectedOlderVersions) throws Throwable { Set<String> expectedOlderVersionsSet = (expectedOlderVersions == null) ? null : Sets.newHashSet(expectedOlderVersions); SearchDefinitionSteps searchDefinitionSteps = new SearchDefinitionSteps(); searchDefinitionSteps.The_response_should_contains_elements_from_various_types(expectedElementSize); RestResponse<FacetedSearchResult> restResponse = JsonUtil.read(Context.getInstance().getRestResponse(), FacetedSearchResult.class); FacetedSearchResult searchResp = restResponse.getData(); Object[] elements = searchResp.getData(); for (int i = 0; i < expectedElementSize; i++) { Map<String, Object> element = (Map<String, Object>) elements[i]; Assert.assertEquals(expectedVersion, element.get("archiveVersion")); Set<String> actualOlderVersions = getComponentVersions((String) element.get("elementId")); actualOlderVersions.remove(expectedVersion); if (CollectionUtils.isEmpty(expectedOlderVersions)) { Assert.assertTrue(actualOlderVersions.isEmpty()); } else { Assert.assertEquals(expectedOlderVersionsSet, actualOlderVersions); } } } private Set<String> getComponentVersions(String elementId) throws Throwable { Set<String> versions = Sets.newHashSet(); String responseString = Context.getRestClientInstance().get("/rest/v1/components/element/" + elementId + "/versions"); RestResponse<?> response = JsonUtil.read(responseString); List<CatalogVersionResult> versionResults = JsonUtil.toList(JsonUtil.toString(response.getData()), CatalogVersionResult.class); for (CatalogVersionResult versionResult : versionResults) { versions.add(versionResult.getVersion()); } return versions; } @Then("^The response should contains (\\d+) elements from various types of version \"([^\"]*)\"$") public void The_response_should_contains_elements_from_various_types_of_version(int expectedElementSize, String expectedVersion) throws Throwable { The_response_should_contains_elements_from_various_types_of_version_and_older_versions_are(expectedElementSize, expectedVersion, null); } }