diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 20:59:39 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 20:59:39 +0200 |
| commit | 108bb5e407e68651f7bcee13e2a01889eae6af88 (patch) | |
| tree | 658e27fc1a23602b80406409d69ac02394b5d0c5 /cli/src | |
| parent | 50737cdbc4acabc083c547f20584bf33f349cbb3 (diff) | |
| download | money-108bb5e407e68651f7bcee13e2a01889eae6af88.tar.gz | |
test date
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/search.rs | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs index c9b8adb..3dce777 100644 --- a/cli/src/search.rs +++ b/cli/src/search.rs @@ -104,6 +104,7 @@ pub enum Filter { Subtract(Constraint), } +#[derive(Clone)] pub struct Search<'t> { filtered: Vec<usize>, transactions: &'t [Transaction], @@ -197,7 +198,8 @@ impl<'t> Search<'t> { mod test { use chrono::NaiveDate; - use crate::{search::{Constraint, Filter, Search}, transaction::{Transaction, TransactionKind}}; + use crate::search::{Constraint, DateIsh, Filter, Search}; + use crate::transaction::{Transaction, TransactionKind}; fn transaction(desc_id: u32) -> Transaction { Transaction { @@ -211,6 +213,10 @@ mod test { } } + fn transaction_id(transaction: &Transaction) -> u32 { + transaction.description.parse().unwrap() + } + #[test] fn category() { let transactions = vec![ @@ -233,5 +239,62 @@ mod test { let category_filter = Filter::Intersect(Constraint::Category("C1".to_string())); search = search.apply(category_filter); assert_eq!(search.get().len(), 2); + assert_eq!( + search.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![0, 1], + ); + } + + #[test] + fn date() { + let transactions = vec![ + Transaction { + date: NaiveDate::from_ymd(2021, 01, 04), + ..transaction(0) + }, + Transaction { + date: NaiveDate::from_ymd(2021, 01, 05), + ..transaction(1) + }, + Transaction { + date: NaiveDate::from_ymd(2021, 01, 06), + ..transaction(2) + }, + Transaction { + date: NaiveDate::from_ymd(2021, 01, 07), + ..transaction(3) + }, + ]; + let search = Search::new(&transactions); + assert_eq!(search.get().len(), 4); + + let date = DateIsh::Absolute(NaiveDate::from_ymd(2021, 01, 05)); + + let mut search_before = search.clone(); + let before_filter = Filter::Intersect(Constraint::Before(date.clone())); + search_before = search_before.apply(before_filter); + assert_eq!(search_before.get().len(), 1); + assert_eq!( + search_before.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![0], + ); + + let mut search_after = search.clone(); + let after_filter = Filter::Intersect(Constraint::After(date.clone())); + search_after = search_after.apply(after_filter); + assert_eq!(search_after.get().len(), 3); + assert_eq!( + search_after.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![1, 2, 3], + ); + + let mut search_on = search.clone(); + let on_filter = Filter::Intersect(Constraint::On(date.clone())); + search_on = search_on.apply(on_filter); + assert_eq!(search_on.get().len(), 1); + assert_eq!( + search_on.get().iter().map(|t| transaction_id(t)).collect::<Vec<_>>(), + vec![1], + ); } } |
