From 1d0a105339b3df794f78cfb268bf0f540a81e456 Mon Sep 17 00:00:00 2001 From: Elena-Galina Date: Mon, 2 Feb 2026 01:03:29 +0300 Subject: [PATCH 1/2] AT | API test > MultiConfigurationProjectTest - Create-Rename-Delete --- .../api/MultiConfigurationProjectTest.java | 70 +++++++++++++++++++ .../school/redrover/common/APIBaseTest.java | 58 ++++++++++++++- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/test/java/school/redrover/api/MultiConfigurationProjectTest.java diff --git a/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java b/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java new file mode 100644 index 000000000..447f0cf01 --- /dev/null +++ b/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java @@ -0,0 +1,70 @@ +package school.redrover.api; + +import io.restassured.response.Response; +import org.testng.Assert; +import org.testng.annotations.Test; +import school.redrover.common.APIBaseTest; + +public class MultiConfigurationProjectTest extends APIBaseTest { + + private static final String PROJECT_NAME = "MultiConfigProject"; + + private static final String bodyXML = """ + + false + + + false + false + false + false + + false + + + + + + false + + + """; + + @Test + public void testCreateProject() { + Response createdResponse = createProject(PROJECT_NAME, bodyXML); + Assert.assertEquals(createdResponse.statusCode(), 200); + + String actualProjectName = getProjectName(PROJECT_NAME); + Assert.assertEquals(actualProjectName, PROJECT_NAME); + + Integer actualStatusCode = getProject(PROJECT_NAME).statusCode(); + Assert.assertEquals(actualStatusCode, 200); + } + + @Test() + public void testDeleteProject() { + createProject(PROJECT_NAME, bodyXML); + String createdProjectName = getProjectName(PROJECT_NAME); + + Response deletedResponse = deleteProject(createdProjectName); + Assert.assertEquals(deletedResponse.statusCode(), 302); + + Integer deletedProjectStatusCode = getProject(createdProjectName).statusCode(); + Assert.assertEquals(deletedProjectStatusCode, 404, "Not found"); + } + + @Test() + public void testRenameProject() { + String newProjectName = "MultiConfig"; + + createProject(PROJECT_NAME, bodyXML); + String projectName = getProjectName(PROJECT_NAME); + + Response renamedResponse = renameProject(projectName, newProjectName); + Assert.assertEquals(renamedResponse.statusCode(), 302); + + String actualProjectName = getProjectName(newProjectName); + Assert.assertEquals(actualProjectName, newProjectName); + } +} diff --git a/src/test/java/school/redrover/common/APIBaseTest.java b/src/test/java/school/redrover/common/APIBaseTest.java index 46fde6647..3d3e92dc8 100644 --- a/src/test/java/school/redrover/common/APIBaseTest.java +++ b/src/test/java/school/redrover/common/APIBaseTest.java @@ -1,6 +1,8 @@ package school.redrover.common; import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import io.restassured.response.Response; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; @@ -8,6 +10,8 @@ import school.redrover.common.logging.RestAssuredLogFilter; import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; public abstract class APIBaseTest { @@ -41,4 +45,56 @@ protected void tearDownApi() { Log.info("Delete API token"); JenkinsUtils.deleteApiTokenByUuid(jenkinsUrl, tokenUuid, apiToken); } -} + + public Response createProject(String name, String bodyXML) { + Map projectName = new HashMap<>(); + projectName.put("name", name); + + return RestAssured.given() + .auth().preemptive().basic(userName, apiToken) + .baseUri(jenkinsUrl) + .contentType(ContentType.XML) + .queryParams(projectName) + .body(bodyXML) + .when() + .post("/createItem") + .then() + .extract().response(); + } + + public Response getProject(String projectName) { + return RestAssured.given() + .auth().preemptive().basic(userName, apiToken) + .baseUri(jenkinsUrl) + .when() + .get("/job/%s/api/json".formatted(projectName)) + .then() + .extract().response(); + } + + public String getProjectName(String projectName) { + return getProject(projectName) + .jsonPath().getString("name"); + } + + public Response deleteProject(String projectName) { + return RestAssured.given() + .auth().preemptive().basic(userName, apiToken) + .baseUri(jenkinsUrl) + .when() + .post("/job/%s/doDelete".formatted(projectName)) + .then() + .extract().response(); + } + + public Response renameProject(String projectName, String newProjectName) { + return RestAssured.given() + .auth().preemptive().basic(userName, apiToken) + .baseUri(jenkinsUrl) + .queryParams("newName", newProjectName) + .when() + .post("/job/%s/confirmRename".formatted(projectName)) + .then() + .extract().response(); + } +} \ No newline at end of file From ffb4ed5ca5ee44831dfabd80307d2d863ec8b7e5 Mon Sep 17 00:00:00 2001 From: Elena-Galina Date: Mon, 2 Feb 2026 15:01:45 +0300 Subject: [PATCH 2/2] AT | API test > MultiConfigurationProjectTest - Create-Rename-Delete --- .../api/MultiConfigurationProjectTest.java | 19 +++++++++++-------- .../school/redrover/common/APIBaseTest.java | 5 ----- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java b/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java index 447f0cf01..3211c7e60 100644 --- a/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java +++ b/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java @@ -35,17 +35,18 @@ public void testCreateProject() { Response createdResponse = createProject(PROJECT_NAME, bodyXML); Assert.assertEquals(createdResponse.statusCode(), 200); - String actualProjectName = getProjectName(PROJECT_NAME); - Assert.assertEquals(actualProjectName, PROJECT_NAME); + Response getProjectResponse = getProject(PROJECT_NAME); + Assert.assertEquals(getProjectResponse.statusCode(), 200); - Integer actualStatusCode = getProject(PROJECT_NAME).statusCode(); - Assert.assertEquals(actualStatusCode, 200); + String actualProjectName = getProjectResponse.jsonPath().getString("name"); + Assert.assertEquals(actualProjectName, PROJECT_NAME); } @Test() public void testDeleteProject() { createProject(PROJECT_NAME, bodyXML); - String createdProjectName = getProjectName(PROJECT_NAME); + String createdProjectName = getProject(PROJECT_NAME) + .jsonPath().getString("name"); Response deletedResponse = deleteProject(createdProjectName); Assert.assertEquals(deletedResponse.statusCode(), 302); @@ -59,12 +60,14 @@ public void testRenameProject() { String newProjectName = "MultiConfig"; createProject(PROJECT_NAME, bodyXML); - String projectName = getProjectName(PROJECT_NAME); + String createdProjectName = getProject(PROJECT_NAME) + .jsonPath().getString("name"); - Response renamedResponse = renameProject(projectName, newProjectName); + Response renamedResponse = renameProject(createdProjectName, newProjectName); Assert.assertEquals(renamedResponse.statusCode(), 302); - String actualProjectName = getProjectName(newProjectName); + String actualProjectName = getProject(newProjectName) + .jsonPath().getString("name"); Assert.assertEquals(actualProjectName, newProjectName); } } diff --git a/src/test/java/school/redrover/common/APIBaseTest.java b/src/test/java/school/redrover/common/APIBaseTest.java index 3d3e92dc8..31d8c0d4f 100644 --- a/src/test/java/school/redrover/common/APIBaseTest.java +++ b/src/test/java/school/redrover/common/APIBaseTest.java @@ -72,11 +72,6 @@ public Response getProject(String projectName) { .extract().response(); } - public String getProjectName(String projectName) { - return getProject(projectName) - .jsonPath().getString("name"); - } - public Response deleteProject(String projectName) { return RestAssured.given() .auth().preemptive().basic(userName, apiToken)