1mod message_age;
2
3pub use message_age::MessageAge;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash)]
23pub struct Retention {
24 age: MessageAge,
25 generate_label: bool,
26}
27
28impl Default for Retention {
29 fn default() -> Self {
30 Self {
31 age: MessageAge::Years(5),
32 generate_label: true,
33 }
34 }
35}
36
37impl Retention {
38 pub fn new(age: MessageAge, generate_label: bool) -> Self {
57 Retention {
58 age,
59 generate_label,
60 }
61 }
62
63 #[must_use]
74 pub fn age(&self) -> &MessageAge {
75 &self.age
76 }
77
78 #[must_use]
95 pub fn generate_label(&self) -> bool {
96 self.generate_label
97 }
98
99 pub fn set_generate_label(&mut self, generate_label: bool) {
111 self.generate_label = generate_label;
112 }
113}
114
115#[cfg(test)]
116mod tests {
117 use super::*;
118
119 #[test]
120 fn test_retention_new() {
121 let age = MessageAge::Days(30);
122 let retention = Retention::new(age.clone(), true);
123
124 assert_eq!(retention.age(), &age);
125 assert!(retention.generate_label());
126 }
127
128 #[test]
129 fn test_retention_new_no_label() {
130 let age = MessageAge::Years(1);
131 let retention = Retention::new(age.clone(), false);
132
133 assert_eq!(retention.age(), &age);
134 assert!(!retention.generate_label());
135 }
136
137 #[test]
138 fn test_retention_set_generate_label() {
139 let age = MessageAge::Months(6);
140 let mut retention = Retention::new(age.clone(), false);
141
142 assert!(!retention.generate_label());
143
144 retention.set_generate_label(true);
145 assert!(retention.generate_label());
146
147 retention.set_generate_label(false);
148 assert!(!retention.generate_label());
149 }
150
151 #[test]
152 fn test_retention_clone() {
153 let age = MessageAge::Weeks(2);
154 let original = Retention::new(age.clone(), true);
155 let cloned = original.clone();
156
157 assert_eq!(original, cloned);
158 assert_eq!(original.age(), cloned.age());
159 assert_eq!(original.generate_label(), cloned.generate_label());
160 }
161
162 #[test]
163 fn test_retention_equality() {
164 let age1 = MessageAge::Days(30);
165 let age2 = MessageAge::Days(30);
166 let age3 = MessageAge::Days(31);
167
168 let retention1 = Retention::new(age1, true);
169 let retention2 = Retention::new(age2, true);
170 let retention3 = Retention::new(age3, true);
171 let retention4 = Retention::new(MessageAge::Days(30), false);
172
173 assert_eq!(retention1, retention2);
174 assert_ne!(retention1, retention3); assert_ne!(retention1, retention4); }
177
178 #[test]
179 fn test_retention_default() {
180 let default = Retention::default();
181
182 assert_eq!(default.age(), &MessageAge::Years(5));
183 assert!(default.generate_label());
184 }
185
186 #[test]
187 fn test_retention_with_different_age_types() {
188 let retention_days = Retention::new(MessageAge::Days(90), true);
189 let retention_weeks = Retention::new(MessageAge::Weeks(12), false);
190 let retention_months = Retention::new(MessageAge::Months(3), true);
191 let retention_years = Retention::new(MessageAge::Years(1), false);
192
193 assert_eq!(retention_days.age().period_type(), "days");
194 assert_eq!(retention_weeks.age().period_type(), "weeks");
195 assert_eq!(retention_months.age().period_type(), "months");
196 assert_eq!(retention_years.age().period_type(), "years");
197
198 assert!(retention_days.generate_label());
199 assert!(!retention_weeks.generate_label());
200 assert!(retention_months.generate_label());
201 assert!(!retention_years.generate_label());
202 }
203
204 #[test]
205 fn test_retention_debug() {
206 let retention = Retention::new(MessageAge::Days(30), true);
207 let debug_str = format!("{retention:?}");
208
209 assert!(debug_str.contains("Retention"));
210 assert!(debug_str.contains("Days(30)"));
211 assert!(debug_str.contains("true"));
212 }
213}