Reputation: 584
Given following response:
* def resp = {"a":[{"c": 2},{"c": 1}, {"c":3}], "b":[6,5,4]}
I want to match it no matter the order arrays are in.
I know I could do it with contains
directive but I think that would require me to do multiple match patterns like:
* match resp.a.[*].c contains [3,2,1]
* match resp.b contains [5,4,6]
Is there something like global config to ignore array order all together or do I have to roll with contains?
Upvotes: 2
Views: 1111
Reputation: 1090
The following works. You could also specify the size of the array if you want for example.
* def response = {"a":[2,1,3], "b":[6,5,4]}
* match response.a contains [3,2,1]
* match response.b contains [5,4,6]
* match response == {"a": "#[] #? _ <4, _ >0", "b": "#[] #? _ <7, _ >3"}
Edit to match your more detailed case :
* def resp = {"a":[{"c": 2},{"c": 1}, {"c":3}], "b":[6,5,4]}
* def inside = {"c" : "#number"}
* def schema = { "a": "#[] #(inside)", "b": "#[] #number" }
* match resp == schema
Upvotes: 3