Определите контракт, используя параметр строки запроса в утверждении пути json - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь использовать 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.Прямо сейчас я думаю, что я мог бы просто иметь все тело ответа в качестве спецификации, но это кажется громоздким.Если это так, я думаю, это нормально.

Любые идеи или помощь приветствуются.

...