@@ -233,6 +233,8 @@ pub trait AsRequestContext {
233233
234234#[ cfg( test) ]
235235mod tests {
236+ use rstest:: rstest;
237+
236238 use super :: * ;
237239
238240 #[ derive( serde:: Serialize , serde:: Deserialize , JsonSchema ) ]
@@ -245,46 +247,44 @@ mod tests {
245247 value : i32 ,
246248 }
247249
248- #[ test]
249- fn test_schema_for_type_handles_primitive ( ) {
250- let schema = schema_for_type :: < i32 > ( ) ;
251-
252- assert_eq ! ( schema. get( "type" ) , Some ( & serde_json:: json!( "integer" ) ) ) ;
250+ #[ rstest]
251+ #[ case:: primitive( schema_for_type:: <i32 >, "integer" ) ]
252+ #[ case:: array( schema_for_type:: <Vec <i32 >>, "array" ) ]
253+ #[ case:: struct_object( schema_for_type:: <TestObject >, "object" ) ]
254+ fn schema_for_type_sets_expected_root_type (
255+ #[ case] schema_fn : fn ( ) -> Arc < JsonObject > ,
256+ #[ case] expected_type : & str ,
257+ ) {
258+ let schema = schema_fn ( ) ;
259+
260+ assert_eq ! ( schema. get( "type" ) , Some ( & serde_json:: json!( expected_type) ) ) ;
253261 }
254262
255263 #[ test]
256- fn test_schema_for_type_handles_array ( ) {
264+ fn schema_for_type_sets_array_item_type ( ) {
257265 let schema = schema_for_type :: < Vec < i32 > > ( ) ;
266+ let items = schema. get ( "items" ) . and_then ( |v| v. as_object ( ) ) . unwrap ( ) ;
258267
259- assert_eq ! ( schema. get( "type" ) , Some ( & serde_json:: json!( "array" ) ) ) ;
260- let items = schema. get ( "items" ) . and_then ( |v| v. as_object ( ) ) ;
261- assert_eq ! (
262- items. unwrap( ) . get( "type" ) ,
263- Some ( & serde_json:: json!( "integer" ) )
264- ) ;
268+ assert_eq ! ( items. get( "type" ) , Some ( & serde_json:: json!( "integer" ) ) ) ;
265269 }
266270
267271 #[ test]
268- fn test_schema_for_type_handles_struct ( ) {
272+ fn schema_for_type_sets_struct_properties ( ) {
269273 let schema = schema_for_type :: < TestObject > ( ) ;
274+ let properties = schema
275+ . get ( "properties" )
276+ . and_then ( |v| v. as_object ( ) )
277+ . unwrap ( ) ;
270278
271- assert_eq ! ( schema. get( "type" ) , Some ( & serde_json:: json!( "object" ) ) ) ;
272- let properties = schema. get ( "properties" ) . and_then ( |v| v. as_object ( ) ) ;
273- assert ! ( properties. unwrap( ) . contains_key( "value" ) ) ;
274- }
275-
276- #[ test]
277- fn test_schema_for_type_caches_primitive_types ( ) {
278- let schema1 = schema_for_type :: < i32 > ( ) ;
279- let schema2 = schema_for_type :: < i32 > ( ) ;
280-
281- assert ! ( Arc :: ptr_eq( & schema1, & schema2) ) ;
279+ assert ! ( properties. contains_key( "value" ) ) ;
282280 }
283281
284- #[ test]
285- fn test_schema_for_type_caches_struct_types ( ) {
286- let schema1 = schema_for_type :: < TestObject > ( ) ;
287- let schema2 = schema_for_type :: < TestObject > ( ) ;
282+ #[ rstest]
283+ #[ case:: primitive( schema_for_type:: <i32 >) ]
284+ #[ case:: struct_object( schema_for_type:: <TestObject >) ]
285+ fn test_schema_for_type_caches_schemas ( #[ case] schema_fn : fn ( ) -> Arc < JsonObject > ) {
286+ let schema1 = schema_fn ( ) ;
287+ let schema2 = schema_fn ( ) ;
288288
289289 assert ! ( Arc :: ptr_eq( & schema1, & schema2) ) ;
290290 }
@@ -305,51 +305,36 @@ mod tests {
305305 assert ! ( Arc :: ptr_eq( & schema, & cloned) ) ;
306306 }
307307
308- #[ test]
309- fn test_schema_for_output_rejects_primitive ( ) {
310- let result = schema_for_output :: < i32 > ( ) ;
311- assert ! ( result. is_err( ) , ) ;
312- }
313-
314- #[ test]
315- fn test_schema_for_output_accepts_object ( ) {
316- let result = schema_for_output :: < TestObject > ( ) ;
317- assert ! ( result. is_ok( ) , ) ;
318- }
319-
320- #[ test]
321- fn test_schema_for_output_strips_top_level_title ( ) {
322- let schema = schema_for_output :: < TestObject > ( ) . unwrap ( ) ;
323- assert ! ( !schema. contains_key( "title" ) ) ;
324- }
325-
326- #[ test]
327- fn test_schema_for_output_strips_top_level_description ( ) {
328- let schema = schema_for_output :: < TestObject > ( ) . unwrap ( ) ;
329- assert ! ( !schema. contains_key( "description" ) ) ;
330- }
331-
332- #[ test]
333- fn test_schema_for_input_rejects_primitive ( ) {
334- let result = schema_for_input :: < i32 > ( ) ;
308+ #[ rstest]
309+ #[ case:: output( schema_for_output:: <i32 >) ]
310+ #[ case:: input( schema_for_input:: <i32 >) ]
311+ fn test_schema_for_object_wrappers_reject_primitives (
312+ #[ case] schema_fn : fn ( ) -> Result < Arc < JsonObject > , String > ,
313+ ) {
314+ let result = schema_fn ( ) ;
335315 assert ! ( result. is_err( ) ) ;
336316 }
337317
338- #[ test]
339- fn test_schema_for_input_accepts_object ( ) {
340- let result = schema_for_input :: < TestObject > ( ) ;
318+ #[ rstest]
319+ #[ case:: output( schema_for_output:: <TestObject >) ]
320+ #[ case:: input( schema_for_input:: <TestObject >) ]
321+ fn test_schema_for_object_wrappers_accept_objects (
322+ #[ case] schema_fn : fn ( ) -> Result < Arc < JsonObject > , String > ,
323+ ) {
324+ let result = schema_fn ( ) ;
341325 assert ! ( result. is_ok( ) ) ;
342326 }
343327
344- #[ test]
345- fn test_schema_for_input_strips_top_level_title ( ) {
346- let schema = schema_for_input :: < TestObject > ( ) . unwrap ( ) ;
347- assert ! ( !schema. contains_key( "title" ) ) ;
348- }
349-
350- #[ test]
351- fn test_schema_for_input_strips_top_level_description ( ) {
352- let schema = schema_for_input :: < TestObject > ( ) . unwrap ( ) ;
353- assert ! ( !schema. contains_key( "description" ) ) ;
328+ #[ rstest]
329+ #[ case:: output_title( schema_for_output:: <TestObject >, "title" ) ]
330+ #[ case:: output_description( schema_for_output:: <TestObject >, "description" ) ]
331+ #[ case:: input_title( schema_for_input:: <TestObject >, "title" ) ]
332+ #[ case:: input_description( schema_for_input:: <TestObject >, "description" ) ]
333+ fn test_schema_for_object_wrappers_strip_top_level_metadata (
334+ #[ case] schema_fn : fn ( ) -> Result < Arc < JsonObject > , String > ,
335+ #[ case] field : & str ,
336+ ) {
337+ let schema = schema_fn ( ) . unwrap ( ) ;
338+ assert ! ( !schema. contains_key( field) ) ;
354339 }
355340}
0 commit comments