summaryrefslogtreecommitdiff
path: root/rust/actualbudget_to_schist_transformer
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-02 14:00:26 +0000
committerJoe Carstairs <me@joeac.net>2024-12-02 14:02:47 +0000
commitf45d9da1fcf5601daad3b9f7b17509f7dfa0d2fe (patch)
treeb11fa57a5f2e3a6830082e6ca7ecac95816caa90 /rust/actualbudget_to_schist_transformer
parent01801841ece20a68965163920fce82078deb4240 (diff)
Account transfers matchers
Diffstat (limited to 'rust/actualbudget_to_schist_transformer')
-rw-r--r--rust/actualbudget_to_schist_transformer/tests/common/account_transfer_matchers.rs48
-rw-r--r--rust/actualbudget_to_schist_transformer/tests/common/mod.rs2
-rw-r--r--rust/actualbudget_to_schist_transformer/tests/run.rs4
3 files changed, 49 insertions, 5 deletions
diff --git a/rust/actualbudget_to_schist_transformer/tests/common/account_transfer_matchers.rs b/rust/actualbudget_to_schist_transformer/tests/common/account_transfer_matchers.rs
index c881ada..1442ee4 100644
--- a/rust/actualbudget_to_schist_transformer/tests/common/account_transfer_matchers.rs
+++ b/rust/actualbudget_to_schist_transformer/tests/common/account_transfer_matchers.rs
@@ -1,6 +1,48 @@
-use schist_models::account_transfer::AccountTransfer;
+use anyhow::Context;
+use schist_models::{account::Account, account_transfer::AccountTransfer, date_utc::DateUtc};
+
+use super::ACCOUNT_NAMES_DICT;
pub fn get_account_transfer_matchers(
-) -> Vec<Box<dyn Fn(&AccountTransfer) -> bool>> {
- todo!()
+) -> Vec<Box<dyn Fn(&AccountTransfer, &[Account]) -> bool>> {
+ vec![
+ Box::new(|at, a| matches_cash_withdrawal_10_sept_2024(at, a)),
+ ]
+}
+
+fn matches_cash_withdrawal_10_sept_2024(
+ account_transfer: &AccountTransfer,
+ accounts: &[Account],
+) -> bool {
+ let bank_account = accounts
+ .iter()
+ .filter(|a| a.name == ACCOUNT_NAMES_DICT.bank_account)
+ .next()
+ .with_context(|| "failed to find bank account")
+ .unwrap();
+ println!("bank account: {:?}", bank_account);
+
+ let cash_account = accounts
+ .iter()
+ .filter(|a| a.name == ACCOUNT_NAMES_DICT.cash_account)
+ .next()
+ .with_context(|| "failed to find cash account")
+ .unwrap();
+ println!("cash account: {:?}", cash_account);
+
+ println!("to: {}, from: {}", account_transfer.to_account_id, account_transfer.from_account_id);
+ match account_transfer {
+ AccountTransfer {
+ id: _id,
+ date,
+ description,
+ quantity: 80_00,
+ from_account_id,
+ to_account_id,
+ } => *date == "2024-09-10".parse().unwrap()
+ && *description == ""
+ && *from_account_id == bank_account.id
+ && *to_account_id == cash_account.id,
+ _ => false,
+ }
}
diff --git a/rust/actualbudget_to_schist_transformer/tests/common/mod.rs b/rust/actualbudget_to_schist_transformer/tests/common/mod.rs
index 2ea37d4..66cc60c 100644
--- a/rust/actualbudget_to_schist_transformer/tests/common/mod.rs
+++ b/rust/actualbudget_to_schist_transformer/tests/common/mod.rs
@@ -1,4 +1,5 @@
mod account_matchers;
+mod account_names;
mod account_transfer_matchers;
mod budget_drip_matchers;
mod category_matchers;
@@ -9,6 +10,7 @@ mod transaction_matchers;
mod transaction_categorisation_matchers;
pub use account_matchers::get_account_matchers;
+pub use account_names::ACCOUNT_NAMES_DICT;
pub use account_transfer_matchers::get_account_transfer_matchers;
pub use budget_drip_matchers::get_budget_drip_matchers;
pub use category_matchers::get_category_matchers;
diff --git a/rust/actualbudget_to_schist_transformer/tests/run.rs b/rust/actualbudget_to_schist_transformer/tests/run.rs
index 3a55812..019b51a 100644
--- a/rust/actualbudget_to_schist_transformer/tests/run.rs
+++ b/rust/actualbudget_to_schist_transformer/tests/run.rs
@@ -20,7 +20,7 @@ fn given_test_database_when_run_then_exports_expected_schist_state() {
let account_matchers = get_account_matchers();
assert_eq!(account_matchers.len(), accounts.len());
- for account in accounts {
+ for account in &accounts {
assert!(
account_matchers.iter().any(|m| m(&account)),
"no match found for account {:?}",
@@ -32,7 +32,7 @@ fn given_test_database_when_run_then_exports_expected_schist_state() {
assert_eq!(account_transfer_matchers.len(), account_transfers.len());
for account_transfer in account_transfers {
assert!(
- account_transfer_matchers.iter().any(|m| m(&account_transfer)),
+ account_transfer_matchers.iter().any(|m| m(&account_transfer, &accounts)),
"no match found for account_transfer {:?}",
account_transfer,
);