Description
I'm submitting a ...
[x] bug report
[ ] feature request
What is the current behavior?
PropertyConditionPredicate выбрасывает NPE при попытке доступа к properties пустой Schema во время анализа покрытия. Ошибка возникает потому что SwaggerCoverageV3RestAssured создает Schema без инициализации properties, а PropertyConditionPredicate предполагает что properties всегда инициализированы.
If the current behavior is a bug, please provide steps to reproduce:
Использовать фильтр SwaggerCoverageV3RestAssured с REST-assured:RestAssured.given().filter(new SwaggerCoverageV3RestAssured())
Сделать любой запрос с телом
Попытаться сгенерировать отчет о покрытии
Ошибка:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Map.entrySet()" because the return value of "io.swagger.v3.oas.models.media.Schema.getProperties()" is null
at com..viclovsky.swagger.coverage.core.predicate.PropertyConditionPredicate.lambda$check$2(PropertyConditionPredicate.java:32)
What is the expected behavior?
PropertyConditionPredicate должен корректно обрабатывать null в properties, либо:
Обеспечивая создание Schema с инициализированными properties в SwaggerCoverageV3RestAssured
Либо добавляя проверку на null в PropertyConditionPredicate
What is the motivation / use case for changing the behavior?
Текущая реализация ломает анализ покрытия для любого запроса с телом из-за необработанного NPE. Это затрагивает всех пользователей независимо от того, используют они сгенерированные клиенты или нет, так как фильтр всегда создает новую пустую Schema.
Other information
В документации указано что "Swagger-coverage работает хорошо с клиентами, сгенерированными из swagger", однако это не имеет отношения к проблеме, так как SwaggerCoverageV3RestAssured создает новую пустую Schema независимо от типа клиента:
// в SwaggerCoverageV3RestAssured
MediaType mediaType = new MediaType();
mediaType.setSchema(new Schema()); // properties == null
// в PropertyConditionPredicate
.flatMap(o -> (Stream<Map.Entry<String, Schema>>) o.getProperties().entrySet().stream()) // NPE здесь