@@ -337,6 +337,55 @@ def test_to_gemini_schema_nested_dict_with_defs_and_ref(self):
337337 ]
338338 assert gemini_schema .properties ["payload" ].required == ["adDomain" ]
339339
340+ def test_to_gemini_schema_nested_dict_with_draft07_definitions_and_ref (self ):
341+ openapi_schema = {
342+ "$schema" : "http://json-schema.org/draft-07/schema#" ,
343+ "definitions" : {
344+ "DeviceEnum" : {
345+ "enum" : ["GLOBAL" , "desktop" , "mobile" ],
346+ "type" : "string" ,
347+ },
348+ "DomainPayload" : {
349+ "properties" : {
350+ "adDomain" : {
351+ "items" : {"type" : "string" },
352+ "type" : "array" ,
353+ },
354+ "device" : {
355+ "$ref" : "#/definitions/DeviceEnum" ,
356+ "default" : "GLOBAL" ,
357+ },
358+ },
359+ "required" : ["adDomain" ],
360+ "type" : "object" ,
361+ },
362+ },
363+ "properties" : {"payload" : {"$ref" : "#/definitions/DomainPayload" }},
364+ "required" : ["payload" ],
365+ "type" : "object" ,
366+ }
367+ gemini_schema = _to_gemini_schema (openapi_schema )
368+ assert gemini_schema .type == Type .OBJECT
369+ assert gemini_schema .properties ["payload" ].type == Type .OBJECT
370+ assert (
371+ gemini_schema .properties ["payload" ].properties ["adDomain" ].type
372+ == Type .ARRAY
373+ )
374+ assert (
375+ gemini_schema .properties ["payload" ].properties ["adDomain" ].items .type
376+ == Type .STRING
377+ )
378+ assert (
379+ gemini_schema .properties ["payload" ].properties ["device" ].type
380+ == Type .STRING
381+ )
382+ assert gemini_schema .properties ["payload" ].properties ["device" ].enum == [
383+ "GLOBAL" ,
384+ "desktop" ,
385+ "mobile" ,
386+ ]
387+ assert gemini_schema .properties ["payload" ].required == ["adDomain" ]
388+
340389 def test_sanitize_integer_formats (self ):
341390 """Test that int32 and int64 formats are preserved for integer types"""
342391 openapi_schema = {
0 commit comments