diff --git a/src/test/java/school/redrover/api/APIFreestyleProjectTest.java b/src/test/java/school/redrover/api/APIFreestyleProjectTest.java index 15cf0e3fa..17d43f8e4 100644 --- a/src/test/java/school/redrover/api/APIFreestyleProjectTest.java +++ b/src/test/java/school/redrover/api/APIFreestyleProjectTest.java @@ -10,6 +10,9 @@ import java.util.HashMap; import java.util.Map; +import static school.redrover.common.TestUtils.requestSpec; +import static school.redrover.common.TestUtils.responseSpec; + public class APIFreestyleProjectTest extends APIBaseTest { private static final String PROJECT_NAME = "FreestyleProject"; @@ -38,33 +41,25 @@ public void testCreateWithValidName() { projectName.put("name", PROJECT_NAME); RestAssured.given() - .log().all() - .auth().preemptive().basic(userName, apiToken) - .baseUri(jenkinsUrl) + .spec(requestSpec()) .contentType(ContentType.XML) .queryParams(projectName) .body(bodyXML) .when() .post("/createItem") .then() - .log().all() - .statusCode(200); + .spec(responseSpec(200, 1500L)); Response response = RestAssured.given() - .log().all() - .auth().preemptive().basic(userName, apiToken) - .baseUri(jenkinsUrl) + .spec(requestSpec()) .when() .get("job/%s/api/json".formatted(projectName.get("name"))) .then() - .log().all() + .spec(responseSpec(200, 1500L)) .extract().response(); String actualProjectName = response.jsonPath().getString("name"); Assert.assertEquals(actualProjectName, projectName.get("name")); - - Integer statusCode = response.getStatusCode(); - Assert.assertEquals(statusCode, 200); } @Test @@ -73,39 +68,30 @@ public void testRenameProject() { projectName.put("name", PROJECT_NAME); RestAssured.given() - .log().all() - .auth().preemptive().basic(userName, apiToken) - .baseUri(jenkinsUrl) + .spec(requestSpec()) .contentType(ContentType.XML) .queryParams(projectName) .body(bodyXML) .when() .post("/createItem") .then() - .log().all() - .statusCode(200); + .spec(responseSpec(200, 1500L)); RestAssured.given() - .log().all() - .auth().preemptive().basic(userName, apiToken) - .baseUri(jenkinsUrl) + .spec(requestSpec()) .contentType("application/x-www-form-urlencoded") .queryParam("newName", NEW_PROJECT_NAME) .when() .post("job/%s/confirmRename".formatted(projectName.get("name"))) .then() - .log().all() - .statusCode(302); + .spec(responseSpec(302, 1500L)); Response response = RestAssured.given() - .log().all() - .auth().preemptive().basic(userName, apiToken) - .baseUri(jenkinsUrl) + .spec(requestSpec()) .when() .get("job/%s/api/json".formatted(NEW_PROJECT_NAME)) .then() - .log().all() - .statusCode(200) + .spec(responseSpec(200, 1500L)) .extract().response(); String actualProjectName = response.jsonPath().getString("name"); diff --git a/src/test/java/school/redrover/common/APIBaseTest.java b/src/test/java/school/redrover/common/APIBaseTest.java index 46fde6647..e502f5524 100644 --- a/src/test/java/school/redrover/common/APIBaseTest.java +++ b/src/test/java/school/redrover/common/APIBaseTest.java @@ -12,9 +12,9 @@ public abstract class APIBaseTest { protected String jenkinsUrl; - protected String userName; protected String apiToken; protected String tokenUuid; + protected String userName = ProjectUtils.getUserName(); @BeforeClass protected void setUpApi() { @@ -22,11 +22,8 @@ protected void setUpApi() { Log.info("Generate API token for tests"); jenkinsUrl = ProjectUtils.getUrl(); - userName = ProjectUtils.getUserName(); - - JenkinsUtils.ApiToken token = JenkinsUtils.generateApiToken("api-test-token-" + System.currentTimeMillis()); - apiToken = token.value; - tokenUuid = token.uuid; + apiToken = JenkinsUtils.getApiTokenValue(); + tokenUuid = JenkinsUtils.getApiTokenUuid(); } @BeforeMethod diff --git a/src/test/java/school/redrover/common/JenkinsUtils.java b/src/test/java/school/redrover/common/JenkinsUtils.java index f3efdf504..546b97145 100644 --- a/src/test/java/school/redrover/common/JenkinsUtils.java +++ b/src/test/java/school/redrover/common/JenkinsUtils.java @@ -29,6 +29,9 @@ private JenkinsUtils() { throw new UnsupportedOperationException(); } + private record ApiToken(String name, String value, String uuid) { + } + private static String getCrumbFromPage(String page) { final String CRUMB_TAG = "data-crumb-value=\""; @@ -229,6 +232,10 @@ private static void deleteSystemMessage() { getCrumbFromPage(mainPage))); } + private synchronized static ApiToken getApiToken() { + return generateApiToken("api-test-token-" + System.currentTimeMillis()); + } + static void clearData() { JenkinsUtils.deleteViews(); JenkinsUtils.deleteJobs(); @@ -255,19 +262,15 @@ public static void logout(WebDriver driver) { driver.get(ProjectUtils.getUrl() + "logout"); } - public static class ApiToken { - public final String name; - public final String value; - public final String uuid; + public synchronized static String getApiTokenValue() { + return getApiToken().value(); + } - public ApiToken(String name, String value, String uuid) { - this.name = name; - this.value = value; - this.uuid = uuid; - } + public synchronized static String getApiTokenUuid() { + return getApiToken().uuid(); } - static ApiToken generateApiToken(String tokenName) { + private static ApiToken generateApiToken(String tokenName) { String mainPage = getPage(""); String crumb = getCrumbFromPage(mainPage); diff --git a/src/test/java/school/redrover/common/TestUtils.java b/src/test/java/school/redrover/common/TestUtils.java new file mode 100644 index 000000000..eb6fb1a6a --- /dev/null +++ b/src/test/java/school/redrover/common/TestUtils.java @@ -0,0 +1,36 @@ +package school.redrover.common; + +import io.restassured.builder.RequestSpecBuilder; +import io.restassured.builder.ResponseSpecBuilder; +import io.restassured.filter.log.LogDetail; +import io.restassured.specification.RequestSpecification; +import io.restassured.specification.ResponseSpecification; + +import static io.restassured.RestAssured.preemptive; +import static org.hamcrest.Matchers.lessThan; + +public class TestUtils { + + public static RequestSpecification requestSpec() { + return new RequestSpecBuilder() + .setAuth(preemptive().basic(ProjectUtils.getUserName(), JenkinsUtils.getApiTokenValue())) + .setBaseUri(ProjectUtils.getUrl()) + .log(LogDetail.ALL) + .build(); + } + + public static ResponseSpecification responseSpec(Integer statusCode, Long responseTime) { + return new ResponseSpecBuilder() + .expectStatusCode(statusCode) + .expectResponseTime(lessThan(responseTime)) + .log(LogDetail.ALL) + .build(); + } + + public static ResponseSpecification responseSpec() { + return new ResponseSpecBuilder() + .log(LogDetail.ALL) + .build(); + } + +}