Проверка ответа RestAssured Json с помощью GPath

Я получаю следующий ответ на неверный запрос к моему API. Я использую RestAssured для своих утверждений ответа на отдых.

{
    "message": "An entity of type topic was passed in an invalid format",
    "meta": {
        "display": {
            "topic": [
                {
                    "name": [
                        "must not be blank"
                    ]
                },
                {
                    "contentType": [
                        "must not be blank"
                    ]
                },
                {
                    "content": [
                        "must not be blank"
                    ]
                },
                {
                    "version": [
                        "must not be blank"
                    ]
                }
            ]
        }
    }
}

Мне нужно проверить значение всех свойств ответа. Я изо всех сил пытаюсь проверить этот путь: meta.display.topic.contentType. Я не могу придумать для этого GPath.

Вот утверждение, которое я делаю:

given().body("{}").when()
            .post(BASE_URL)
            .prettyPeek()
            .then()
            .statusCode(400)
            .contentType(ContentType.JSON)
            .body("message", is("An entity of type topic was passed in an invalid format"),
                    "meta.display.topic.contentType", is("must not be blank"));

Поскольку путь неверен, утверждение всегда терпит неудачу.


person Ihor M.    schedule 26.08.2019    source источник
comment
из вашего примера ответа Gpath должен быть meta.display.topic[1].contentType[0]   -  person bhusak    schedule 26.08.2019
comment
Я не хочу жестко кодировать позиции массива внутри тематического объекта, есть ли способ избежать этого?   -  person Ihor M.    schedule 26.08.2019


Ответы (1)


Чтобы избежать жестко запрограммированных позиций массива для объекта topic, подойдет следующее:

meta.display.topic.find { it.contentType != null }.contentType[0]
person bhusak    schedule 26.08.2019
comment
Это работает, но я не хотел забрызгивать свой код скриптами Groovy, даже крошечными, я предполагал, что будет какой-то сопоставитель путей или что-то в этом роде, что облегчило бы такие вещи. - person Ihor M.; 26.08.2019