summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--schist_core/schist_fakes/src/bucket_transaction.rs6
-rw-r--r--schist_core/schist_models/migrations/2024-08-31-084439_initial_setup/up.sql1
-rw-r--r--schist_core/schist_models/src/bucket_transaction.rs3
-rw-r--r--schist_core/schist_models/src/schema.rs1
-rw-r--r--schist_core/schist_models/user_data.sqlitebin49152 -> 0 bytes
-rw-r--r--transformers/actualbudget_transformer/actualbudget_to_schist_transformer/src/transform_state/transform_bucket_transactions_from_category_transfers.rs61
-rw-r--r--transformers/actualbudget_transformer/actualbudget_to_schist_transformer/tests/common/bucket_transaction_matchers.rs19
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
deleted file mode 100644
index 81fd25c..0000000
--- a/schist_core/schist_models/user_data.sqlite
+++ /dev/null
Binary files differ
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,
}
}