summaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-02 21:12:54 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-02 21:12:54 +0200
commit513e8cce9b681a3f78e5b779e98f91caaf69e7d3 (patch)
tree44e6d979b1af6857c261640e2c7ba51f7bafa663 /cli
parent108bb5e407e68651f7bcee13e2a01889eae6af88 (diff)
downloadmoney-513e8cce9b681a3f78e5b779e98f91caaf69e7d3.tar.gz
test amount
Diffstat (limited to 'cli')
-rw-r--r--cli/src/search.rs71
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],
+ );
+ }
}