@@ -1059,11 +1059,153 @@ mod tests {
10591059 assert_snapshot ! ( result) ;
10601060 }
10611061
1062+ #[ test]
1063+ fn test_unnamed_index_and_unique ( ) {
1064+ let table = TableDef {
1065+ name : "events" . into ( ) ,
1066+ description : None ,
1067+ columns : vec ! [
1068+ col( "id" , ColumnType :: Simple ( SimpleColumnType :: Integer ) ) ,
1069+ col( "venue_id" , ColumnType :: Simple ( SimpleColumnType :: Integer ) ) ,
1070+ col( "date" , ColumnType :: Simple ( SimpleColumnType :: Date ) ) ,
1071+ ] ,
1072+ constraints : vec ! [
1073+ TableConstraint :: PrimaryKey {
1074+ auto_increment: false ,
1075+ columns: vec![ "id" . into( ) ] ,
1076+ } ,
1077+ TableConstraint :: Index {
1078+ name: None ,
1079+ columns: vec![ "venue_id" . into( ) , "date" . into( ) ] ,
1080+ } ,
1081+ TableConstraint :: Unique {
1082+ name: None ,
1083+ columns: vec![ "venue_id" . into( ) , "date" . into( ) ] ,
1084+ } ,
1085+ ] ,
1086+ } ;
1087+
1088+ let result = render_entity ( & table) . unwrap ( ) ;
1089+ assert_snapshot ! ( result) ;
1090+ }
1091+
1092+ #[ test]
1093+ fn test_fk_with_comment_and_auto_increment ( ) {
1094+ let table = TableDef {
1095+ name : "child" . into ( ) ,
1096+ description : None ,
1097+ columns : vec ! [
1098+ ColumnDef {
1099+ name: "parent_id" . into( ) ,
1100+ r#type: ColumnType :: Simple ( SimpleColumnType :: Integer ) ,
1101+ nullable: false ,
1102+ default : None ,
1103+ comment: Some ( "References parent table" . into( ) ) ,
1104+ primary_key: None ,
1105+ unique: None ,
1106+ index: None ,
1107+ foreign_key: None ,
1108+ } ,
1109+ col( "value" , ColumnType :: Simple ( SimpleColumnType :: Text ) ) ,
1110+ ] ,
1111+ constraints : vec ! [
1112+ TableConstraint :: PrimaryKey {
1113+ auto_increment: true ,
1114+ columns: vec![ "parent_id" . into( ) ] ,
1115+ } ,
1116+ TableConstraint :: ForeignKey {
1117+ name: None ,
1118+ columns: vec![ "parent_id" . into( ) ] ,
1119+ ref_table: "parent" . into( ) ,
1120+ ref_columns: vec![ "id" . into( ) ] ,
1121+ on_delete: None ,
1122+ on_update: None ,
1123+ } ,
1124+ ] ,
1125+ } ;
1126+
1127+ let result = render_entity ( & table) . unwrap ( ) ;
1128+ assert_snapshot ! ( result) ;
1129+ }
1130+
1131+ #[ test]
1132+ fn test_server_default_and_true_boolean ( ) {
1133+ let table = TableDef {
1134+ name : "logs" . into ( ) ,
1135+ description : None ,
1136+ columns : vec ! [
1137+ col( "id" , ColumnType :: Simple ( SimpleColumnType :: Integer ) ) ,
1138+ ColumnDef {
1139+ name: "active" . into( ) ,
1140+ r#type: ColumnType :: Simple ( SimpleColumnType :: Boolean ) ,
1141+ nullable: false ,
1142+ default : Some ( DefaultValue :: Bool ( true ) ) ,
1143+ comment: None ,
1144+ primary_key: None ,
1145+ unique: None ,
1146+ index: None ,
1147+ foreign_key: None ,
1148+ } ,
1149+ ColumnDef {
1150+ name: "created_at" . into( ) ,
1151+ r#type: ColumnType :: Simple ( SimpleColumnType :: Timestamptz ) ,
1152+ nullable: false ,
1153+ default : Some ( DefaultValue :: String ( "NOW()" . into( ) ) ) ,
1154+ comment: None ,
1155+ primary_key: None ,
1156+ unique: None ,
1157+ index: None ,
1158+ foreign_key: None ,
1159+ } ,
1160+ ColumnDef {
1161+ name: "score" . into( ) ,
1162+ r#type: ColumnType :: Simple ( SimpleColumnType :: Real ) ,
1163+ nullable: false ,
1164+ default : Some ( DefaultValue :: Float ( 1.5 ) ) ,
1165+ comment: None ,
1166+ primary_key: None ,
1167+ unique: None ,
1168+ index: None ,
1169+ foreign_key: None ,
1170+ } ,
1171+ ColumnDef {
1172+ name: "tag" . into( ) ,
1173+ r#type: ColumnType :: Simple ( SimpleColumnType :: Text ) ,
1174+ nullable: false ,
1175+ default : Some ( DefaultValue :: String ( "UNKNOWN_EXPR" . into( ) ) ) ,
1176+ comment: None ,
1177+ primary_key: None ,
1178+ unique: None ,
1179+ index: None ,
1180+ foreign_key: None ,
1181+ } ,
1182+ ] ,
1183+ constraints : vec ! [ TableConstraint :: PrimaryKey {
1184+ auto_increment: true ,
1185+ columns: vec![ "id" . into( ) ] ,
1186+ } ] ,
1187+ } ;
1188+
1189+ let result = render_entity ( & table) . unwrap ( ) ;
1190+ assert_snapshot ! ( result) ;
1191+ }
1192+
1193+ #[ test]
1194+ fn test_column_type_to_java_string_enum ( ) {
1195+ // Exercises the string enum branch in column_type_to_java
1196+ let ty = ColumnType :: Complex ( ComplexColumnType :: Enum {
1197+ name : "status" . into ( ) ,
1198+ values : EnumValues :: String ( vec ! [ "a" . into( ) ] ) ,
1199+ } ) ;
1200+ assert_eq ! ( column_type_to_java( & ty) , "String" ) ;
1201+ }
1202+
10621203 #[ rstest]
10631204 #[ case( "order_item" , "OrderItem" ) ]
10641205 #[ case( "users" , "Users" ) ]
10651206 #[ case( "a" , "A" ) ]
10661207 #[ case( "user_profile_image" , "UserProfileImage" ) ]
1208+ #[ case( "" , "" ) ]
10671209 fn test_to_pascal_case ( #[ case] input : & str , #[ case] expected : & str ) {
10681210 assert_eq ! ( to_pascal_case( input) , expected) ;
10691211 }
@@ -1072,6 +1214,7 @@ mod tests {
10721214 #[ case( "created_at" , "createdAt" ) ]
10731215 #[ case( "id" , "id" ) ]
10741216 #[ case( "user_profile_image" , "userProfileImage" ) ]
1217+ #[ case( "" , "" ) ]
10751218 fn test_to_camel_case ( #[ case] input : & str , #[ case] expected : & str ) {
10761219 assert_eq ! ( to_camel_case( input) , expected) ;
10771220 }
0 commit comments