summaryrefslogtreecommitdiff
path: root/rust/actualbudget_to_schist_transformer/tests
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-05 08:39:40 +0000
committerJoe Carstairs <me@joeac.net>2024-12-05 08:39:40 +0000
commit0cf3949a837de984c09448ef0b96e72e9d01af76 (patch)
tree8aaf73171149e2e618a641c66b652b940b519e22 /rust/actualbudget_to_schist_transformer/tests
parent47f56d8eac2807b161a76a01f397c25f8c7fdcad (diff)
Tests budget drip transformation
Diffstat (limited to 'rust/actualbudget_to_schist_transformer/tests')
-rw-r--r--rust/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs209
-rw-r--r--rust/actualbudget_to_schist_transformer/tests/run.rs11
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();