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