asyrjasalo / RESTinstance

Robot Framework library for RESTful JSON APIs
https://pypi.org/project/RESTinstance
GNU Lesser General Public License v3.0
205 stars 84 forks source link

False positive with 'contains' (?) #63

Closed Tset-Noitamotua closed 3 years ago

Tset-Noitamotua commented 5 years ago

Not sure if this is a false positive

image

I am sure that {'bar': 0, 'foo': 123} does not occur in the response. So I was expecting the test to fail because of the validation.

Am I doing something wrong?

Tset-Noitamotua commented 5 years ago

when I try contains="somestring" then it fails like this

image

Now I wonder does 'contains' only check if what I pass is an object or boolean?

Tset-Noitamotua commented 5 years ago

contains

The value of this keyword MUST be a valid JSON Schema.

An array instance is valid against "contains" if at least one of its elements is valid against the given schema.

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.6

asimell commented 3 years ago

Hi @Tset-Noitamotua,

This sounds like a bug for sure, but needs further investigation. We'll come back to this once we can see if it actually is a bug.

asimell commented 3 years ago

Hi @Tset-Noitamotua ,

After doing some digging on this, it looks like contains only validates the output schema. This means that if your query returns

{ [ {"item1": "value1"}, {"item2": "value2"} ] }

you can check for example contains={"type": "object"}, but not whether the array actually contains an item that matches your query. Currently, for this you should implement your own logic. We can consider if this is something we want to include into the library itself.

Also based on http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.4 (your /latest redirects here). It doesn't have a contains validation anymore, but instead 2 validations maxContains and minContains. However, these aren't supported by Python Jsonschema.

asimell commented 3 years ago

According to JSONSchema documentation, this is a feature of JSONSchema and not a bug in the library, we're closing this issue.