Я пытаюсь использовать SCC для написания некоторых контрактов, прежде чем перестраивать сторону производителя (нет никаких существующих тестов!).Примеры вокруг списков и более глубоких структур данных в документах немного тонкие, поэтому я хочу понять, возможно ли это, или, возможно, мне нужно перейти к вызову команды, чтобы сделать правильные утверждения.Я использую последнюю версию v2.11
Итак -
Учитывая : API, который будет возвращать список объектов в его полезной нагрузке.Длина списка будет зависеть от личности клиента, то есть клиент A получит 3 элемента, клиент B получит 4 элемента.Идентификация клиента здесь не представляет интереса.
Когда : клиент делает запрос GET, передавая параметр строки запроса для выбора элемента в спискеitems
Затем : я хочу написать контракт, который принимает входные данные из запроса и доказывает, что ответ содержит список объектов, а для элемента, соответствующего селектору, выбрано логическое поле:true, в то время как остальные элементы выбраны: false.Есть край, где селектор неверен, и ни один элемент не выбран.
Например, для запроса GET /someapi?id=bbb
Ответ
{ foo: xxxy, bar: 123, baz: [
{ id: 'aaa', selected: false, .... },
{ id: 'bbb', selected: true, .... },
{ id: 'ccc', selected: false, .... }
] }
Конечно, выбранный элемент может бытьв любом месте в списке.Таким образом, я имел в виду утверждение, подобное этому псевдокоду -
jsonPath('$.baz[?(@.id == fromRequest().query("id"))].selected', byEquality( true ) )
Но я не могу сделать это из функцииReReest () в операторе JSONPath.Прямо сейчас я думаю, что я мог бы просто иметь все тело ответа в качестве спецификации, но это кажется громоздким.Если это так, я думаю, это нормально.
Любые идеи или помощь приветствуются.