|
17 | 17 | from jsonpath_ng.ext import parse as parse_jsonpath |
18 | 18 | from jsonschema import FormatChecker, validate |
19 | 19 | from jsonschema.exceptions import SchemaError, ValidationError |
| 20 | +from openapi_core import OpenAPI |
| 21 | +from openapi_core.exceptions import OpenAPIError |
| 22 | +from openapi_core.contrib.requests import RequestsOpenAPIRequest, \ |
| 23 | + RequestsOpenAPIResponse |
20 | 24 | from pytz import UnknownTimeZoneError, utc |
21 | 25 | from requests import request as client |
22 | 26 | from requests.auth import HTTPBasicAuth, HTTPDigestAuth, HTTPProxyAuth |
@@ -1426,10 +1430,26 @@ def _instantiate( |
1426 | 1430 |
|
1427 | 1431 | def _assert_spec(self, spec, response): |
1428 | 1432 | request = response.request |
1429 | | - try: |
1430 | | - validate_api_call(spec, raw_request=request, raw_response=response) |
1431 | | - except ValueError as e: |
1432 | | - raise AssertionError(e) |
| 1433 | + |
| 1434 | + spec_version = spec.get("openapi", "0") |
| 1435 | + if spec_version.startswith("3"): |
| 1436 | + try: |
| 1437 | + if self._spec is None: |
| 1438 | + self._spec = OpenAPI.from_dict(self.spec) |
| 1439 | + |
| 1440 | + openapi_request = RequestsOpenAPIRequest(request) |
| 1441 | + openapi_response = RequestsOpenAPIResponse(response) |
| 1442 | + |
| 1443 | + self._spec.validate_request(openapi_request) |
| 1444 | + self._spec.validate_response(openapi_request, openapi_response) |
| 1445 | + |
| 1446 | + except OpenAPIError as e: |
| 1447 | + raise AssertionError(e) from e |
| 1448 | + else: |
| 1449 | + try: |
| 1450 | + validate_api_call(spec, raw_request=request, raw_response=response) |
| 1451 | + except ValueError as e: |
| 1452 | + raise AssertionError(e) |
1433 | 1453 |
|
1434 | 1454 | def _validate_schema(self, schema, json_dict): |
1435 | 1455 | for field in schema: |
|
0 commit comments