added tests API for /api/user

This commit is contained in:
Kirill Saigin 2025-07-03 01:35:00 +04:00
parent 77c036f7df
commit 6ddef79444
11 changed files with 461 additions and 0 deletions

View file

@ -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}");
}
}

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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);
}
}

View file

@ -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")));
}
}

View file

@ -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();
}
}

View file

@ -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());
}
}