Improve jsonpath parser coverage with integ tests

This commit is contained in:
Fabrice Reix 2023-09-09 15:57:45 +02:00
parent b41f17be2b
commit 7ed25baac9
No known key found for this signature in database
GPG Key ID: BF5213154B2E7155
7 changed files with 60 additions and 9 deletions

View File

@ -1,7 +1,42 @@
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:4:10
--> tests_failed/invalid_jsonpath.hurl:5:10
|
4 | jsonpath "" == false
5 | jsonpath "" == false
| ^^ the JSONPath expression '' is not valid
|
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:6:10
|
6 | jsonpath "$.tags[0]x" == false
| ^^^^^^^^^^^^ the JSONPath expression '$.tags[0]x' is not valid
|
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:7:10
|
7 | jsonpath "$.tags[0,A]" == false
| ^^^^^^^^^^^^^ the JSONPath expression '$.tags[0,A]' is not valid
|
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:8:10
|
8 | jsonpath "$.tags[0:A]" == false
| ^^^^^^^^^^^^^ the JSONPath expression '$.tags[0:A]' is not valid
|
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:9:10
|
9 | jsonpath "$.tags[]" == false
| ^^^^^^^^^^ the JSONPath expression '$.tags[]' is not valid
|
error: Invalid JSONPath
--> tests_failed/invalid_jsonpath.hurl:10:10
|
10 | jsonpath "$." == false
| ^^^^ the JSONPath expression '$.' is not valid
|

View File

@ -1,5 +0,0 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/error-invalid-jsonpath</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">""</span> <span class="predicate-type">==</span> <span class="boolean">false</span></span>
</span></span></code></pre>

View File

@ -1,4 +1,10 @@
# Testing invalid jsonpath expression
GET http://localhost:8000/error-invalid-jsonpath
HTTP 200
[Asserts]
jsonpath "" == false
jsonpath "$.tags[0]x" == false
jsonpath "$.tags[0,A]" == false
jsonpath "$.tags[0:A]" == false
jsonpath "$.tags[]" == false
jsonpath "$." == false

View File

@ -1 +0,0 @@
{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-invalid-jsonpath"},"response":{"status":200,"asserts":[{"query":{"type":"jsonpath","expr":""},"predicate":{"type":"equal","value":false}}]}}]}

View File

@ -39,6 +39,10 @@
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[0].id"</span> <span class="predicate-type">isString</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[0]['id']"</span> <span class="predicate-type">==</span> <span class="string">"error1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[*].id"</span> <span class="predicate-type">includes</span> <span class="string">"error1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[0,1].id"</span> <span class="predicate-type">includes</span> <span class="string">"error1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[:2].id"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">2</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[0:].id"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">2</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[?(@.id)].id"</span> <span class="filter-type">nth</span> <span class="number">0</span> <span class="predicate-type">==</span> <span class="string">"error1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[?(@.id=='error1')].id"</span> <span class="filter-type">nth</span> <span class="number">0</span> <span class="predicate-type">==</span> <span class="string">"error1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.failures[*].id"</span> <span class="predicate-type">includes</span> <span class="string">"failure1"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.duration"</span> <span class="predicate-type">==</span> <span class="number">1.5</span></span>
@ -57,6 +61,10 @@
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$['profile-id']"</span> <span class="predicate-type">==</span> <span class="string">"123abc"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors[0]"</span> <span class="not">not</span> <span class="predicate-type">isEmpty</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.empty"</span> <span class="predicate-type">isEmpty</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.*"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">10</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.errors..*"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">4</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$..id"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span></span>
<span class="line"></span>
<span class="line"></span><span class="comment"># FIXME do we accept count filter on object?</span>
<span class="line"></span><span class="comment"># jsonpath "$.empty" count == 0</span>
<span class="json"><span class="line">{</span>

View File

@ -39,6 +39,10 @@ jsonpath "$.errors[0].id" == "error1"
jsonpath "$.errors[0].id" isString
jsonpath "$.errors[0]['id']" == "error1"
jsonpath "$.errors[*].id" includes "error1"
jsonpath "$.errors[0,1].id" includes "error1"
jsonpath "$.errors[:2].id" count == 2
jsonpath "$.errors[0:].id" count == 2
jsonpath "$.errors[?(@.id)].id" nth 0 == "error1"
jsonpath "$.errors[?(@.id=='error1')].id" nth 0 == "error1"
jsonpath "$.failures[*].id" includes "failure1"
jsonpath "$.duration" == 1.5
@ -57,6 +61,10 @@ jsonpath "$.profile-id" == "123abc"
jsonpath "$['profile-id']" == "123abc"
jsonpath "$.errors[0]" not isEmpty
jsonpath "$.empty" isEmpty
jsonpath "$.*" count == 10
jsonpath "$.errors..*" count == 4
jsonpath "$..id" count == 3
# FIXME do we accept count filter on object?
# jsonpath "$.empty" count == 0
{

File diff suppressed because one or more lines are too long