package se.bjurr.prnfb.test.integration;
import static com.google.common.collect.Lists.newArrayList;
import static com.jayway.restassured.RestAssured.basic;
import static com.jayway.restassured.RestAssured.get;
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.when;
import static com.jayway.restassured.config.LogConfig.logConfig;
import static com.jayway.restassured.http.ContentType.JSON;
import static org.assertj.core.api.Assertions.fail;
import static org.hamcrest.Matchers.equalTo;
import static se.bjurr.prnfb.listener.PrnfbPullRequestAction.COMMENTED;
import static se.bjurr.prnfb.settings.USER_LEVEL.ADMIN;
import static se.bjurr.prnfb.settings.USER_LEVEL.EVERYONE;
import org.junit.Before;
import se.bjurr.prnfb.presentation.dto.ButtonDTO;
import se.bjurr.prnfb.presentation.dto.NotificationDTO;
import se.bjurr.prnfb.presentation.dto.SettingsDataDTO;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.builder.ResponseSpecBuilder;
import com.jayway.restassured.filter.log.LogDetail;
import com.jayway.restassured.response.Response;
public class PrnfbTestIntegration {
@Before
public void before() throws InterruptedException {
RestAssured.baseURI = "http://localhost:7990/bitbucket/rest/prnfb-admin/1.0";
RestAssured.authentication = basic("admin", "admin");
RestAssured.requestSpecification =
new RequestSpecBuilder() //
.log(LogDetail.ALL)
.build() //
.auth()
.preemptive()
.basic("admin", "admin") //
.accept(JSON) //
.contentType(JSON);
RestAssured.config()
.logConfig(
logConfig()
.enableLoggingOfRequestAndResponseIfValidationFails()
.enablePrettyPrinting(true));
RestAssured.responseSpecification =
new ResponseSpecBuilder() //
.build();
boolean startedOk = false;
int waitCount = 0;
while (!startedOk) {
try {
waitCount++;
if (waitCount > 90) {
fail("Giving up waiting for server to start!");
}
Response response = get("http://localhost:7990/bitbucket/").andReturn();
if (response.getStatusCode() == 200) {
startedOk = true;
}
} catch (Exception e) {
System.out.println("Waiting for Bitbucket to start");
Thread.sleep(1000);
}
}
}
// @Test
public void testThatButtonsCanBeStored() {
ButtonDTO buttonDto = new ButtonDTO();
buttonDto.setName("name");
buttonDto.setProjectKey("projectKey");
buttonDto.setRepositorySlug("repositorySlug");
buttonDto.setUserLevel(ADMIN);
String uuid =
given() //
.body(buttonDto) //
.when() //
.post("/settings/buttons") //
.then() //
.log()
.all() //
.extract()
.body()
.path("uuid");
when() //
.get("/settings/buttons/" + uuid) //
.then() //
.log()
.all() //
.body("name", equalTo("name")) //
.body("projectKey", equalTo("projectKey")) //
.body("repositorySlug", equalTo("repositorySlug")) //
.body("userLevel", equalTo(ADMIN.name()));
}
// @Test
public void testThatGlobalSettingsCanBeStored() {
SettingsDataDTO settingsData = new SettingsDataDTO();
settingsData.setAdminRestriction(ADMIN);
settingsData.setShouldAcceptAnyCertificate(false);
settingsData.setKeyStore("keyStore");
settingsData.setKeyStorePassword("keyStorePassword");
settingsData.setKeyStoreType("keyStoreType");
given() //
.body(settingsData) //
.when() //
.post("/settings") //
.then() //
.log()
.all();
when() //
.get("/settings") //
.then() //
.log()
.all() //
.body("shouldAcceptAnyCertificate", equalTo(false)) //
.body("adminRestriction", equalTo(ADMIN.name())) //
.body("keyStore", equalTo("keyStore")) //
.body("keyStorePassword", equalTo("keyStorePassword")) //
.body("keyStoreType", equalTo("keyStoreType"));
settingsData.setAdminRestriction(EVERYONE);
settingsData.setShouldAcceptAnyCertificate(true);
settingsData.setKeyStore("keyStore2");
settingsData.setKeyStorePassword("keyStorePassword2");
settingsData.setKeyStoreType("keyStoreType2");
given() //
.body(settingsData) //
.when() //
.post("/settings") //
.then() //
.log()
.all();
when() //
.get("/settings") //
.then() //
.log()
.all() //
.body("shouldAcceptAnyCertificate", equalTo(true)) //
.body("adminRestriction", equalTo(EVERYONE.name())) //
.body("keyStore", equalTo("keyStore2")) //
.body("keyStorePassword", equalTo("keyStorePassword2")) //
.body("keyStoreType", equalTo("keyStoreType2"));
}
// @Test
public void testThatNotificationsCanBeStored() {
NotificationDTO notificationDto = new NotificationDTO();
notificationDto.setName("name");
notificationDto.setTriggers(newArrayList(COMMENTED.name()));
notificationDto.setUrl("http://bjurr.se/");
String uuid =
given() //
.body(notificationDto) //
.when() //
.post("/settings/notifications") //
.then() //
.log()
.all() //
.extract()
.body()
.path("uuid");
when() //
.get("/settings/notifications/" + uuid) //
.then() //
.log()
.all() //
.body("name", equalTo("name")) //
.body("triggers[0]", equalTo(COMMENTED.name())) //
.body("url", equalTo("http://bjurr.se/"));
}
}