diff options
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs | 209 | ||||
| -rw-r--r-- | rust/actualbudget_to_schist_transformer/tests/run.rs | 11 |
2 files changed, 208 insertions, 12 deletions
diff --git a/rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs b/rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs index ae86102..04be584 100644 --- a/rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs +++ b/rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs @@ -1,6 +1,207 @@ -use schist_models::budget_drip::BudgetDrip; +use std::sync::LazyLock; -pub fn get_budget_drip_matchers( -) -> Vec<Box<dyn Fn(&BudgetDrip) -> bool>> { - todo!() +use schist_models::{budget_drip::BudgetDrip, category::Category, date_utc::DateUtc}; +use schist_traits::dateable::Dateable; + +use crate::common::category_names::{CATEGORY_NAME_BILLS, CATEGORY_NAME_BILLS_FLEXIBLE, CATEGORY_NAME_FOOD, CATEGORY_NAME_GENERAL, CATEGORY_NAME_SAVINGS}; + +pub fn get_num_expected_budget_drips() -> usize { + let num_expected_dates = DATES.len(); + let num_expected_categories = 5; + num_expected_dates * num_expected_categories } + +pub fn assert_budget_drip_matches( + budget_drip: &BudgetDrip, + categories: &[Category], +) { + assert!( + DATES.iter().any(|date| *LazyLock::force(date) == budget_drip.date), + "budget drip had unexpected date: {:?}", + budget_drip, + ); + + let category_name = categories + .iter() + .find(|c| c.id == budget_drip.category_id) + .map(|c| c.name.clone()) + .expect(format!( + "budget drip {:?} had unexpected category ID. categories were: {:?}", + budget_drip, + categories, + ).as_str()); + + let expected_quantity = match ( + category_name.as_str(), + budget_drip.date.month(), + budget_drip.date.day(), + ) { + (CATEGORY_NAME_FOOD, 8 | 10, 1) => 6_50, + (CATEGORY_NAME_FOOD, 8 | 10, _) => 6_45, + (CATEGORY_NAME_FOOD, 9 | 11, 1) => 6_86, + (CATEGORY_NAME_FOOD, 9 | 11, _) => 6_66, + (CATEGORY_NAME_FOOD, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip), + + (CATEGORY_NAME_GENERAL, 8 | 10, 1) => 3_40, + (CATEGORY_NAME_GENERAL, 8 | 10, _) => 3_22, + (CATEGORY_NAME_GENERAL, 9 | 11, 1) => 3_43, + (CATEGORY_NAME_GENERAL, 9 | 11, _) => 3_33, + (CATEGORY_NAME_GENERAL, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip), + + (CATEGORY_NAME_BILLS, 8 | 10, 1) => 4_10, + (CATEGORY_NAME_BILLS, 8 | 10, _) => 4_03, + (CATEGORY_NAME_BILLS, 9 | 11, 1) => 4_36, + (CATEGORY_NAME_BILLS, 9 | 11, _) => 4_16, + (CATEGORY_NAME_BILLS, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip), + + (CATEGORY_NAME_BILLS_FLEXIBLE, 8 | 10, 1) => 1_00, + (CATEGORY_NAME_BILLS_FLEXIBLE, 8 | 10, _) => 80, + (CATEGORY_NAME_BILLS_FLEXIBLE, 9 | 11, 1) => 93, + (CATEGORY_NAME_BILLS_FLEXIBLE, 9 | 11, _) => 83, + (CATEGORY_NAME_BILLS_FLEXIBLE, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip), + + (CATEGORY_NAME_SAVINGS, 8 | 10, 1) => 13_00, + (CATEGORY_NAME_SAVINGS, 8 | 10, _) => 12_90, + (CATEGORY_NAME_SAVINGS, 9 | 11, 1) => 13_43, + (CATEGORY_NAME_SAVINGS, 9 | 11, _) => 13_33, + (CATEGORY_NAME_SAVINGS, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip), + + (_, _, _) => panic!( + "budget drip {:?} had unexpected category name {}", + budget_drip, + category_name, + ), + }; + + assert_eq!( + expected_quantity, + budget_drip.quantity, + "budget drip {:?} had unexpected quantity", + budget_drip, + ); +} + +static DATES: [LazyLock<DateUtc>; 122] = [ + LazyLock::<DateUtc>::new(|| "2024-08-01".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-02".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-03".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-04".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-05".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-06".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-07".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-08".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-09".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-10".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-11".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-12".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-13".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-14".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-15".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-16".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-17".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-18".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-19".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-20".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-21".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-22".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-23".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-24".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-25".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-26".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-27".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-28".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-29".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-30".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-08-31".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-01".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-02".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-03".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-04".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-05".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-06".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-07".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-08".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-09".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-10".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-11".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-12".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-13".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-14".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-15".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-16".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-17".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-18".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-19".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-20".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-21".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-22".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-23".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-24".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-25".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-26".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-27".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-28".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-29".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-09-30".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-01".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-02".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-03".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-04".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-05".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-06".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-07".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-08".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-09".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-10".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-11".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-12".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-13".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-14".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-15".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-16".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-17".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-18".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-19".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-20".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-21".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-22".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-23".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-24".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-25".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-26".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-27".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-28".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-29".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-30".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-10-31".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-01".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-02".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-03".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-04".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-05".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-06".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-07".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-08".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-09".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-10".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-11".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-12".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-13".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-14".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-15".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-16".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-17".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-18".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-19".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-20".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-21".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-22".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-23".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-24".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-25".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-26".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-27".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-28".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-29".parse().unwrap()), + LazyLock::<DateUtc>::new(|| "2024-11-30".parse().unwrap()), +]; diff --git a/rust/actualbudget_to_schist_transformer/tests/run.rs b/rust/actualbudget_to_schist_transformer/tests/run.rs index 019b51a..998d8df 100644 --- a/rust/actualbudget_to_schist_transformer/tests/run.rs +++ b/rust/actualbudget_to_schist_transformer/tests/run.rs @@ -1,7 +1,7 @@ pub mod common; use actualbudget_to_schist_transformer::run::run; -use common::{get_account_matchers, get_account_transfer_matchers, get_budget_drip_matchers, get_category_matchers, get_category_transfer_matchers, get_transaction_categorisation_matchers, get_transaction_matchers, TestContext, TEST_IN_DB_URL, TEST_OUT_DB_URL}; +use common::{assert_budget_drip_matches, get_account_matchers, get_account_transfer_matchers, get_category_matchers, get_category_transfer_matchers, get_num_expected_budget_drips, get_transaction_categorisation_matchers, get_transaction_matchers, TestContext, TEST_IN_DB_URL, TEST_OUT_DB_URL}; use diesel::{Connection, SqliteConnection}; use schist_queries::{account_transfers::get_all_account_transfers, accounts::get_all_accounts, budget_drips::get_all_budget_drips, categories::get_all_categories, category_transfers::get_all_category_transfers, transaction_categorisations::get_all_transaction_categorisations, transactions::get_all_transactions}; @@ -38,14 +38,9 @@ fn given_test_database_when_run_then_exports_expected_schist_state() { ); } - let budget_drip_matchers = get_budget_drip_matchers(); - assert_eq!(budget_drip_matchers.len(), budget_drips.len()); + assert_eq!(get_num_expected_budget_drips(), budget_drips.len()); for budget_drip in budget_drips { - assert!( - budget_drip_matchers.iter().any(|m| m(&budget_drip)), - "no match found for budget_drip {:?}", - budget_drip, - ); + assert_budget_drip_matches(&budget_drip, &categories); } let category_matchers = get_category_matchers(); |
