Esempio n. 1
0
 def validate_api_response_openapi(
     self,
     url: str,
     method: str,
     result: HttpResponse,
     data: Union[str, bytes, Dict[str, Any]],
     http_headers: Dict[str, Any],
     intentionally_undocumented: bool = False,
 ) -> None:
     """
     Validates all API responses received by this test against Zulip's API documentation,
     declared in zerver/openapi/zulip.yaml.  This powerful test lets us use Zulip's
     extensive test coverage of corner cases in the API to ensure that we've properly
     documented those corner cases.
     """
     if not (url.startswith("/json") or url.startswith("/api/v1")):
         return
     try:
         content = orjson.loads(result.content)
     except orjson.JSONDecodeError:
         return
     json_url = False
     if url.startswith('/json'):
         json_url = True
     url, query_data = self.extract_api_suffix_url(url)
     if len(query_data) != 0:
         # In some cases the query parameters are defined in the URL itself. In such cases
         # The `data` argument of our function is not used. Hence get `data` argument
         # from url.
         data = query_data
     response_validated = validate_against_openapi_schema(content, url, method, str(result.status_code))
     if response_validated:
         validate_request(url, method, data, http_headers, json_url, str(result.status_code),
                          intentionally_undocumented=intentionally_undocumented)
 def test_validator(self) -> None:
     """
     Test to make sure the request validator works properly
     The tests cover both cases such as catching valid requests marked
     as invalid and making sure invalid requests are markded properly
     """
     # `/users/me/subscriptions` doesn't require any parameters
     validate_request('/users/me/subscriptions',
                      'get', {}, {},
                      False,
                      uses_invalid_parameters=False)
     with self.assertRaises(AssertionError):
         validate_request('/users/me/subscriptions',
                          'get', {}, {},
                          False,
                          uses_invalid_parameters=True)
     validate_request('/dev_fetch_api_key',
                      'post', {}, {},
                      False,
                      uses_invalid_parameters=True)
     with self.assertRaises(SchemaError):
         validate_request('/dev_fetch_api_key',
                          'post', {}, {},
                          False,
                          uses_invalid_parameters=False)
Esempio n. 3
0
 def test_validator(self) -> None:
     """
     Test to make sure the request validator works properly
     The tests cover both cases such as catching valid requests marked
     as invalid and making sure invalid requests are markded properly
     """
     # `/users/me/subscriptions` doesn't require any parameters
     validate_request("/users/me/subscriptions", "get", {}, {}, False, "200")
     with self.assertRaises(SchemaError):
         # `/messages` POST does not work on an empty response
         validate_request("/messages", "post", {}, {}, False, "200")
     # 400 responses are allowed to fail validation.
     validate_request("/messages", "post", {}, {}, False, "400")
     # `intentionally_undocumented` allows validation errors on
     # 200 responses.
     validate_request(
         "/dev_fetch_api_key", "post", {}, {}, False, "200", intentionally_undocumented=True
     )