Skip to main content

vespertide_config/
lib.rs

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}