summaryrefslogtreecommitdiff
path: root/actualbudget_queries/tests/common/payee_matchers.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-12 08:28:04 +0000
committerJoe Carstairs <me@joeac.net>2024-12-12 08:28:04 +0000
commit54894f9de9bad4fecb2a116d59a03cdd003f84c0 (patch)
tree6ce5517cecf23d4e93d7a381a374e1fa6c810cee /actualbudget_queries/tests/common/payee_matchers.rs
parent8a30bcbdf9264d235bf93da3df8e170cfde53d02 (diff)
Moves rust workspace to root
Diffstat (limited to 'actualbudget_queries/tests/common/payee_matchers.rs')
-rw-r--r--actualbudget_queries/tests/common/payee_matchers.rs124
1 files changed, 124 insertions, 0 deletions
diff --git a/actualbudget_queries/tests/common/payee_matchers.rs b/actualbudget_queries/tests/common/payee_matchers.rs
new file mode 100644
index 0000000..ccba204
--- /dev/null
+++ b/actualbudget_queries/tests/common/payee_matchers.rs
@@ -0,0 +1,124 @@
+use std::collections::HashMap;
+
+use actualbudget_models::{ActualbudgetAccount, ActualbudgetPayee};
+use anyhow::Context;
+
+use super::{account_names::ACCOUNT_NAMES_DICT, payee_names::PAYEE_NAMES_DICT};
+
+pub fn get_payee_matchers(
+) -> Vec<Box<dyn Fn(&ActualbudgetPayee, &HashMap<String, ActualbudgetAccount>) -> bool>> {
+ vec![
+ Box::new(|p, a| matches_bank_account_transfer_account(p, a)),
+ Box::new(|p, a| matches_cash_account_transfer_account(p, a)),
+ Box::new(|p, a| matches_category_transfers_transfer_account(p, a)),
+ Box::new(|p, a| matches_starting_balances(p, a)),
+ Box::new(|p, a| matches_employer(p, a)),
+ Box::new(|p, a| matches_tesco(p, a)),
+ ]
+}
+
+fn matches_bank_account_transfer_account(
+ payee: &ActualbudgetPayee,
+ accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ let bank_account = accounts
+ .get(ACCOUNT_NAMES_DICT.bank_account)
+ .with_context(|| "failed to get bank account")
+ .unwrap();
+
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => name == ""
+ && transfer_account_id.clone().is_some_and(
+ |account_id| account_id == bank_account.id,
+ ),
+ }
+}
+
+fn matches_cash_account_transfer_account(
+ payee: &ActualbudgetPayee,
+ accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ let cash_account = accounts
+ .get(ACCOUNT_NAMES_DICT.cash_account)
+ .with_context(|| "failed to find cash account")
+ .unwrap();
+
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => name == ""
+ && transfer_account_id.clone().is_some_and(
+ |account_id| account_id == cash_account.id,
+ ),
+ }
+}
+
+fn matches_category_transfers_transfer_account(
+ payee: &ActualbudgetPayee,
+ accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ let category_transfers_account = accounts
+ .get(ACCOUNT_NAMES_DICT.transfers_account)
+ .with_context(|| "failed to find category transfers account")
+ .unwrap();
+
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => name == ""
+ && transfer_account_id.clone().is_some_and(
+ |account_id| account_id == category_transfers_account.id,
+ ),
+ }
+}
+
+fn matches_starting_balances(
+ payee: &ActualbudgetPayee,
+ _accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => transfer_account_id.is_none()
+ && name.clone() == PAYEE_NAMES_DICT.starting_balances,
+ }
+}
+
+fn matches_employer(
+ payee: &ActualbudgetPayee,
+ _accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => transfer_account_id.is_none()
+ && name == PAYEE_NAMES_DICT.employer,
+ }
+}
+
+
+fn matches_tesco(
+ payee: &ActualbudgetPayee,
+ _accounts: &HashMap<String, ActualbudgetAccount>,
+) -> bool {
+ match payee {
+ ActualbudgetPayee {
+ name,
+ transfer_account_id,
+ ..
+ } => transfer_account_id.is_none()
+ && name == PAYEE_NAMES_DICT.tesco,
+ }
+}