summaryrefslogtreecommitdiffstats
path: root/cli/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-02 20:59:39 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-02 20:59:39 +0200
commit108bb5e407e68651f7bcee13e2a01889eae6af88 (patch)
tree658e27fc1a23602b80406409d69ac02394b5d0c5 /cli/src
parent50737cdbc4acabc083c547f20584bf33f349cbb3 (diff)
downloadmoney-108bb5e407e68651f7bcee13e2a01889eae6af88.tar.gz
test date
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/search.rs65
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],
+ );
}
}