@@ -250,3 +250,59 @@ def test_flatten_allof_empty_properties_after_merge() -> None:
250250 # Should not have properties/required if they're empty
251251 assert 'properties' not in flattened or not flattened .get ('properties' )
252252 assert 'required' not in flattened or not flattened .get ('required' )
253+
254+
255+ def test_flatten_allof_with_initial_properties () -> None :
256+ """Test flattening when root schema has initial properties (line 229)."""
257+ from pydantic_ai ._json_schema import flatten_allof
258+
259+ schema : dict [str , Any ] = {
260+ 'type' : 'object' ,
261+ 'properties' : {'root_prop' : {'type' : 'string' }}, # Initial properties
262+ 'allOf' : [
263+ {
264+ 'type' : 'object' ,
265+ 'properties' : {'a' : {'type' : 'integer' }},
266+ 'required' : ['a' ],
267+ },
268+ ],
269+ }
270+
271+ flattened = flatten_allof (copy .deepcopy (schema ))
272+ assert 'allOf' not in flattened
273+ assert 'root_prop' in flattened ['properties' ]
274+ assert 'a' in flattened ['properties' ]
275+ assert flattened ['required' ] == ['a' ]
276+
277+
278+ def test_flatten_allof_with_pattern_properties () -> None :
279+ """Test flattening when members have patternProperties (lines 241, 250)."""
280+ from pydantic_ai ._json_schema import flatten_allof
281+
282+ schema : dict [str , Any ] = {
283+ 'type' : 'object' ,
284+ 'allOf' : [
285+ {
286+ 'type' : 'object' ,
287+ 'properties' : {'a' : {'type' : 'string' }},
288+ 'patternProperties' : {
289+ '^prefix_' : {'type' : 'string' },
290+ },
291+ },
292+ {
293+ 'type' : 'object' ,
294+ 'properties' : {'b' : {'type' : 'integer' }},
295+ 'patternProperties' : {
296+ '^suffix_' : {'type' : 'number' },
297+ },
298+ },
299+ ],
300+ }
301+
302+ flattened = flatten_allof (copy .deepcopy (schema ))
303+ assert 'allOf' not in flattened
304+ assert 'patternProperties' in flattened
305+ assert '^prefix_' in flattened ['patternProperties' ]
306+ assert '^suffix_' in flattened ['patternProperties' ]
307+ assert flattened ['patternProperties' ]['^prefix_' ]['type' ] == 'string'
308+ assert flattened ['patternProperties' ]['^suffix_' ]['type' ] == 'number'
0 commit comments