From cd27308cfa285d532e52b1d04be0d67da8637237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Sun, 23 Feb 2025 16:32:42 +0100 Subject: [PATCH] feat: Implement filter_tags function with comprehensive unit tests --- src/tag_engine.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/tag_engine.rs b/src/tag_engine.rs index 7942ec8..8b03a4d 100644 --- a/src/tag_engine.rs +++ b/src/tag_engine.rs @@ -92,6 +92,12 @@ pub fn parse_tags(filename: &str) -> Result<(String, Vec, String), Parse Ok((base_name, tags, extension)) } +pub fn filter_tags(current: Vec, remove: &[String]) -> Vec { + current.into_iter() + .filter(|tag| !remove.contains(tag)) + .collect() +} + pub fn add_tags(current: Vec, new: Vec) -> Vec { let mut result = current; @@ -257,4 +263,28 @@ mod tests { assert_eq!(tags, vec!["tag1"]); assert_eq!(ext, ".txt"); } + + #[test] + fn test_filter_tags_multi_remove() { + let current = vec!["tag1".to_string(), "tag2".to_string(), "tag3".to_string()]; + let remove = vec!["tag1".to_string(), "tag3".to_string()]; + let result = filter_tags(current, &remove); + assert_eq!(result, vec!["tag2"]); + } + + #[test] + fn test_filter_tags_non_existent() { + let current = vec!["tag1".to_string(), "tag2".to_string()]; + let remove = vec!["tag3".to_string()]; + let result = filter_tags(current, &remove); + assert_eq!(result, vec!["tag1", "tag2"]); + } + + #[test] + fn test_filter_tags_empty_result() { + let current = vec!["tag1".to_string(), "tag2".to_string()]; + let remove = vec!["tag1".to_string(), "tag2".to_string()]; + let result = filter_tags(current, &remove); + assert!(result.is_empty()); + } }