diff options
Diffstat (limited to 'cli/src/search.rs')
| -rw-r--r-- | cli/src/search.rs | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs index 3dce777..e838271 100644 --- a/cli/src/search.rs +++ b/cli/src/search.rs @@ -198,7 +198,7 @@ impl<'t> Search<'t> { mod test { use chrono::NaiveDate; - use crate::search::{Constraint, DateIsh, Filter, Search}; + use crate::search::{Comparison, Constraint, DateIsh, Filter, Search}; use crate::transaction::{Transaction, TransactionKind}; fn transaction(desc_id: u32) -> Transaction { @@ -297,4 +297,73 @@ mod test { vec![1], ); } + + #[test] + fn amount() { + let transactions = vec![ + Transaction { + amount: 150.into(), + ..transaction(0) + }, + Transaction { + amount: 160.into(), + ..transaction(1) + }, + Transaction { + amount: 170.into(), + ..transaction(2) + }, + Transaction { + amount: 180.into(), + ..transaction(3) + }, + ]; + let search = Search::new(&transactions); + assert_eq!(search.get().len(), 4); + + let mut search_less = search.clone(); + let less_filter = Filter::Intersect(Constraint::AmountCompare(160.into(), Comparison::Less)); + search_less = search_less.apply(less_filter); + assert_eq!(search_less.get().len(), 1); + assert_eq!( + search_less.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![0], + ); + + let mut search_less_eq = search.clone(); + let less_eq_filter = Filter::Intersect(Constraint::AmountCompare(160.into(), Comparison::LessOrEqual)); + search_less_eq = search_less_eq.apply(less_eq_filter); + assert_eq!(search_less_eq.get().len(), 2); + assert_eq!( + search_less_eq.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![0, 1], + ); + + let mut search_eq = search.clone(); + let eq_filter = Filter::Intersect(Constraint::AmountCompare(160.into(), Comparison::Equal)); + search_eq = search_eq.apply(eq_filter); + assert_eq!(search_eq.get().len(), 1); + assert_eq!( + search_eq.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![1], + ); + + let mut search_greater = search.clone(); + let greater_filter = Filter::Intersect(Constraint::AmountCompare(160.into(), Comparison::Greater)); + search_greater = search_greater.apply(greater_filter); + assert_eq!(search_greater.get().len(), 2); + assert_eq!( + search_greater.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![2, 3], + ); + + let mut search_greater_eq = search.clone(); + let greater_eq_filter = Filter::Intersect(Constraint::AmountCompare(160.into(), Comparison::GreaterOrEqual)); + search_greater_eq = search_greater_eq.apply(greater_eq_filter); + assert_eq!(search_greater_eq.get().len(), 3); + assert_eq!( + search_greater_eq.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![1, 2, 3], + ); + } } |
