style: format code with rustfmt
This commit is contained in:
committed by
Jeremiah Russell
parent
8f908df8f3
commit
2b420e53cb
157
src/rules.rs
157
src/rules.rs
@@ -196,15 +196,15 @@ impl Rules {
|
|||||||
label: Option<&str>,
|
label: Option<&str>,
|
||||||
delete: bool,
|
delete: bool,
|
||||||
) -> &mut Self {
|
) -> &mut Self {
|
||||||
let current_labels: Vec<String> = self.rules.values()
|
let current_labels: Vec<String> =
|
||||||
.flat_map(|rule| rule.labels())
|
self.rules.values().flat_map(|rule| rule.labels()).collect();
|
||||||
.collect();
|
|
||||||
|
|
||||||
if let Some(label_ref) = label
|
if let Some(label_ref) = label
|
||||||
&& current_labels.iter().any(|l| l == label_ref) {
|
&& current_labels.iter().any(|l| l == label_ref)
|
||||||
log::warn!("a rule already applies to label {label_ref}");
|
{
|
||||||
return self;
|
log::warn!("a rule already applies to label {label_ref}");
|
||||||
}
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
let id = if let Some((_, max)) = self.rules.iter().max_by_key(|(_, r)| r.id()) {
|
let id = if let Some((_, max)) = self.rules.iter().max_by_key(|(_, r)| r.id()) {
|
||||||
max.id() + 1
|
max.id() + 1
|
||||||
@@ -244,9 +244,7 @@ impl Rules {
|
|||||||
/// println!("Configured labels: {:?}", labels);
|
/// println!("Configured labels: {:?}", labels);
|
||||||
/// ```
|
/// ```
|
||||||
pub fn labels(&self) -> Vec<String> {
|
pub fn labels(&self) -> Vec<String> {
|
||||||
self.rules.values()
|
self.rules.values().flat_map(|rule| rule.labels()).collect()
|
||||||
.flat_map(|rule| rule.labels())
|
|
||||||
.collect()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Find the id of the rule that contains a label
|
/// Find the id of the rule that contains a label
|
||||||
@@ -494,11 +492,10 @@ impl Rules {
|
|||||||
/// * IO errors when writing to the file system
|
/// * IO errors when writing to the file system
|
||||||
/// * File system permission errors
|
/// * File system permission errors
|
||||||
pub fn save(&self) -> Result<()> {
|
pub fn save(&self) -> Result<()> {
|
||||||
let home_dir = env::home_dir().ok_or_else(|| {
|
let home_dir = env::home_dir()
|
||||||
Error::HomeExpansionFailed("~/.cull-gmail/rules.toml".to_string())
|
.ok_or_else(|| Error::HomeExpansionFailed("~/.cull-gmail/rules.toml".to_string()))?;
|
||||||
})?;
|
|
||||||
let path = PathBuf::new().join(home_dir).join(".cull-gmail/rules.toml");
|
let path = PathBuf::new().join(home_dir).join(".cull-gmail/rules.toml");
|
||||||
|
|
||||||
// Ensure directory exists
|
// Ensure directory exists
|
||||||
if let Some(parent) = path.parent() {
|
if let Some(parent) = path.parent() {
|
||||||
fs::create_dir_all(parent)?;
|
fs::create_dir_all(parent)?;
|
||||||
@@ -540,9 +537,8 @@ impl Rules {
|
|||||||
/// * TOML parsing errors if the file is malformed
|
/// * TOML parsing errors if the file is malformed
|
||||||
/// * File not found errors if the configuration doesn't exist
|
/// * File not found errors if the configuration doesn't exist
|
||||||
pub fn load() -> Result<Rules> {
|
pub fn load() -> Result<Rules> {
|
||||||
let home_dir = env::home_dir().ok_or_else(|| {
|
let home_dir = env::home_dir()
|
||||||
Error::HomeExpansionFailed("~/.cull-gmail/rules.toml".to_string())
|
.ok_or_else(|| Error::HomeExpansionFailed("~/.cull-gmail/rules.toml".to_string()))?;
|
||||||
})?;
|
|
||||||
let path = PathBuf::new().join(home_dir).join(".cull-gmail/rules.toml");
|
let path = PathBuf::new().join(home_dir).join(".cull-gmail/rules.toml");
|
||||||
log::trace!("Loading config from {}", path.display());
|
log::trace!("Loading config from {}", path.display());
|
||||||
|
|
||||||
@@ -604,13 +600,16 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_rules_new_creates_default_rules() {
|
fn test_rules_new_creates_default_rules() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let rules = Rules::new();
|
let rules = Rules::new();
|
||||||
|
|
||||||
// Should have some default rules
|
// Should have some default rules
|
||||||
let labels = rules.labels();
|
let labels = rules.labels();
|
||||||
assert!(!labels.is_empty(), "Default rules should create some labels");
|
assert!(
|
||||||
|
!labels.is_empty(),
|
||||||
|
"Default rules should create some labels"
|
||||||
|
);
|
||||||
|
|
||||||
// Should contain the expected retention labels
|
// Should contain the expected retention labels
|
||||||
assert!(labels.iter().any(|l| l.contains("retention/1-years")));
|
assert!(labels.iter().any(|l| l.contains("retention/1-years")));
|
||||||
assert!(labels.iter().any(|l| l.contains("retention/1-weeks")));
|
assert!(labels.iter().any(|l| l.contains("retention/1-weeks")));
|
||||||
@@ -621,10 +620,10 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_rules_default_same_as_new() {
|
fn test_rules_default_same_as_new() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let rules_new = Rules::new();
|
let rules_new = Rules::new();
|
||||||
let rules_default = Rules::default();
|
let rules_default = Rules::default();
|
||||||
|
|
||||||
// Both should have the same number of rules
|
// Both should have the same number of rules
|
||||||
assert_eq!(rules_new.labels().len(), rules_default.labels().len());
|
assert_eq!(rules_new.labels().len(), rules_default.labels().len());
|
||||||
}
|
}
|
||||||
@@ -632,13 +631,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_rule_with_label() {
|
fn test_add_rule_with_label() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let initial_label_count = rules.labels().len();
|
let initial_label_count = rules.labels().len();
|
||||||
|
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, Some("test-label"), false);
|
rules.add_rule(retention, Some("test-label"), false);
|
||||||
|
|
||||||
let labels = rules.labels();
|
let labels = rules.labels();
|
||||||
assert!(labels.contains(&"test-label".to_string()));
|
assert!(labels.contains(&"test-label".to_string()));
|
||||||
assert_eq!(labels.len(), initial_label_count + 1);
|
assert_eq!(labels.len(), initial_label_count + 1);
|
||||||
@@ -647,13 +646,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_rule_without_label() {
|
fn test_add_rule_without_label() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let initial_label_count = rules.labels().len();
|
let initial_label_count = rules.labels().len();
|
||||||
|
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, None, false);
|
rules.add_rule(retention, None, false);
|
||||||
|
|
||||||
// Should not add any new labels since no label specified and generate_label is false
|
// Should not add any new labels since no label specified and generate_label is false
|
||||||
let labels = rules.labels();
|
let labels = rules.labels();
|
||||||
assert_eq!(labels.len(), initial_label_count);
|
assert_eq!(labels.len(), initial_label_count);
|
||||||
@@ -662,11 +661,11 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_rule_with_delete_action() {
|
fn test_add_rule_with_delete_action() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention = Retention::new(MessageAge::Days(7), false);
|
let retention = Retention::new(MessageAge::Days(7), false);
|
||||||
rules.add_rule(retention, Some("delete-test"), true);
|
rules.add_rule(retention, Some("delete-test"), true);
|
||||||
|
|
||||||
let rules_by_label = rules.get_rules_by_label();
|
let rules_by_label = rules.get_rules_by_label();
|
||||||
let rule = rules_by_label.get("delete-test").unwrap();
|
let rule = rules_by_label.get("delete-test").unwrap();
|
||||||
assert_eq!(rule.action(), Some(EolAction::Delete));
|
assert_eq!(rule.action(), Some(EolAction::Delete));
|
||||||
@@ -675,17 +674,17 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_duplicate_label_warns_and_skips() {
|
fn test_add_duplicate_label_warns_and_skips() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention1 = Retention::new(MessageAge::Days(30), false);
|
let retention1 = Retention::new(MessageAge::Days(30), false);
|
||||||
let retention2 = Retention::new(MessageAge::Days(60), false);
|
let retention2 = Retention::new(MessageAge::Days(60), false);
|
||||||
|
|
||||||
rules.add_rule(retention1, Some("duplicate"), false);
|
rules.add_rule(retention1, Some("duplicate"), false);
|
||||||
let initial_count = rules.labels().len();
|
let initial_count = rules.labels().len();
|
||||||
|
|
||||||
// Try to add another rule with the same label
|
// Try to add another rule with the same label
|
||||||
rules.add_rule(retention2, Some("duplicate"), false);
|
rules.add_rule(retention2, Some("duplicate"), false);
|
||||||
|
|
||||||
// Should not increase the count of labels
|
// Should not increase the count of labels
|
||||||
assert_eq!(rules.labels().len(), initial_count);
|
assert_eq!(rules.labels().len(), initial_count);
|
||||||
}
|
}
|
||||||
@@ -693,9 +692,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_get_rule_existing() {
|
fn test_get_rule_existing() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let rules = Rules::new();
|
let rules = Rules::new();
|
||||||
|
|
||||||
// Default rules should have ID 1
|
// Default rules should have ID 1
|
||||||
let rule = rules.get_rule(1);
|
let rule = rules.get_rule(1);
|
||||||
assert!(rule.is_some());
|
assert!(rule.is_some());
|
||||||
@@ -705,9 +704,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_get_rule_nonexistent() {
|
fn test_get_rule_nonexistent() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let rules = Rules::new();
|
let rules = Rules::new();
|
||||||
|
|
||||||
// ID 999 should not exist
|
// ID 999 should not exist
|
||||||
let rule = rules.get_rule(999);
|
let rule = rules.get_rule(999);
|
||||||
assert!(rule.is_none());
|
assert!(rule.is_none());
|
||||||
@@ -716,11 +715,11 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_labels_returns_all_labels() {
|
fn test_labels_returns_all_labels() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, Some("custom-label"), false);
|
rules.add_rule(retention, Some("custom-label"), false);
|
||||||
|
|
||||||
let labels = rules.labels();
|
let labels = rules.labels();
|
||||||
assert!(labels.contains(&"custom-label".to_string()));
|
assert!(labels.contains(&"custom-label".to_string()));
|
||||||
}
|
}
|
||||||
@@ -728,11 +727,11 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_get_rules_by_label() {
|
fn test_get_rules_by_label() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, Some("mapped-label"), false);
|
rules.add_rule(retention, Some("mapped-label"), false);
|
||||||
|
|
||||||
let label_map = rules.get_rules_by_label();
|
let label_map = rules.get_rules_by_label();
|
||||||
let rule = label_map.get("mapped-label");
|
let rule = label_map.get("mapped-label");
|
||||||
assert!(rule.is_some());
|
assert!(rule.is_some());
|
||||||
@@ -742,13 +741,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_rule_by_id_existing() {
|
fn test_remove_rule_by_id_existing() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
// Remove a default rule (assuming ID 1 exists)
|
// Remove a default rule (assuming ID 1 exists)
|
||||||
let result = rules.remove_rule_by_id(1);
|
let result = rules.remove_rule_by_id(1);
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
// Rule should no longer exist
|
// Rule should no longer exist
|
||||||
assert!(rules.get_rule(1).is_none());
|
assert!(rules.get_rule(1).is_none());
|
||||||
}
|
}
|
||||||
@@ -756,9 +755,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_rule_by_id_nonexistent() {
|
fn test_remove_rule_by_id_nonexistent() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
// Removing non-existent rule should still succeed
|
// Removing non-existent rule should still succeed
|
||||||
let result = rules.remove_rule_by_id(999);
|
let result = rules.remove_rule_by_id(999);
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
@@ -767,14 +766,14 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_rule_by_label_existing() {
|
fn test_remove_rule_by_label_existing() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, Some("remove-me"), false);
|
rules.add_rule(retention, Some("remove-me"), false);
|
||||||
|
|
||||||
let result = rules.remove_rule_by_label("remove-me");
|
let result = rules.remove_rule_by_label("remove-me");
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
// Label should no longer exist
|
// Label should no longer exist
|
||||||
let labels = rules.labels();
|
let labels = rules.labels();
|
||||||
assert!(!labels.contains(&"remove-me".to_string()));
|
assert!(!labels.contains(&"remove-me".to_string()));
|
||||||
@@ -783,12 +782,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_rule_by_label_nonexistent() {
|
fn test_remove_rule_by_label_nonexistent() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
let result = rules.remove_rule_by_label("nonexistent-label");
|
let result = rules.remove_rule_by_label("nonexistent-label");
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
|
|
||||||
match result.unwrap_err() {
|
match result.unwrap_err() {
|
||||||
Error::LabelNotFoundInRules(label) => {
|
Error::LabelNotFoundInRules(label) => {
|
||||||
assert_eq!(label, "nonexistent-label");
|
assert_eq!(label, "nonexistent-label");
|
||||||
@@ -800,13 +799,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_label_to_rule_existing_rule() {
|
fn test_add_label_to_rule_existing_rule() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
// Add label to existing rule (ID 1)
|
// Add label to existing rule (ID 1)
|
||||||
let result = rules.add_label_to_rule(1, "new-label");
|
let result = rules.add_label_to_rule(1, "new-label");
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
let rule = rules.get_rule(1).unwrap();
|
let rule = rules.get_rule(1).unwrap();
|
||||||
assert!(rule.labels().contains(&"new-label".to_string()));
|
assert!(rule.labels().contains(&"new-label".to_string()));
|
||||||
}
|
}
|
||||||
@@ -814,12 +813,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_add_label_to_rule_nonexistent_rule() {
|
fn test_add_label_to_rule_nonexistent_rule() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
let result = rules.add_label_to_rule(999, "new-label");
|
let result = rules.add_label_to_rule(999, "new-label");
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
|
|
||||||
match result.unwrap_err() {
|
match result.unwrap_err() {
|
||||||
Error::RuleNotFound(id) => {
|
Error::RuleNotFound(id) => {
|
||||||
assert_eq!(id, 999);
|
assert_eq!(id, 999);
|
||||||
@@ -831,17 +830,17 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_label_from_rule_existing() {
|
fn test_remove_label_from_rule_existing() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
// First add a label
|
// First add a label
|
||||||
let result = rules.add_label_to_rule(1, "temp-label");
|
let result = rules.add_label_to_rule(1, "temp-label");
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
// Then remove it
|
// Then remove it
|
||||||
let result = rules.remove_label_from_rule(1, "temp-label");
|
let result = rules.remove_label_from_rule(1, "temp-label");
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
let rule = rules.get_rule(1).unwrap();
|
let rule = rules.get_rule(1).unwrap();
|
||||||
assert!(!rule.labels().contains(&"temp-label".to_string()));
|
assert!(!rule.labels().contains(&"temp-label".to_string()));
|
||||||
}
|
}
|
||||||
@@ -849,12 +848,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_remove_label_from_rule_nonexistent_rule() {
|
fn test_remove_label_from_rule_nonexistent_rule() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
let result = rules.remove_label_from_rule(999, "any-label");
|
let result = rules.remove_label_from_rule(999, "any-label");
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
|
|
||||||
match result.unwrap_err() {
|
match result.unwrap_err() {
|
||||||
Error::RuleNotFound(id) => {
|
Error::RuleNotFound(id) => {
|
||||||
assert_eq!(id, 999);
|
assert_eq!(id, 999);
|
||||||
@@ -866,13 +865,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_set_action_on_rule_existing() {
|
fn test_set_action_on_rule_existing() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
// Set action to Delete
|
// Set action to Delete
|
||||||
let result = rules.set_action_on_rule(1, &EolAction::Delete);
|
let result = rules.set_action_on_rule(1, &EolAction::Delete);
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
|
|
||||||
let rule = rules.get_rule(1).unwrap();
|
let rule = rules.get_rule(1).unwrap();
|
||||||
assert_eq!(rule.action(), Some(EolAction::Delete));
|
assert_eq!(rule.action(), Some(EolAction::Delete));
|
||||||
}
|
}
|
||||||
@@ -880,12 +879,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_set_action_on_rule_nonexistent() {
|
fn test_set_action_on_rule_nonexistent() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
|
|
||||||
let result = rules.set_action_on_rule(999, &EolAction::Delete);
|
let result = rules.set_action_on_rule(999, &EolAction::Delete);
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
|
|
||||||
match result.unwrap_err() {
|
match result.unwrap_err() {
|
||||||
Error::RuleNotFound(id) => {
|
Error::RuleNotFound(id) => {
|
||||||
assert_eq!(id, 999);
|
assert_eq!(id, 999);
|
||||||
@@ -897,9 +896,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_list_rules_succeeds() {
|
fn test_list_rules_succeeds() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let rules = Rules::new();
|
let rules = Rules::new();
|
||||||
|
|
||||||
// Should not panic or return error
|
// Should not panic or return error
|
||||||
let result = rules.list_rules();
|
let result = rules.list_rules();
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
@@ -911,19 +910,19 @@ mod tests {
|
|||||||
#[ignore = "Integration test that modifies file system"]
|
#[ignore = "Integration test that modifies file system"]
|
||||||
fn test_save_and_load_roundtrip() {
|
fn test_save_and_load_roundtrip() {
|
||||||
setup_test_environment();
|
setup_test_environment();
|
||||||
|
|
||||||
let mut rules = Rules::new();
|
let mut rules = Rules::new();
|
||||||
let retention = Retention::new(MessageAge::Days(30), false);
|
let retention = Retention::new(MessageAge::Days(30), false);
|
||||||
rules.add_rule(retention, Some("save-test"), false);
|
rules.add_rule(retention, Some("save-test"), false);
|
||||||
|
|
||||||
// Save to disk
|
// Save to disk
|
||||||
let save_result = rules.save();
|
let save_result = rules.save();
|
||||||
assert!(save_result.is_ok());
|
assert!(save_result.is_ok());
|
||||||
|
|
||||||
// Load from disk
|
// Load from disk
|
||||||
let loaded_rules = Rules::load();
|
let loaded_rules = Rules::load();
|
||||||
assert!(loaded_rules.is_ok());
|
assert!(loaded_rules.is_ok());
|
||||||
|
|
||||||
let loaded_rules = loaded_rules.unwrap();
|
let loaded_rules = loaded_rules.unwrap();
|
||||||
let labels = loaded_rules.labels();
|
let labels = loaded_rules.labels();
|
||||||
assert!(labels.contains(&"save-test".to_string()));
|
assert!(labels.contains(&"save-test".to_string()));
|
||||||
|
|||||||
@@ -477,8 +477,13 @@ mod test {
|
|||||||
fn test_eol_query_for_eol_rule_5_years() {
|
fn test_eol_query_for_eol_rule_5_years() {
|
||||||
let rule = build_test_rule(crate::MessageAge::Years(5));
|
let rule = build_test_rule(crate::MessageAge::Years(5));
|
||||||
|
|
||||||
let test_today = Local.with_ymd_and_hms(2025, 9, 15, 0, 0, 0).single().unwrap();
|
let test_today = Local
|
||||||
let query = rule.calculate_for_date(test_today).expect("Failed to calculate query");
|
.with_ymd_and_hms(2025, 9, 15, 0, 0, 0)
|
||||||
|
.single()
|
||||||
|
.unwrap();
|
||||||
|
let query = rule
|
||||||
|
.calculate_for_date(test_today)
|
||||||
|
.expect("Failed to calculate query");
|
||||||
|
|
||||||
assert_eq!("before: 2020-09-15", query);
|
assert_eq!("before: 2020-09-15", query);
|
||||||
}
|
}
|
||||||
@@ -487,8 +492,13 @@ mod test {
|
|||||||
fn test_eol_query_for_eol_rule_1_month() {
|
fn test_eol_query_for_eol_rule_1_month() {
|
||||||
let rule = build_test_rule(crate::MessageAge::Months(1));
|
let rule = build_test_rule(crate::MessageAge::Months(1));
|
||||||
|
|
||||||
let test_today = Local.with_ymd_and_hms(2025, 9, 15, 0, 0, 0).single().unwrap();
|
let test_today = Local
|
||||||
let query = rule.calculate_for_date(test_today).expect("Failed to calculate query");
|
.with_ymd_and_hms(2025, 9, 15, 0, 0, 0)
|
||||||
|
.single()
|
||||||
|
.unwrap();
|
||||||
|
let query = rule
|
||||||
|
.calculate_for_date(test_today)
|
||||||
|
.expect("Failed to calculate query");
|
||||||
|
|
||||||
assert_eq!("before: 2025-08-15", query);
|
assert_eq!("before: 2025-08-15", query);
|
||||||
}
|
}
|
||||||
@@ -497,8 +507,13 @@ mod test {
|
|||||||
fn test_eol_query_for_eol_rule_13_weeks() {
|
fn test_eol_query_for_eol_rule_13_weeks() {
|
||||||
let rule = build_test_rule(crate::MessageAge::Weeks(13));
|
let rule = build_test_rule(crate::MessageAge::Weeks(13));
|
||||||
|
|
||||||
let test_today = Local.with_ymd_and_hms(2025, 9, 15, 0, 0, 0).single().unwrap();
|
let test_today = Local
|
||||||
let query = rule.calculate_for_date(test_today).expect("Failed to calculate query");
|
.with_ymd_and_hms(2025, 9, 15, 0, 0, 0)
|
||||||
|
.single()
|
||||||
|
.unwrap();
|
||||||
|
let query = rule
|
||||||
|
.calculate_for_date(test_today)
|
||||||
|
.expect("Failed to calculate query");
|
||||||
|
|
||||||
assert_eq!("before: 2025-06-16", query);
|
assert_eq!("before: 2025-06-16", query);
|
||||||
}
|
}
|
||||||
@@ -507,8 +522,13 @@ mod test {
|
|||||||
fn test_eol_query_for_eol_rule_365_days() {
|
fn test_eol_query_for_eol_rule_365_days() {
|
||||||
let rule = build_test_rule(crate::MessageAge::Days(365));
|
let rule = build_test_rule(crate::MessageAge::Days(365));
|
||||||
|
|
||||||
let test_today = Local.with_ymd_and_hms(2025, 9, 15, 0, 0, 0).single().unwrap();
|
let test_today = Local
|
||||||
let query = rule.calculate_for_date(test_today).expect("Failed to calculate query");
|
.with_ymd_and_hms(2025, 9, 15, 0, 0, 0)
|
||||||
|
.single()
|
||||||
|
.unwrap();
|
||||||
|
let query = rule
|
||||||
|
.calculate_for_date(test_today)
|
||||||
|
.expect("Failed to calculate query");
|
||||||
|
|
||||||
assert_eq!("before: 2024-09-15", query);
|
assert_eq!("before: 2024-09-15", query);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user