mod message_age;
pub use message_age::MessageAge;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Retention {
age: MessageAge,
generate_label: bool,
}
impl Default for Retention {
fn default() -> Self {
Self {
age: MessageAge::Years(5),
generate_label: true,
}
}
}
impl Retention {
pub fn new(age: MessageAge, generate_label: bool) -> Self {
Retention {
age,
generate_label,
}
}
#[must_use]
pub fn age(&self) -> &MessageAge {
&self.age
}
#[must_use]
pub fn generate_label(&self) -> bool {
self.generate_label
}
pub fn set_generate_label(&mut self, generate_label: bool) {
self.generate_label = generate_label;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_retention_new() {
let age = MessageAge::Days(30);
let retention = Retention::new(age.clone(), true);
assert_eq!(retention.age(), &age);
assert!(retention.generate_label());
}
#[test]
fn test_retention_new_no_label() {
let age = MessageAge::Years(1);
let retention = Retention::new(age.clone(), false);
assert_eq!(retention.age(), &age);
assert!(!retention.generate_label());
}
#[test]
fn test_retention_set_generate_label() {
let age = MessageAge::Months(6);
let mut retention = Retention::new(age.clone(), false);
assert!(!retention.generate_label());
retention.set_generate_label(true);
assert!(retention.generate_label());
retention.set_generate_label(false);
assert!(!retention.generate_label());
}
#[test]
fn test_retention_clone() {
let age = MessageAge::Weeks(2);
let original = Retention::new(age.clone(), true);
let cloned = original.clone();
assert_eq!(original, cloned);
assert_eq!(original.age(), cloned.age());
assert_eq!(original.generate_label(), cloned.generate_label());
}
#[test]
fn test_retention_equality() {
let age1 = MessageAge::Days(30);
let age2 = MessageAge::Days(30);
let age3 = MessageAge::Days(31);
let retention1 = Retention::new(age1, true);
let retention2 = Retention::new(age2, true);
let retention3 = Retention::new(age3, true);
let retention4 = Retention::new(MessageAge::Days(30), false);
assert_eq!(retention1, retention2);
assert_ne!(retention1, retention3); assert_ne!(retention1, retention4); }
#[test]
fn test_retention_default() {
let default = Retention::default();
assert_eq!(default.age(), &MessageAge::Years(5));
assert!(default.generate_label());
}
#[test]
fn test_retention_with_different_age_types() {
let retention_days = Retention::new(MessageAge::Days(90), true);
let retention_weeks = Retention::new(MessageAge::Weeks(12), false);
let retention_months = Retention::new(MessageAge::Months(3), true);
let retention_years = Retention::new(MessageAge::Years(1), false);
assert_eq!(retention_days.age().period_type(), "days");
assert_eq!(retention_weeks.age().period_type(), "weeks");
assert_eq!(retention_months.age().period_type(), "months");
assert_eq!(retention_years.age().period_type(), "years");
assert!(retention_days.generate_label());
assert!(!retention_weeks.generate_label());
assert!(retention_months.generate_label());
assert!(!retention_years.generate_label());
}
#[test]
fn test_retention_debug() {
let retention = Retention::new(MessageAge::Days(30), true);
let debug_str = format!("{retention:?}");
assert!(debug_str.contains("Retention"));
assert!(debug_str.contains("Days(30)"));
assert!(debug_str.contains("true"));
}
}