summaryrefslogtreecommitdiffstats
path: root/cli/src/search.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src/search.rs')
-rw-r--r--cli/src/search.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs
index 476d252..4047c4b 100644
--- a/cli/src/search.rs
+++ b/cli/src/search.rs
@@ -194,3 +194,46 @@ impl<'t> Search<'t> {
self
}
}
+
+#[cfg(test)]
+mod test {
+ use chrono::NaiveDate;
+
+ use crate::{search::{Constraint, Filter, Search}, transaction::{Transaction, TransactionKind}};
+
+ fn transaction(desc_id: u32) -> Transaction {
+ Transaction {
+ description: format!("{}", desc_id),
+ date: NaiveDate::from_ymd(2021, 01, 01),
+ category: "category".to_string(),
+ amount: 100.into(),
+ kind: TransactionKind::Expense,
+ from: "from".to_string(),
+ to: "to".to_string(),
+ }
+ }
+
+ #[test]
+ fn category() {
+ let transactions = vec![
+ Transaction {
+ category: "C1".to_string(),
+ ..transaction(0)
+ },
+ Transaction {
+ category: "C1".to_string(),
+ ..transaction(1)
+ },
+ Transaction {
+ category: "C2".to_string(),
+ ..transaction(2)
+ },
+ ];
+ let mut search = Search::new(&transactions);
+
+ assert_eq!(search.get().len(), 3);
+ let category_filter = Filter::Intersect(Constraint::Category("C1".to_string()));
+ search = category_filter.apply(search);
+ assert_eq!(search.get().len(), 2);
+ }
+}