diff options
7 files changed, 88 insertions, 3 deletions
diff --git a/schist_core/schist_fakes/src/bucket_transaction.rs b/schist_core/schist_fakes/src/bucket_transaction.rs index 3dd0a6f..aecc057 100644 --- a/schist_core/schist_fakes/src/bucket_transaction.rs +++ b/schist_core/schist_fakes/src/bucket_transaction.rs @@ -1,4 +1,7 @@ -use schist_models::{BucketTransaction, BucketTransactionBuilder}; +use schist_models::{ + bucket_transaction::{BucketTransaction, BucketTransactionBuilder}, + date_utc::DateUtc, +}; pub fn make_fake_bucket_transaction(id: i32) -> BucketTransaction { make_fake_bucket_transaction_builder(id).build().unwrap() @@ -10,6 +13,7 @@ pub fn make_fake_bucket_transaction_builder(id: i32) -> BucketTransactionBuilder .id(id) .description(String::from("Fake bucket transaction")) .amount(0) + .date(DateUtc::from_ymd(1970, 1, 1).unwrap()) .bucket_id(1); builder } diff --git a/schist_core/schist_models/migrations/2024-08-31-084439_initial_setup/up.sql b/schist_core/schist_models/migrations/2024-08-31-084439_initial_setup/up.sql index e645d43..da85b33 100644 --- a/schist_core/schist_models/migrations/2024-08-31-084439_initial_setup/up.sql +++ b/schist_core/schist_models/migrations/2024-08-31-084439_initial_setup/up.sql @@ -36,6 +36,7 @@ CREATE TABLE bucket_transactions( id INTEGER NOT NULL PRIMARY KEY, amount INTEGER NOT NULL, bucket_id INTEGER NOT NULL, + date TEXT NOT NULL, description TEXT NOT NULL, FOREIGN KEY (bucket_id) REFERENCES buckets (id) diff --git a/schist_core/schist_models/src/bucket_transaction.rs b/schist_core/schist_models/src/bucket_transaction.rs index 2aeae8a..a956d0b 100644 --- a/schist_core/schist_models/src/bucket_transaction.rs +++ b/schist_core/schist_models/src/bucket_transaction.rs @@ -1,11 +1,14 @@ use derive_builder::Builder; use diesel::prelude::*; +use crate::date_utc::DateUtc; + #[derive(Builder, Queryable, Identifiable, Selectable, Debug, PartialEq, Insertable)] #[diesel(table_name = crate::schema::bucket_transactions)] pub struct BucketTransaction { pub id: i32, pub amount: i32, pub bucket_id: i32, + pub date: DateUtc, pub description: String, } diff --git a/schist_core/schist_models/src/schema.rs b/schist_core/schist_models/src/schema.rs index 8744696..9579e5c 100644 --- a/schist_core/schist_models/src/schema.rs +++ b/schist_core/schist_models/src/schema.rs @@ -25,6 +25,7 @@ diesel::table! { id -> Integer, amount -> Integer, bucket_id -> Integer, + date -> Text, description -> Text, } } diff --git a/schist_core/schist_models/user_data.sqlite b/schist_core/schist_models/user_data.sqlite Binary files differdeleted file mode 100644 index 81fd25c..0000000 --- a/schist_core/schist_models/user_data.sqlite +++ /dev/null diff --git a/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/src/transform_state/transform_bucket_transactions_from_category_transfers.rs b/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/src/transform_state/transform_bucket_transactions_from_category_transfers.rs index 952405e..c5a8cf6 100644 --- a/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/src/transform_state/transform_bucket_transactions_from_category_transfers.rs +++ b/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/src/transform_state/transform_bucket_transactions_from_category_transfers.rs @@ -2,6 +2,8 @@ use actualbudget_models::ActualbudgetTransaction; use anyhow::{bail, Context, Result}; use schist_models::BucketTransaction; +use crate::transform_state::transform_date; + use super::{is_category_transfer, transform_id}; pub fn transform_bucket_transactions_from_category_transfers( @@ -105,6 +107,7 @@ fn transform_category_transfer_without_context( } let quantity: i32 = deposit.amount.try_into().unwrap(); + let date = transform_date(&actualbudget_parent_category_transfer.date)?; Ok(vec![ BucketTransaction { @@ -123,6 +126,7 @@ fn transform_category_transfer_without_context( .clone() .unwrap_or_else(String::new), amount: quantity, + date, bucket_id: deposit_id, }, ]) @@ -130,9 +134,20 @@ fn transform_category_transfer_without_context( #[cfg(test)] mod test { +<<<<<<< HEAD use actualbudget_fakes::actualbudget_transaction::make_fake_actualbudget_transaction_builder; use actualbudget_models::{ActualbudgetTransaction, ActualbudgetTransactionBuilder}; use schist_models::BucketTransaction; +======= + use actualbudget_fakes::{ + actualbudget_account::make_fake_actualbudget_account, + actualbudget_transaction::make_fake_actualbudget_transaction_builder, + }; + use actualbudget_models::{ + ActualbudgetDate, ActualbudgetTransaction, ActualbudgetTransactionBuilder, + }; + use schist_models::{bucket_transaction::BucketTransaction, date_utc::DateUtc}; +>>>>>>> 44b35a0 (BucketTransaction has date field) use crate::transform_state::transform_id::transform_id; @@ -141,9 +156,18 @@ mod test { #[test] fn when_one_category_transfer_then_transforms() { let actualbudget_transactions = [ +<<<<<<< HEAD make_fake_parent_transaction("0"), make_fake_child_withdrawal("1", "0"), make_fake_child_deposit("2", "0"), +======= + make_fake_parent_transaction_builder("0") + .date(ActualbudgetDate::from_ymd(2026, 01, 16)) + .build() + .unwrap(), + make_fake_from_child_transaction("1", "0"), + make_fake_to_child_transaction("2", "0"), +>>>>>>> 44b35a0 (BucketTransaction has date field) ]; let result = @@ -157,18 +181,31 @@ mod test { assert_eq!(-100, bucket_withdrawal.amount); assert_eq!("I was a parent transaction", bucket_withdrawal.description); assert_eq!(transform_id("0"), bucket_withdrawal.bucket_id); + assert_eq!( + DateUtc::from_ymd(2026, 1, 16).unwrap(), + bucket_withdrawal.date + ); let bucket_deposit = bucket_transactions.iter().find(|bt| bt.amount > 0).unwrap(); assert_eq!(100, bucket_deposit.amount); assert_eq!("I was a parent transaction", bucket_deposit.description); assert_eq!(transform_id("1"), bucket_deposit.bucket_id); + assert_eq!(DateUtc::from_ymd(2026, 1, 16).unwrap(), bucket_deposit.date); } #[test] fn when_many_transactions_then_transforms() { let actualbudget_transactions = [ +<<<<<<< HEAD make_fake_parent_transaction("0"), make_fake_child_withdrawal_builder("1", 100, "0") +======= + make_fake_parent_transaction_builder("0") + .date(ActualbudgetDate::from_ymd(2026, 1, 16)) + .build() + .unwrap(), + make_fake_from_child_transaction_builder("1", 100, "0") +>>>>>>> 44b35a0 (BucketTransaction has date field) .category_id(Some(String::from("0"))) .build() .unwrap(), @@ -176,8 +213,16 @@ mod test { .category_id(Some(String::from("1"))) .build() .unwrap(), +<<<<<<< HEAD make_fake_parent_transaction("3"), make_fake_child_withdrawal_builder("4", 200, "3") +======= + make_fake_parent_transaction_builder("3") + .date(ActualbudgetDate::from_ymd(2026, 1, 21)) + .build() + .unwrap(), + make_fake_from_child_transaction_builder("4", 200, "3") +>>>>>>> 44b35a0 (BucketTransaction has date field) .category_id(Some(String::from("1"))) .build() .unwrap(), @@ -209,6 +254,10 @@ mod test { assert_eq!(1, bucket_withdrawal_0.len()); let bucket_withdrawal_0 = bucket_withdrawal_0.get(0).unwrap(); assert_eq!(transform_id("0"), bucket_withdrawal_0.bucket_id); + assert_eq!( + DateUtc::from_ymd(2026, 1, 16).unwrap(), + bucket_withdrawal_0.date + ); let bucket_deposit_0: Vec<&BucketTransaction> = bucket_transactions .iter() @@ -217,6 +266,10 @@ mod test { assert_eq!(1, bucket_deposit_0.len()); let bucket_deposit_0 = bucket_deposit_0.get(0).unwrap(); assert_eq!(transform_id("1"), bucket_deposit_0.bucket_id); + assert_eq!( + DateUtc::from_ymd(2026, 1, 16).unwrap(), + bucket_deposit_0.date + ); let bucket_withdrawal_1: Vec<&BucketTransaction> = bucket_transactions .iter() @@ -225,6 +278,10 @@ mod test { assert_eq!(1, bucket_withdrawal_1.len()); let bucket_withdrawal_1 = bucket_withdrawal_1.get(0).unwrap(); assert_eq!(transform_id("1"), bucket_withdrawal_1.bucket_id); + assert_eq!( + DateUtc::from_ymd(2026, 1, 21).unwrap(), + bucket_withdrawal_1.date + ); let bucket_deposit_1: Vec<&BucketTransaction> = bucket_transactions .iter() @@ -233,6 +290,10 @@ mod test { assert_eq!(1, bucket_deposit_1.len()); let bucket_deposit_1 = bucket_deposit_1.get(0).unwrap(); assert_eq!(transform_id("0"), bucket_deposit_1.bucket_id); + assert_eq!( + DateUtc::from_ymd(2026, 1, 21).unwrap(), + bucket_deposit_1.date + ); } #[test] diff --git a/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/tests/common/bucket_transaction_matchers.rs b/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/tests/common/bucket_transaction_matchers.rs index decc189..20b8383 100644 --- a/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/tests/common/bucket_transaction_matchers.rs +++ b/transformers/actualbudget_transformer/actualbudget_to_schist_transformer/tests/common/bucket_transaction_matchers.rs @@ -1,4 +1,5 @@ use schist_models::{Bucket, BucketTransaction}; +use schist_traits::dateable::Dateable; use super::bucket_names::{BUCKET_NAME_GENERAL, BUCKET_NAME_SAVINGS}; @@ -24,8 +25,15 @@ fn matches_withdrawal_120_savings_23_oct_2024( id: _id, description, amount: -120_00, + date, bucket_id, - } => *bucket_id == savings_bucket.id && description.as_str() == "", + } => { + *bucket_id == savings_bucket.id + && description.as_str() == "" + && date.year() == 2024 + && date.month() == 10 + && date.day() == 23 + } _ => false, } } @@ -44,8 +52,15 @@ fn matches_deposit_120_general_23_oct_2024( id: _id, description, amount: 120_00, + date, bucket_id, - } => *bucket_id == general_bucket.id && description.as_str() == "", + } => { + *bucket_id == general_bucket.id + && description.as_str() == "" + && date.year() == 2024 + && date.month() == 10 + && date.day() == 23 + } _ => false, } } |
