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..3211c7e60
--- /dev/null
+++ b/src/test/java/school/redrover/api/MultiConfigurationProjectTest.java
@@ -0,0 +1,73 @@
+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);
+
+ Response getProjectResponse = getProject(PROJECT_NAME);
+ Assert.assertEquals(getProjectResponse.statusCode(), 200);
+
+ String actualProjectName = getProjectResponse.jsonPath().getString("name");
+ Assert.assertEquals(actualProjectName, PROJECT_NAME);
+ }
+
+ @Test()
+ public void testDeleteProject() {
+ createProject(PROJECT_NAME, bodyXML);
+ String createdProjectName = getProject(PROJECT_NAME)
+ .jsonPath().getString("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 createdProjectName = getProject(PROJECT_NAME)
+ .jsonPath().getString("name");
+
+ Response renamedResponse = renameProject(createdProjectName, newProjectName);
+ Assert.assertEquals(renamedResponse.statusCode(), 302);
+
+ 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 46fde6647..31d8c0d4f 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,51 @@ 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 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