/
koskv
/
TeamSync-Tests
Обзор
Документация
Войти
/
koskv
/
TeamSync-Tests
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/TeamSyncTest/service/SwaggerService.java
143 строки
4 KB
Koskv
Add: Правка в кредах
12 ноя 2025, 17:41
12 ноя 2025, 17:41
b2ae559
Код
Авторство
О чём код?
package TeamSyncTest.service; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.response.Response; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.List; import java.util.Map; @Service @Slf4j public class SwaggerService { public String downloadSwaggerJson(String baseUrl) { String swaggerUrl = baseUrl + "/api/docs/swagger.json"; try { log.info("Downloading Swagger documentation from: {}", swaggerUrl); Response response = RestAssured .given() .contentType(ContentType.JSON) .accept(ContentType.JSON) .when() .get(swaggerUrl) .then() .statusCode(200) .extract() .response(); String swaggerJson = response.asString(); log.info("Successfully downloaded Swagger documentation, size: {} bytes", swaggerJson.length()); // Валидация базовой структуры validateSwaggerJson(swaggerJson); return swaggerJson; } catch (Exception e) { log.error("Failed to download Swagger documentation from: {}", swaggerUrl, e); throw new RuntimeException("Unable to download Swagger documentation: " + e.getMessage(), e); } } public Map<String, Object> getApiInfo(String baseUrl) { String infoUrl = baseUrl + "/api/docs/info"; return RestAssured .given() .contentType(ContentType.JSON) .when() .get(infoUrl) .then() .statusCode(200) .extract() .as(Map.class); } public boolean checkHealth(String baseUrl) { String healthUrl = baseUrl + "/api/docs/health"; try { Response response = RestAssured .given() .when() .get(healthUrl) .then() .extract() .response(); return response.statusCode() == 200; } catch (Exception e) { log.warn("Health check failed for: {}", healthUrl, e); return false; } } public List<Map<String, Object>> getTags(String baseUrl) { String tagsUrl = baseUrl + "/api/docs/tags"; return RestAssured .given() .contentType(ContentType.JSON) .when() .get(tagsUrl) .then() .statusCode(200) .extract() .as(List.class); } private void validateSwaggerJson(String swaggerJson) { try { ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(swaggerJson); // Проверяем обязательные поля OpenAPI if (!root.has("openapi")) { throw new RuntimeException("Invalid Swagger JSON: missing 'openapi' field"); } if (!root.has("info")) { throw new RuntimeException("Invalid Swagger JSON: missing 'info' field"); } if (!root.has("paths")) { throw new RuntimeException("Invalid Swagger JSON: missing 'paths' field"); } log.debug("Swagger JSON validation successful"); } catch (IOException e) { throw new RuntimeException("Invalid Swagger JSON format", e); } } public void waitForSwaggerAvailability(String baseUrl, long timeoutSeconds) { long endTime = System.currentTimeMillis() + (timeoutSeconds * 1000); while (System.currentTimeMillis() < endTime) { if (checkHealth(baseUrl)) { log.info("Swagger documentation is available"); return; } try { Thread.sleep(2000); // Wait 2 seconds before retry } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("Interrupted while waiting for Swagger", e); } } throw new RuntimeException("Swagger documentation not available after " + timeoutSeconds + " seconds"); } }