package api; import io.restassured.RestAssured; import io.restassured.builder.RequestSpecBuilder; import io.restassured.filter.log.LogDetail; import io.restassured.filter.log.ResponseLoggingFilter; import io.restassured.http.ContentType; import model.AuthToken; import model.Status; import model.Ticket; import org.testng.annotations.BeforeClass; import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Random; import java.util.UUID; import static io.restassured.RestAssured.given; /** Абстрактный класс, содержащий общие для всех тестов методы */ public abstract class BaseTest { @BeforeClass public void prepare() throws IOException{ System.getProperties().load(ClassLoader.getSystemResourceAsStream("config.properties")); String baseUri = System.getProperty("base.uri"); if (baseUri == null || baseUri.isEmpty()) { throw new RuntimeException("В файле \"config.properties\" отсутствует значение \"base.uri\""); } RestAssured.requestSpecification = new RequestSpecBuilder() .setBaseUri(baseUri) .setAccept(ContentType.JSON) .setContentType(ContentType.JSON) .log(LogDetail.ALL) .build(); RestAssured.filters(new ResponseLoggingFilter()); } protected AuthToken login() { String username = System.getProperty("username"); if (username == null || username.isEmpty()) { throw new RuntimeException("В файле \"config.properties\" отсутствует значение \"username\""); } String password = System.getProperty("password"); if (password == null || password.isEmpty()) { throw new RuntimeException("В файле \"config.properties\" отсутствует значение \"password\""); } AuthToken auth = new AuthToken(); auth.setUsername(username); auth.setPassword(password); AuthToken actual = given() .body(auth) .when() .post("/api/login") .then() .statusCode(200) .extract().as(AuthToken.class); auth.setToken(actual.getToken()); return auth; } protected Ticket buildNewTicket(Status status, int priority) { LocalDateTime now = LocalDateTime.now(); Random random = new Random(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); Ticket ticket = new Ticket(); String title = "Проверка rest-assured " + UUID.randomUUID(); String secret_key = UUID.randomUUID().toString(); boolean on_hold = random.nextBoolean(); String due_date = now.format(formatter); int queue = 1; //ticket.setDue_date(due_date); ticket.setAssigned_to("admin"); ticket.setTitle(title); ticket.setStatus(status.getCode()); ticket.setPriority(priority); ticket.setSecret_key(secret_key); ticket.setOn_hold(on_hold); ticket.setQueue(queue); return ticket; } protected Ticket createTicket(Ticket ticket) { AuthToken authToken = login(); String token = authToken.getToken(); Ticket actual = given() .header("Authorization", "Token " + token) .body(ticket) .when() .post("/api/tickets") .then() .statusCode(201) .extract().as(Ticket.class); return actual; } }