diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 21:12:54 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 21:12:54 +0200 |
| commit | 513e8cce9b681a3f78e5b779e98f91caaf69e7d3 (patch) | |
| tree | 44e6d979b1af6857c261640e2c7ba51f7bafa663 | |
| parent | 108bb5e407e68651f7bcee13e2a01889eae6af88 (diff) | |
| download | money-513e8cce9b681a3f78e5b779e98f91caaf69e7d3.tar.gz | |
test amount
| -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], + ); + } } |
