@@ -311,7 +311,7 @@ fn test_sea_orm_default_attrs_no_default_value() {
311311}
312312
313313#[ test]
314- fn test_sea_orm_default_attrs_sql_function_supported_type ( ) {
314+ fn test_sea_orm_default_attrs_sql_function_skips ( ) {
315315 let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "NOW()" ) ] ) ] ;
316316 let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
317317 let ty: syn:: Type = syn:: parse_str ( "String" ) . unwrap ( ) ;
@@ -325,42 +325,8 @@ fn test_sea_orm_default_attrs_sql_function_supported_type() {
325325 false ,
326326 & mut fns,
327327 ) ;
328- // Supported type with SQL function → generates serde(default) to mark field not-required
329- let serde_str = serde. to_string ( ) ;
330- assert ! (
331- serde_str. contains( "serde" ) ,
332- "should have serde default attr: {serde_str}"
333- ) ;
334- assert ! (
335- serde_str. contains( "default_Test_created_at" ) ,
336- "should reference generated default fn: {serde_str}"
337- ) ;
338- // No JSON default for SQL functions (value is DB-side only)
339- assert ! ( schema. is_empty( ) ) ;
340- // Default function was generated
341- assert_eq ! ( fns. len( ) , 1 , "should generate one default function" ) ;
342- }
343-
344- #[ test]
345- fn test_sea_orm_default_attrs_sql_function_unsupported_type_skips ( ) {
346- let attrs: Vec < syn:: Attribute > =
347- vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "MY_FUNC()" ) ] ) ] ;
348- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
349- let ty: syn:: Type = syn:: parse_str ( "MyCustomType" ) . unwrap ( ) ;
350- let mut fns = Vec :: new ( ) ;
351- let ( serde, schema) = generate_sea_orm_default_attrs (
352- & attrs,
353- & struct_name,
354- "custom_field" ,
355- & ty,
356- & ty,
357- false ,
358- & mut fns,
359- ) ;
360- // Unsupported type with SQL function → still skips entirely
361328 assert ! ( serde. is_empty( ) ) ;
362329 assert ! ( schema. is_empty( ) ) ;
363- assert ! ( fns. is_empty( ) ) ;
364330}
365331
366332#[ test]
@@ -477,156 +443,6 @@ fn test_generate_schema_type_code_with_partial_fields() {
477443 ) ;
478444}
479445
480- // --- Coverage: sql_function_default_body branches ---
481-
482- #[ test]
483- fn test_sql_function_default_non_path_type_skips ( ) {
484- // Reference type (&str) is Type::Reference, not Type::Path → sql_function_default_body returns None
485- let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "GEN()" ) ] ) ] ;
486- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
487- let ty: syn:: Type = syn:: parse_str ( "&str" ) . unwrap ( ) ;
488- let mut fns = Vec :: new ( ) ;
489- let ( serde, schema) =
490- generate_sea_orm_default_attrs ( & attrs, & struct_name, "val" , & ty, & ty, false , & mut fns) ;
491- assert ! ( serde. is_empty( ) ) ;
492- assert ! ( schema. is_empty( ) ) ;
493- assert ! ( fns. is_empty( ) ) ;
494- }
495-
496- #[ test]
497- fn test_sql_function_default_datetime_with_timezone ( ) {
498- let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "NOW()" ) ] ) ] ;
499- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
500- let ty: syn:: Type = syn:: parse_str ( "DateTimeWithTimeZone" ) . unwrap ( ) ;
501- let mut fns = Vec :: new ( ) ;
502- let ( serde, schema) =
503- generate_sea_orm_default_attrs ( & attrs, & struct_name, "ts" , & ty, & ty, false , & mut fns) ;
504- let serde_str = serde. to_string ( ) ;
505- assert ! (
506- serde_str. contains( "serde" ) ,
507- "should have serde attr: {serde_str}"
508- ) ;
509- assert ! ( schema. is_empty( ) ) ;
510- assert_eq ! ( fns. len( ) , 1 ) ;
511- let fn_str = fns[ 0 ] . to_string ( ) ;
512- assert ! (
513- fn_str. contains( "UNIX_EPOCH" ) ,
514- "should use epoch default: {fn_str}"
515- ) ;
516- }
517-
518- #[ test]
519- fn test_sql_function_default_datetime_utc ( ) {
520- let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "NOW()" ) ] ) ] ;
521- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
522- let ty: syn:: Type = syn:: parse_str ( "DateTimeUtc" ) . unwrap ( ) ;
523- let mut fns = Vec :: new ( ) ;
524- let ( serde, schema) =
525- generate_sea_orm_default_attrs ( & attrs, & struct_name, "ts" , & ty, & ty, false , & mut fns) ;
526- let serde_str = serde. to_string ( ) ;
527- assert ! (
528- serde_str. contains( "serde" ) ,
529- "should have serde attr: {serde_str}"
530- ) ;
531- assert ! ( schema. is_empty( ) ) ;
532- assert_eq ! ( fns. len( ) , 1 ) ;
533- let fn_str = fns[ 0 ] . to_string ( ) ;
534- assert ! (
535- fn_str. contains( "UNIX_EPOCH" ) ,
536- "should use epoch default: {fn_str}"
537- ) ;
538- }
539-
540- #[ test]
541- fn test_sql_function_default_datetime_local ( ) {
542- let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "NOW()" ) ] ) ] ;
543- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
544- let ty: syn:: Type = syn:: parse_str ( "DateTimeLocal" ) . unwrap ( ) ;
545- let mut fns = Vec :: new ( ) ;
546- let ( serde, schema) =
547- generate_sea_orm_default_attrs ( & attrs, & struct_name, "ts" , & ty, & ty, false , & mut fns) ;
548- let serde_str = serde. to_string ( ) ;
549- assert ! (
550- serde_str. contains( "serde" ) ,
551- "should have serde attr: {serde_str}"
552- ) ;
553- assert ! ( schema. is_empty( ) ) ;
554- assert_eq ! ( fns. len( ) , 1 ) ;
555- let fn_str = fns[ 0 ] . to_string ( ) ;
556- assert ! (
557- fn_str. contains( "UNIX_EPOCH" ) ,
558- "should use epoch default: {fn_str}"
559- ) ;
560- }
561-
562- #[ test]
563- fn test_sql_function_default_naive_datetime ( ) {
564- let attrs: Vec < syn:: Attribute > = vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "NOW()" ) ] ) ] ;
565- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
566- let ty: syn:: Type = syn:: parse_str ( "NaiveDateTime" ) . unwrap ( ) ;
567- let mut fns = Vec :: new ( ) ;
568- let ( serde, schema) =
569- generate_sea_orm_default_attrs ( & attrs, & struct_name, "ts" , & ty, & ty, false , & mut fns) ;
570- let serde_str = serde. to_string ( ) ;
571- assert ! (
572- serde_str. contains( "serde" ) ,
573- "should have serde attr: {serde_str}"
574- ) ;
575- assert ! ( schema. is_empty( ) ) ;
576- assert_eq ! ( fns. len( ) , 1 ) ;
577- let fn_str = fns[ 0 ] . to_string ( ) ;
578- assert ! (
579- fn_str. contains( "UNIX_EPOCH" ) ,
580- "should use epoch default: {fn_str}"
581- ) ;
582- }
583-
584- #[ test]
585- fn test_sql_function_default_naive_date ( ) {
586- let attrs: Vec < syn:: Attribute > =
587- vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "CURDATE()" ) ] ) ] ;
588- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
589- let ty: syn:: Type = syn:: parse_str ( "NaiveDate" ) . unwrap ( ) ;
590- let mut fns = Vec :: new ( ) ;
591- let ( serde, schema) =
592- generate_sea_orm_default_attrs ( & attrs, & struct_name, "d" , & ty, & ty, false , & mut fns) ;
593- let serde_str = serde. to_string ( ) ;
594- assert ! (
595- serde_str. contains( "serde" ) ,
596- "should have serde attr: {serde_str}"
597- ) ;
598- assert ! ( schema. is_empty( ) ) ;
599- assert_eq ! ( fns. len( ) , 1 ) ;
600- let fn_str = fns[ 0 ] . to_string ( ) ;
601- assert ! (
602- fn_str. contains( "from_ymd_opt" ) ,
603- "should use ymd default: {fn_str}"
604- ) ;
605- }
606-
607- #[ test]
608- fn test_sql_function_default_naive_time ( ) {
609- let attrs: Vec < syn:: Attribute > =
610- vec ! [ syn:: parse_quote!( #[ sea_orm( default_value = "CURTIME()" ) ] ) ] ;
611- let struct_name = syn:: Ident :: new ( "Test" , proc_macro2:: Span :: call_site ( ) ) ;
612- let ty: syn:: Type = syn:: parse_str ( "NaiveTime" ) . unwrap ( ) ;
613- let mut fns = Vec :: new ( ) ;
614- let ( serde, schema) =
615- generate_sea_orm_default_attrs ( & attrs, & struct_name, "t" , & ty, & ty, false , & mut fns) ;
616- let serde_str = serde. to_string ( ) ;
617- assert ! (
618- serde_str. contains( "serde" ) ,
619- "should have serde attr: {serde_str}"
620- ) ;
621- assert ! ( schema. is_empty( ) ) ;
622- assert_eq ! ( fns. len( ) , 1 ) ;
623- let fn_str = fns[ 0 ] . to_string ( ) ;
624- assert ! (
625- fn_str. contains( "from_hms_opt" ) ,
626- "should use hms default: {fn_str}"
627- ) ;
628- }
629-
630446// --- Coverage: is_parseable_type empty segments ---
631447
632448#[ test]
0 commit comments