1pub mod config;
2pub mod file_format;
3pub mod name_case;
4
5pub use config::{SeaOrmConfig, VespertideConfig, default_migration_filename_pattern};
6pub use file_format::FileFormat;
7pub use name_case::NameCase;
8
9#[cfg(test)]
10mod tests {
11 use std::path::{Path, PathBuf};
12
13 use super::*;
14
15 #[test]
16 fn default_values_are_snake_and_standard_paths() {
17 let cfg = VespertideConfig::default();
18 assert_eq!(cfg.models_dir, PathBuf::from("models"));
19 assert_eq!(cfg.migrations_dir, PathBuf::from("migrations"));
20 assert!(cfg.table_case().is_snake());
21 assert!(cfg.column_case().is_snake());
22 }
23
24 #[test]
25 fn overrides_work_via_struct_update() {
26 let cfg = VespertideConfig {
27 models_dir: PathBuf::from("custom_models"),
28 migrations_dir: PathBuf::from("custom_migrations"),
29 table_naming_case: NameCase::Camel,
30 column_naming_case: NameCase::Pascal,
31 ..Default::default()
32 };
33
34 assert_eq!(cfg.models_dir(), Path::new("custom_models"));
35 assert_eq!(cfg.migrations_dir(), Path::new("custom_migrations"));
36 assert!(cfg.table_case().is_camel());
37 assert!(cfg.column_case().is_pascal());
38 }
39
40 #[test]
41 fn seaorm_config_default_has_vespera_schema() {
42 let cfg = SeaOrmConfig::default();
43 assert_eq!(cfg.extra_enum_derives(), &["vespera::Schema".to_string()]);
44 assert!(cfg.extra_model_derives().is_empty());
45 }
46
47 #[test]
48 fn seaorm_config_accessors() {
49 let cfg = SeaOrmConfig {
50 extra_enum_derives: vec!["A".to_string(), "B".to_string()],
51 extra_model_derives: vec!["C".to_string()],
52 ..Default::default()
53 };
54 assert_eq!(cfg.extra_enum_derives(), &["A", "B"]);
55 assert_eq!(cfg.extra_model_derives(), &["C"]);
56 }
57
58 #[test]
59 fn vespertide_config_seaorm_accessor() {
60 let cfg = VespertideConfig::default();
61 let seaorm = cfg.seaorm();
62 assert_eq!(
63 seaorm.extra_enum_derives(),
64 &["vespera::Schema".to_string()]
65 );
66 }
67
68 #[test]
69 fn seaorm_config_deserialize_with_defaults() {
70 let json = r#"{}"#;
71 let cfg: SeaOrmConfig = serde_json::from_str(json).unwrap();
72 assert_eq!(cfg.extra_enum_derives(), &["vespera::Schema".to_string()]);
73 assert!(cfg.extra_model_derives().is_empty());
74 }
75
76 #[test]
77 fn seaorm_config_deserialize_with_custom_values() {
78 let json = r#"{"extraEnumDerives": ["Custom"], "extraModelDerives": ["Model"]}"#;
79 let cfg: SeaOrmConfig = serde_json::from_str(json).unwrap();
80 assert_eq!(cfg.extra_enum_derives(), &["Custom"]);
81 assert_eq!(cfg.extra_model_derives(), &["Model"]);
82 }
83
84 #[test]
85 fn vespertide_config_deserialize_with_seaorm() {
86 let json = r#"{
87 "modelsDir": "models",
88 "migrationsDir": "migrations",
89 "tableNamingCase": "snake",
90 "columnNamingCase": "snake",
91 "seaorm": {
92 "extraEnumDerives": ["MyDerive"]
93 }
94 }"#;
95 let cfg: VespertideConfig = serde_json::from_str(json).unwrap();
96 assert_eq!(cfg.seaorm().extra_enum_derives(), &["MyDerive"]);
97 }
98}