File tree Expand file tree Collapse file tree 2 files changed +38
-1
lines changed
openapi_core/validation/schemas
tests/integration/validation Expand file tree Collapse file tree 2 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -76,7 +76,7 @@ def iter_missing_additional_properties_errors(
7676 if "additionalProperties" in schema :
7777 return
7878
79- extras = set (find_additional_properties (instance , schema ))
79+ extras = sorted ( set (find_additional_properties (instance , schema ) ))
8080
8181 if extras :
8282 error = "Additional properties are not allowed (%s %s unexpected)"
Original file line number Diff line number Diff line change @@ -134,6 +134,43 @@ def test_response_validation_strict_rejects_extra_properties():
134134 openapi .validate_response (request , response )
135135
136136
137+ def test_request_validation_strict_error_message_is_stable ():
138+ """Test that error messages are deterministic when multiple extra properties exist."""
139+ config = Config (additional_properties_default_policy = "forbid" )
140+ openapi = OpenAPI .from_dict (_spec_dict (), config = config )
141+
142+ request = MockRequest (
143+ "http://example.com" ,
144+ "post" ,
145+ "/tags" ,
146+ content_type = "application/json" ,
147+ data = json .dumps (
148+ {
149+ "tag_name" : "my-tag" ,
150+ "zebra" : "z data" ,
151+ "apple" : "a data" ,
152+ "mango" : "m data" ,
153+ }
154+ ).encode ("utf-8" ),
155+ )
156+
157+ # Collect error messages from multiple validation attempts
158+ messages = []
159+ for _ in range (10 ):
160+ with pytest .raises (InvalidRequestBody ) as exc_info :
161+ openapi .validate_request (request )
162+ messages .append (str (exc_info .value ))
163+
164+ assert (
165+ len (set (messages )) == 1
166+ ), f"Error messages are not stable: { messages } "
167+
168+ error_message = messages [0 ]
169+ assert (
170+ "'apple', 'mango', 'zebra'" in error_message
171+ ), f"Properties not in alphabetical order: { error_message } "
172+
173+
137174def test_response_validation_strict_allows_explicit_additional_properties_true ():
138175 spec_dict = _spec_dict ()
139176 spec_dict ["components" ]["schemas" ]["Tag" ]["additionalProperties" ] = True
You can’t perform that action at this time.
0 commit comments