package alien4cloud.it.csars;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.junit.Assert;
import alien4cloud.dao.model.GetMultipleDataResult;
import alien4cloud.it.Context;
import alien4cloud.model.git.CsarGitCheckoutLocation;
import alien4cloud.model.git.CsarGitRepository;
import alien4cloud.rest.csar.CreateCsarGitRequest;
import alien4cloud.rest.model.RestResponse;
import alien4cloud.rest.utils.JsonUtil;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class CsarGitCRUDStepDefinition {
@When("^I add a GIT repository with url \"(.*?)\" usr \"(.*?)\" pwd \"(.*?)\" stored \"(.*?)\" and locations$")
public void i_add_a_GIT_repository_with_url_usr_pwd_stored_and_locations(String url, String usr, String pwd, boolean stored,
List<CsarGitCheckoutLocation> locations) throws Throwable {
CreateCsarGitRequest request = new CreateCsarGitRequest();
request.setRepositoryUrl(url);
request.setUsername(usr);
request.setPassword(pwd);
request.setStoredLocally(stored);
request.setImportLocations(locations);
String response = Context.getRestClientInstance().postJSon("/rest/v1/csarsgit/", JsonUtil.toString(request));
Context.getInstance().registerRestResponse(response);
}
@When("^I list all the git repositories$")
public void i_list_all_the_git_repositories() throws Throwable {
String response = Context.getRestClientInstance().get("/rest/v1/csarsgit/");
Context.getInstance().registerRestResponse(response);
}
@Then("^I should have (\\d+) git repository in the list$")
public void i_should_have_git_repository_in_the_list(int repoGitCount) throws Throwable {
RestResponse<GetMultipleDataResult> response = JsonUtil.read(Context.getInstance().getRestResponse(), GetMultipleDataResult.class);
assertNull(response.getError());
assertNotNull(response.getData());
Assert.assertEquals(repoGitCount, response.getData().getTotalResults());
}
@Then("^I can find a GIT repository with url \"(.*?)\" usr \"(.*?)\" pwd \"(.*?)\" stored \"(.*?)\" and locations$")
public void i_can_find_a_GIT_repository_with_url_usr_pwd_stored_and_locations(String url, String usr, String pwd, boolean stored,
List<CsarGitCheckoutLocation> locations)
throws Throwable {
CsarGitRepository csarGitRepository = getCsarGitRepository(url);
Assert.assertNotNull(csarGitRepository);
// a comparator to sort CsarGitCheckoutLocation lists
Comparator<CsarGitCheckoutLocation> comparator = new Comparator<CsarGitCheckoutLocation>() {
@Override
public int compare(CsarGitCheckoutLocation o1, CsarGitCheckoutLocation o2) {
int bCompare = o1.getBranchId().compareTo(o2.getBranchId());
if (bCompare != 0) {
return bCompare;
} else {
return o1.getSubPath().compareTo(o2.getSubPath());
}
}
};
Assert.assertEquals(usr, csarGitRepository.getUsername());
Assert.assertEquals(pwd, csarGitRepository.getPassword());
Assert.assertEquals(stored, csarGitRepository.isStoredLocally());
Assert.assertEquals(locations.size(), csarGitRepository.getImportLocations().size());
Collections.sort(csarGitRepository.getImportLocations(), comparator);
// locations is unmodifiable
List<CsarGitCheckoutLocation> expectedlocations = new ArrayList<CsarGitCheckoutLocation>(locations);
Collections.sort(expectedlocations, comparator);
for (int i = 0; i < expectedlocations.size(); i++) {
CsarGitCheckoutLocation expected = expectedlocations.get(i);
CsarGitCheckoutLocation actual = csarGitRepository.getImportLocations().get(i);
Assert.assertEquals(actual.getBranchId(), expected.getBranchId());
Assert.assertEquals(actual.getSubPath(), expected.getSubPath());
}
}
private CsarGitRepository getCsarGitRepository(String url) throws Throwable {
RestResponse<GetMultipleDataResult> response = JsonUtil.read(Context.getInstance().getRestResponse(), GetMultipleDataResult.class);
assertNull(response.getError());
assertNotNull(response.getData());
for (Object object : response.getData().getData()) {
CsarGitRepository csarGitRepository = JsonUtil.readObject(JsonUtil.toString(object), CsarGitRepository.class);
if (csarGitRepository.getRepositoryUrl().equals(url)) {
return csarGitRepository;
}
}
return null;
}
@Given("^I get the GIT repo with url \"(.*?)\"$")
public void i_get_the_GIT_repo_with_url(String url) throws Throwable {
i_list_all_the_git_repositories();
CsarGitRepository csarGitRepository = getCsarGitRepository(url);
Context.getInstance().setCsarGitRepositoryId(csarGitRepository.getId());
}
@When("^I update the GIT repository with url \"(.*?)\" usr \"(.*?)\" pwd \"(.*?)\" stored \"(.*?)\" and locations$")
public void i_update_the_GIT_repository_with_url_usr_pwd_stored_and_locations(String url, String usr, String pwd, boolean stored,
List<CsarGitCheckoutLocation> locations)
throws Throwable {
CreateCsarGitRequest request = new CreateCsarGitRequest();
request.setRepositoryUrl(url);
request.setUsername(usr);
request.setPassword(pwd);
request.setStoredLocally(stored);
request.setImportLocations(locations);
String restUrl = String.format("/rest/v1/csarsgit/%s", Context.getInstance().getCsarGitRepositoryId());
String response = Context.getRestClientInstance().putJSon(restUrl, JsonUtil.toString(request));
Context.getInstance().registerRestResponse(response);
}
@When("^I delete the GIT repository$")
public void i_delete_the_GIT_repository() throws Throwable {
i_delete_the_GIT_repository_with_id(Context.getInstance().getCsarGitRepositoryId());
}
@When("^I import the GIT repository$")
public void i_import_the_GIT_repository() throws Throwable {
String restUrl = String.format("/rest/v1/csarsgit/%s", Context.getInstance().getCsarGitRepositoryId());
String response = Context.getRestClientInstance().postJSon(restUrl, "");
Context.getInstance().registerRestResponse(response);
}
@Given("^I get the GIT repository with id \"(.*?)\"$")
public void i_get_the_GIT_repository_with_id(String id) throws Throwable {
String restUrl = String.format("/rest/v1/csarsgit/%s", id);
String response = Context.getRestClientInstance().get(restUrl);
Context.getInstance().registerRestResponse(response);
}
@Given("^I delete the GIT repository with id \"(.*?)\"$")
public void i_delete_the_GIT_repository_with_id(String id) throws Throwable {
String restUrl = String.format("/rest/v1/csarsgit/%s", id);
String response = Context.getRestClientInstance().delete(restUrl);
Context.getInstance().registerRestResponse(response);
}
}