diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..d35136a
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,145 @@
+
+
+ 4.0.0
+
+ org.example
+ Test
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+ UTF-8
+ 1.9.23
+ 1.18.36
+ 5.5.1
+ 7.10.2
+ 2.29.1
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+
+
+
+ io.qameta.allure
+ allure-maven
+ 2.15.2
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+
+ -javaagent:"${settings.localRepository}"/org/aspectj/aspectjweaver/1.9.23/aspectjweaver-1.9.23.jar
+
+
+
+ src/test/resources/suites/tests.xml
+
+
+
+
+
+
+
+
+
+
+ io.qameta.allure
+ allure-bom
+ ${allure.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.testng
+ testng
+ ${testng.version}
+ test
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+
+ io.rest-assured
+ rest-assured
+ ${rest.assured.version}
+ test
+
+
+
+
+ io.qameta.allure
+ allure-testng
+ test
+
+
+
+ io.qameta.allure
+ allure-rest-assured
+ test
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.18.3
+
+
+
+
+ org.aspectj
+ aspectjweaver
+ ${aspectj.version}
+ runtime
+
+
+
+
+ com.codeborne
+ selenide
+ 7.6.1
+
+
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ 0.2.0
+
+
+
+
diff --git a/src/test/java/endpoints/UserEndpoint.java b/src/test/java/endpoints/UserEndpoint.java
new file mode 100644
index 0000000..c5eb784
--- /dev/null
+++ b/src/test/java/endpoints/UserEndpoint.java
@@ -0,0 +1,73 @@
+package endpoints;
+
+import helpers.PropertyProvider;
+import io.qameta.allure.Step;
+import io.restassured.response.Response;
+import io.restassured.specification.RequestSpecification;
+import pojo.UserRequest;
+
+import static io.restassured.RestAssured.given;
+
+public class UserEndpoint {
+ private static final String ENDPOINT = PropertyProvider.getProperty("endpoint.user");
+
+ @Step("Создание запроса о информации пользователя")
+ public static UserRequest addUser() {
+ return UserRequest.builder()
+ .id(PropertyProvider.getProperty("test.id"))
+ .username(PropertyProvider.getProperty("test.username"))
+ .firstName(PropertyProvider.getProperty("test.firstname"))
+ .lastName(PropertyProvider.getProperty("test.lastname"))
+ .email(PropertyProvider.getProperty("test.email"))
+ .build();
+ }
+
+ @Step("Добавить информацию о пользователе и вернуть его ID")
+ public static Response addUserId(RequestSpecification spec, UserRequest userRequest) {
+ return given(spec)
+ .body(userRequest)
+ .when()
+ .post(ENDPOINT)
+ .then()
+ .statusCode(200)
+ .extract().response();
+ }
+
+ @Step("Получить информацию о текущем пользователе")
+ public static Response getUser(RequestSpecification spec) {
+ return given(spec)
+ .when()
+ .get(ENDPOINT);
+ }
+
+ @Step("Получить информацию о пользователе по ID: {userId}")
+ public static Response getUserById(RequestSpecification spec, String userId) {
+ return given(spec)
+ .pathParam("id", userId)
+ .when()
+ .get(ENDPOINT + "/{id}");
+ }
+
+ @Step("Обновить информацию о пользователе: {user}")
+ public static Response updateUser(RequestSpecification spec, UserRequest userRequest) {
+ return given(spec)
+ .body(userRequest)
+ .when()
+ .put(ENDPOINT);
+ }
+
+ @Step("Удалить текущего пользователя")
+ public static Response deleteUser(RequestSpecification spec) {
+ return given(spec)
+ .when()
+ .delete(ENDPOINT);
+ }
+
+ @Step("Удалить пользователя по ID: {userId}")
+ public static Response deleteUserById(RequestSpecification spec, String userId) {
+ return given(spec)
+ .pathParam("id", userId)
+ .when()
+ .delete(ENDPOINT + "/{id}");
+ }
+}
diff --git a/src/test/java/helpers/PropertyProvider.java b/src/test/java/helpers/PropertyProvider.java
new file mode 100644
index 0000000..6647b88
--- /dev/null
+++ b/src/test/java/helpers/PropertyProvider.java
@@ -0,0 +1,26 @@
+package helpers;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class PropertyProvider {
+ private static final Properties properties = new Properties();
+ private static final String CONFIG_FILE = "config.properties";
+
+ static {
+ try (InputStream input = PropertyProvider.class.getClassLoader().getResourceAsStream(CONFIG_FILE)) {
+ if (input == null) {
+ throw new RuntimeException("Не найден файл конфигурации" + CONFIG_FILE);
+ }
+ properties.load(input);
+ } catch (IOException e) {
+ throw new RuntimeException("Ошибка загрузки конфигурационного файла", e);
+ }
+ }
+
+ public static String getProperty(String key) {
+ return properties.getProperty(key);
+ }
+}
+
diff --git a/src/test/java/helpers/Specifications.java b/src/test/java/helpers/Specifications.java
new file mode 100644
index 0000000..e8525d2
--- /dev/null
+++ b/src/test/java/helpers/Specifications.java
@@ -0,0 +1,23 @@
+package helpers;
+
+import io.qameta.allure.restassured.AllureRestAssured;
+import io.restassured.RestAssured;
+import io.restassured.builder.RequestSpecBuilder;
+import io.restassured.http.ContentType;
+import io.restassured.specification.RequestSpecification;
+
+public class Specifications {
+ protected static final String BASE_URL = PropertyProvider.getProperty("base.url");
+
+ public static RequestSpecification initRequestSpecification(String authToken) {
+ RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+ RequestSpecBuilder requestSpecBuilder = new RequestSpecBuilder();
+ requestSpecBuilder
+ .setBaseUri(BASE_URL)
+ .setContentType(ContentType.JSON)
+ .setAccept(ContentType.JSON)
+ .addHeader("Authorization", "Bearer " + authToken)
+ .addFilter(new AllureRestAssured());
+ return requestSpecBuilder.build();
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/pojo/UserRequest.java b/src/test/java/pojo/UserRequest.java
new file mode 100644
index 0000000..d33650c
--- /dev/null
+++ b/src/test/java/pojo/UserRequest.java
@@ -0,0 +1,19 @@
+package pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+
+public class UserRequest {
+ private String id;
+ private String username;
+ private String firstName;
+ private String lastName;
+ private String email;
+}
diff --git a/src/test/java/tests/BaseTest.java b/src/test/java/tests/BaseTest.java
new file mode 100644
index 0000000..b12ebd8
--- /dev/null
+++ b/src/test/java/tests/BaseTest.java
@@ -0,0 +1,33 @@
+package tests;
+
+import endpoints.UserEndpoint;
+import helpers.PropertyProvider;
+import helpers.Specifications;
+import io.restassured.specification.RequestSpecification;
+import org.testng.annotations.*;
+import pojo.UserRequest;
+
+import java.io.IOException;
+
+public class BaseTest {
+ protected static RequestSpecification spec;
+ protected static String authToken;
+ protected static UserRequest testUserRequest;
+ protected String addUserId;
+
+ @BeforeClass
+ public void setupTestData() {
+ authToken = PropertyProvider.getProperty("auth.token");
+ }
+
+ @BeforeMethod
+ public void setup() throws IOException {
+ spec = Specifications.initRequestSpecification(authToken);
+ }
+
+ @AfterMethod
+ public void tearDown() {
+ UserEndpoint.deleteUserById(spec, addUserId);
+ }
+}
+
diff --git a/src/test/java/tests/GetAndDeleteUserTest.java b/src/test/java/tests/GetAndDeleteUserTest.java
new file mode 100644
index 0000000..9c681f2
--- /dev/null
+++ b/src/test/java/tests/GetAndDeleteUserTest.java
@@ -0,0 +1,59 @@
+package tests;
+
+import endpoints.UserEndpoint;
+import helpers.PropertyProvider;
+import io.qameta.allure.Epic;
+import io.qameta.allure.Feature;
+import org.testng.annotations.Test;
+import org.testng.asserts.SoftAssert;
+
+import static org.hamcrest.Matchers.equalTo;
+
+@Epic("Управление сценариями GET")
+public class GetAndDeleteUserTest extends BaseTest {
+
+ @Feature("Сценарий с GET")
+ @Test(description = "Проверить, информацию о текущем пользователе и удалить текущего пользователя.")
+ public void testGetCurrentAndDeleteUser() {
+
+ var request = UserEndpoint.addUser();
+ addUserId = request.getId();
+
+ UserEndpoint.addUserId(spec, request);
+
+ var response = UserEndpoint.getUser(spec);
+ response
+ .then()
+ .statusCode(200)
+ .body("username", equalTo(PropertyProvider.getProperty("test.username")),
+ "firstName", equalTo(PropertyProvider.getProperty("test.firstname")),
+ "lastName", equalTo(PropertyProvider.getProperty("test.lastname")),
+ "email", equalTo(PropertyProvider.getProperty("test.email")));
+
+ UserEndpoint.deleteUser(spec)
+ .then()
+ .statusCode(200);
+ }
+
+ @Test(description = "Проверить, информацию пользователя по его ID {userId} и удалить по ID")
+ public void testGetUserById() {
+ var softAssert = new SoftAssert();
+
+ var request = UserEndpoint.addUser();
+ addUserId = request.getId();
+
+ UserEndpoint.addUserId(spec, request);
+
+ var userId = PropertyProvider.getProperty("test.id");
+ var response = UserEndpoint.getUserById(spec, userId);
+
+ softAssert.assertNotNull(userId, "ID пользователя не должен быть нулевым");
+ softAssert.assertFalse(userId.trim().isEmpty(), "ID пользователя не должен быть пустым");
+
+ response
+ .then()
+ .statusCode(200)
+ .body("id", equalTo(userId),
+ "username", equalTo(PropertyProvider.getProperty("test.username")));
+ }
+}
diff --git a/src/test/java/tests/PostUserTest.java b/src/test/java/tests/PostUserTest.java
new file mode 100644
index 0000000..701e8c1
--- /dev/null
+++ b/src/test/java/tests/PostUserTest.java
@@ -0,0 +1,22 @@
+package tests;
+
+import endpoints.UserEndpoint;
+import io.qameta.allure.Epic;
+import io.qameta.allure.Feature;
+import org.testng.annotations.Test;
+
+@Epic("POST")
+public class PostUserTest extends BaseTest {
+
+ @Feature("Сценарий с POST")
+ @Test(description = "Проверить создание нового пользователя и его удаление")
+ public void testAddUserSuccessfully() {
+ var request = UserEndpoint
+ .addUser();
+
+ var response = UserEndpoint.addUserId(spec, request);
+
+ addUserId = response.asString();
+ }
+}
+
diff --git a/src/test/java/tests/PutUserTest.java b/src/test/java/tests/PutUserTest.java
new file mode 100644
index 0000000..919ef34
--- /dev/null
+++ b/src/test/java/tests/PutUserTest.java
@@ -0,0 +1,41 @@
+package tests;
+
+import endpoints.UserEndpoint;
+import io.qameta.allure.Epic;
+import io.qameta.allure.Feature;
+import org.testng.annotations.Test;
+import pojo.UserRequest;
+
+@Epic("PUT")
+public class PutUserTest extends BaseTest{
+
+ @Feature("Сценарий с PUT (создание - обновление - удаление)")
+ @Test(description = "Проверить, обновление информации о текущем пользователе и удалить его")
+ public void testUpdateUser() {
+
+ var request = UserEndpoint.
+ addUser();
+ addUserId = request.getId();
+
+ UserEndpoint
+ .addUserId(spec, request);
+
+ var updateUser = UserRequest.builder()
+ .username("itc1205" + request.getUsername())
+ .firstName("Kamil" + request.getFirstName())
+ .lastName("Vonuchka" + request.getLastName())
+ .email("kamilka@mail.ru" + request.getEmail())
+ .build();
+
+ UserEndpoint.updateUser(spec, updateUser)
+ .then()
+ .statusCode(200);
+
+ UserEndpoint.getUser(spec)
+ .then()
+ .statusCode(200);
+ //эти проверки нужны будут потом
+// .body("firstName", equalTo(updateUser.getFirstName()),
+// "email", equalTo(updateUser.getEmail());
+ }
+}
diff --git a/src/test/resources/config.properties b/src/test/resources/config.properties
new file mode 100644
index 0000000..3842187
--- /dev/null
+++ b/src/test/resources/config.properties
@@ -0,0 +1,9 @@
+base.url=https://6c61743f-4c3c-4db0-bd41-75698e213f2c.mock.pstmn.io
+auth.token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30
+test.id=35790af5-b2fc-2bbd-5d7c-3f83e7f0645f
+test.username=ivan1205
+test.firstname=Ivan
+test.lastname=Aksenov
+test.email=itc@ya.ru
+
+endpoint.user = /api/user
\ No newline at end of file
diff --git a/src/test/resources/suites/tests.xml b/src/test/resources/suites/tests.xml
new file mode 100644
index 0000000..107bac3
--- /dev/null
+++ b/src/test/resources/suites/tests.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+