Skip to content

Commit

Permalink
python_examples: Validate error responses.
Browse files Browse the repository at this point in the history
Adds assert statements to validate error response for "400" error code. The
current validation using `validate_against_openapi_schema` doesn't correctly
validate "400" responses.
  • Loading branch information
Vector73 committed Jun 13, 2024
1 parent 5aec31c commit 5799756
Showing 1 changed file with 17 additions and 12 deletions.
29 changes: 17 additions & 12 deletions zerver/openapi/python_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ def validate_response_result(response: Dict[str, Any], expected_result: str = "s
assert response["result"] == expected_result


def validate_error_response(response: Dict[str, Any], status_code: str = "BAD_REQUEST") -> None:
assert "code" in response
assert response["code"] == status_code


def get_subscribed_stream_ids(client: Client) -> List[int]:
streams = client.get_subscriptions()
stream_ids = [stream["stream_id"] for stream in streams["subscriptions"]]
Expand Down Expand Up @@ -163,7 +168,7 @@ def test_authorization_errors_fatal(client: Client, nonadmin_client: Client) ->
authorization_errors_fatal=True,
)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/users/me/subscriptions", "post", "400")
validate_error_response(result)


@openapi_test_function("/realm/presence:get")
Expand Down Expand Up @@ -269,7 +274,7 @@ def create_user(client: Client) -> None:
# Test "Email already used error".
result = client.create_user(request)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/users", "post", "400")
validate_error_response(result)


@openapi_test_function("/users/me/status:post")
Expand All @@ -295,7 +300,7 @@ def update_status(client: Client) -> None:
}
result = client.call_endpoint(url="/users/me/status", method="POST", request=request)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/users/me/status", "post", "400")
validate_error_response(result)


@openapi_test_function("/users:get")
Expand Down Expand Up @@ -792,7 +797,7 @@ def get_user_groups(client: Client) -> int:
def test_user_not_authorized_error(nonadmin_client: Client) -> None:
result = nonadmin_client.get_streams(include_all_active=True)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/rest-error-handling", "post", "400")
validate_error_response(result)


@openapi_test_function("/streams/{stream_id}/members:get")
Expand Down Expand Up @@ -1194,7 +1199,7 @@ def test_nonexistent_stream_error(client: Client) -> None:
}
result = client.send_message(request)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/messages", "post", "400")
validate_error_response(result, status_code="STREAM_DOES_NOT_EXIST")


def test_private_message_invalid_recipient(client: Client) -> None:
Expand All @@ -1205,7 +1210,7 @@ def test_private_message_invalid_recipient(client: Client) -> None:
}
result = client.send_message(request)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/messages", "post", "400")
validate_error_response(result)


@openapi_test_function("/messages/{message_id}:patch")
Expand Down Expand Up @@ -1240,7 +1245,7 @@ def test_update_message_edit_permission_error(client: Client, nonadmin_client: C
}
result = nonadmin_client.update_message(request)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/messages/{message_id}", "patch", "400")
validate_error_response(result)


@openapi_test_function("/messages/{message_id}:delete")
Expand All @@ -1263,7 +1268,7 @@ def test_delete_message_edit_permission_error(client: Client, nonadmin_client: C
result = client.send_message(request)
result = nonadmin_client.delete_message(result["id"])
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/messages/{message_id}", "delete", "400")
validate_error_response(result)


@openapi_test_function("/messages/{message_id}/history:get")
Expand Down Expand Up @@ -1355,7 +1360,7 @@ def deregister_queue(client: Client, queue_id: str) -> None:
# Test "BAD_EVENT_QUEUE_ID" error.
result = client.deregister(queue_id)
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/events", "delete", "400")
validate_error_response(result, status_code="BAD_EVENT_QUEUE_ID")


@openapi_test_function("/events:get")
Expand Down Expand Up @@ -1652,13 +1657,13 @@ def update_user_group_members(client: Client, user_group_id: int) -> None:
def test_invalid_api_key(client_with_invalid_key: Client) -> None:
result = client_with_invalid_key.get_subscriptions()
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/rest-error-handling", "post", "400")
validate_error_response(result, status_code="UNAUTHORIZED")


def test_missing_request_argument(client: Client) -> None:
result = client.render_message({})
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/rest-error-handling", "post", "400")
validate_error_response(result, status_code="REQUEST_VARIABLE_MISSING")


def test_user_account_deactivated(client: Client) -> None:
Expand All @@ -1680,7 +1685,7 @@ def test_realm_deactivated(client: Client) -> None:
def test_invalid_stream_error(client: Client) -> None:
result = client.get_stream_id("nonexistent")
validate_response_result(result, expected_result="error")
validate_against_openapi_schema(result, "/get_stream_id", "get", "400")
validate_error_response(result)


# SETUP METHODS FOLLOW
Expand Down

0 comments on commit 5799756

Please sign in to comment.