workspacer_crate/
mock_crate_config.rs1crate::ix!();
3
4#[derive(Getters,Clone,Debug)]
6#[getset(get="pub")]
7pub struct CrateConfig {
8 name: String,
9 add_readme: bool,
10 add_src_files: bool,
11 add_test_files: bool,
12
13 src_file_content: Option<String>,
15}
16
17impl CrateConfig {
18
19 pub fn new(name: &str) -> Self {
21 Self {
22 name: name.to_string(),
23 add_readme: false,
24 add_src_files: false,
25 add_test_files: false,
26 src_file_content: None,
27 }
28 }
29
30 pub fn with_src_files_content<S: Into<String>>(mut self, content: S) -> Self {
32 self.add_src_files = true; self.src_file_content = Some(content.into());
34 self
35 }
36
37 pub fn with_readme(mut self) -> Self {
39 self.add_readme = true;
40 self
41 }
42
43 pub fn with_src_files(mut self) -> Self {
45 self.add_src_files = true;
46 self
47 }
48
49 pub fn with_test_files(mut self) -> Self {
51 self.add_test_files = true;
52 self
53 }
54
55 pub fn has_readme(&self) -> bool {
57 self.add_readme
58 }
59
60 pub fn has_src_files(&self) -> bool {
62 self.add_src_files
63 }
64
65 pub fn has_test_files(&self) -> bool {
67 self.add_test_files
68 }
69}
70
71#[cfg(test)]
72mod test_crate_config {
73 use super::*;
74
75 #[test]
78 fn test_new_crate_config_defaults() {
79 let config = CrateConfig::new("example_crate");
80
81 assert_eq!(config.name(), "example_crate", "Crate name should match constructor input");
83
84 assert!(!config.has_readme(), "Expected no README by default");
86 assert!(!config.has_src_files(), "Expected no src files by default");
87 assert!(!config.has_test_files(), "Expected no test files by default");
88 }
89
90 #[test]
93 fn test_crate_config_with_readme_src_and_tests() {
94 let config = CrateConfig::new("my_crate")
95 .with_readme()
96 .with_src_files()
97 .with_test_files();
98
99 assert!(config.has_readme(), "Expected README to be set");
101 assert!(config.has_src_files(), "Expected src files to be set");
102 assert!(config.has_test_files(), "Expected test files to be set");
103 }
104
105 #[test]
107 fn test_crate_config_partial_flags() {
108 let config = CrateConfig::new("partial_crate")
109 .with_readme()
110 .with_src_files();
111 assert!(config.has_readme(), "Expected README to be set");
114 assert!(config.has_src_files(), "Expected src files to be set");
115 assert!(!config.has_test_files(), "Did not set test files, should remain false");
116 }
117
118 #[test]
120 fn test_name_is_unaffected_by_flags() {
121 let original_name = "unchanged_crate_name";
122 let config = CrateConfig::new(original_name)
123 .with_readme()
124 .with_test_files();
125
126 assert_eq!(config.name(), original_name, "Name should remain unchanged");
127 }
128
129 #[test]
132 fn test_getter_vs_builder_fields() {
133 let config = CrateConfig::new("getter_vs_builder")
134 .with_readme()
135 .with_src_files();
136
137 assert!(config.has_readme(), "has_readme() should match the builder");
138 assert!(config.add_readme(), "add_readme() raw field should also be true");
139 assert!(config.add_src_files(), "add_src_files() raw field should also be true");
140 assert!(!config.add_test_files(), "didn't enable test files, should be false");
141 }
142}