Это такой фич-реквест. Было бы очень круто.
swat предназначен для веба. А в вебе нынче обычным делом является json. Практически все API выдают json.
Было бы очень удобно, если бы swat мог работать с json-ом без написания вручную кучи вспомогательного кода в set_response_processor.
Как мне это видится:
- В чек-листе, по аналогии с регуляркой, пишем выражение на jsonpath (JSON::Path):
jsonpath: store.book.author
-
swat, встретив инструкцию jsonpath, понимает, что проверяемый текст - это json. Тогда swat запускает функцию, которая декодирует $body как json (JSON::XS). Если декодирование не удалось, то проверка сразу провалена. Если же удалось, то поехали дальше (и можно где-то внутри взвести флаг, означающий, что валидность этого json-a проверена и больше валидировать не надо, если вдруг в чек-листе будут еще инструкции jsonpath).
-
Выражение jsonpath применяется к $body. Если вернулось хоть что-то, то проверка пройдена (а вернувшееся нужно записать, как записываются захваты в регулярке, чтобы потом можно было получить это через функцию - например, через capture_json()).
-
Дальше в чек-листе можно написать, опять же, по аналогии с регуляркой, что-то такое:
code: print capture_json()->[0]
# или
validator: [ ( capture_json()->[0] eq 'Пушкин' ), 'Да, автор - Пушкин') ];
Это такой фич-реквест. Было бы очень круто.
swat предназначен для веба. А в вебе нынче обычным делом является json. Практически все API выдают json.
Было бы очень удобно, если бы swat мог работать с json-ом без написания вручную кучи вспомогательного кода в set_response_processor.
Как мне это видится:
swat, встретив инструкцию jsonpath, понимает, что проверяемый текст - это json. Тогда swat запускает функцию, которая декодирует $body как json (JSON::XS). Если декодирование не удалось, то проверка сразу провалена. Если же удалось, то поехали дальше (и можно где-то внутри взвести флаг, означающий, что валидность этого json-a проверена и больше валидировать не надо, если вдруг в чек-листе будут еще инструкции jsonpath).
Выражение jsonpath применяется к $body. Если вернулось хоть что-то, то проверка пройдена (а вернувшееся нужно записать, как записываются захваты в регулярке, чтобы потом можно было получить это через функцию - например, через capture_json()).
Дальше в чек-листе можно написать, опять же, по аналогии с регуляркой, что-то такое: