torrust_tracker_deployer_lib/presentation/cli/views/
verbosity.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default)]
21pub enum VerbosityLevel {
22 Silent,
24 Quiet,
26 #[default]
28 Normal,
29 Verbose,
31 VeryVerbose,
33 Debug,
35}
36
37pub(super) struct VerbosityFilter {
42 level: VerbosityLevel,
43}
44
45impl VerbosityFilter {
46 pub(super) fn new(level: VerbosityLevel) -> Self {
48 Self { level }
49 }
50
51 pub(super) fn should_show(&self, required_level: VerbosityLevel) -> bool {
53 self.level >= required_level
54 }
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn it_should_show_only_quiet_messages_when_filter_is_set_to_quiet_level() {
63 let filter = VerbosityFilter::new(VerbosityLevel::Quiet);
64
65 assert!(filter.should_show(VerbosityLevel::Quiet));
66 assert!(!filter.should_show(VerbosityLevel::Normal));
67 assert!(!filter.should_show(VerbosityLevel::Verbose));
68 }
69
70 #[test]
71 fn it_should_show_quiet_and_normal_messages_when_filter_is_set_to_normal_level() {
72 let filter = VerbosityFilter::new(VerbosityLevel::Normal);
73
74 assert!(filter.should_show(VerbosityLevel::Quiet));
75 assert!(filter.should_show(VerbosityLevel::Normal));
76 assert!(!filter.should_show(VerbosityLevel::Verbose));
77 }
78
79 #[test]
80 fn it_should_show_messages_up_to_verbose_when_filter_is_set_to_verbose_level() {
81 let filter = VerbosityFilter::new(VerbosityLevel::Verbose);
82
83 assert!(filter.should_show(VerbosityLevel::Quiet));
84 assert!(filter.should_show(VerbosityLevel::Normal));
85 assert!(filter.should_show(VerbosityLevel::Verbose));
86 assert!(!filter.should_show(VerbosityLevel::VeryVerbose));
87 }
88
89 #[test]
90 fn it_should_show_all_messages_when_filter_is_set_to_debug_level() {
91 let filter = VerbosityFilter::new(VerbosityLevel::Debug);
92
93 assert!(filter.should_show(VerbosityLevel::Quiet));
94 assert!(filter.should_show(VerbosityLevel::Normal));
95 assert!(filter.should_show(VerbosityLevel::Verbose));
96 assert!(filter.should_show(VerbosityLevel::VeryVerbose));
97 assert!(filter.should_show(VerbosityLevel::Debug));
98 }
99
100 #[test]
101 fn it_should_order_verbosity_levels_from_quiet_to_debug() {
102 assert!(VerbosityLevel::Quiet < VerbosityLevel::Normal);
103 assert!(VerbosityLevel::Normal < VerbosityLevel::Verbose);
104 assert!(VerbosityLevel::Verbose < VerbosityLevel::VeryVerbose);
105 assert!(VerbosityLevel::VeryVerbose < VerbosityLevel::Debug);
106 }
107
108 #[test]
109 fn it_should_default_to_normal_level_when_using_default() {
110 let level = VerbosityLevel::default();
111
112 assert_eq!(level, VerbosityLevel::Normal);
113 }
114
115 #[test]
116 fn it_should_compare_equal_when_verbosity_levels_are_same() {
117 assert_eq!(VerbosityLevel::Normal, VerbosityLevel::Normal);
118 }
119
120 #[test]
121 fn it_should_compare_not_equal_when_verbosity_levels_are_different() {
122 assert_ne!(VerbosityLevel::Normal, VerbosityLevel::Verbose);
123 }
124
125 #[test]
126 fn it_should_support_ordering_comparisons_with_greater_or_equal() {
127 let normal = VerbosityLevel::Normal;
128
129 assert!(normal >= VerbosityLevel::Quiet);
130 assert!(normal >= VerbosityLevel::Normal);
131 }
132
133 #[test]
134 fn it_should_support_ordering_comparisons_with_less_than() {
135 let normal = VerbosityLevel::Normal;
136
137 assert!(normal < VerbosityLevel::Verbose);
138 }
139}