summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-05 23:14:53 +0000
committerJoe Carstairs <me@joeac.net>2024-12-05 23:14:53 +0000
commitd7081a6e0c5eed4438f9f3e8950901031bfe70ec (patch)
tree7a5ead588edc49685cf2734d0ff5fd8a22c0cd32 /rust
parent0cf3949a837de984c09448ef0b96e72e9d01af76 (diff)
Can get first AB zero budget date
Diffstat (limited to 'rust')
-rw-r--r--rust/actualbudget_queries/src/actualbudget_zero_budgets.rs12
-rw-r--r--rust/actualbudget_queries/tests/actualbudget_zero_budgets.rs15
2 files changed, 24 insertions, 3 deletions
diff --git a/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs
index 7366f86..5ae4055 100644
--- a/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs
+++ b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs
@@ -1,7 +1,7 @@
use anyhow::{Context, Result};
-use actualbudget_models::ActualbudgetZeroBudget;
+use actualbudget_models::{actualbudget_schema::zero_budgets as zero_budgets_schema, ActualbudgetDate, ActualbudgetZeroBudget};
use actualbudget_schema::actualbudget_schema::zero_budgets::dsl::zero_budgets as zero_budgets_table;
-use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection};
+use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection};
pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetZeroBudget>> {
let zero_budgets = zero_budgets_table
@@ -10,3 +10,11 @@ pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> R
.with_context(|| "failed to get all Actualbudget zero budgets")?;
Ok(zero_budgets)
}
+
+pub fn get_first_zero_budget_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate> {
+ let date_as_int = zero_budgets_table
+ .select(min(zero_budgets_schema::month))
+ .first::<Option<i32>>(connection)
+ .map_or_else(|e| Err(e), |o| o.map_or_else(|| Err(Error::NotFound), |i| Ok(i)))?;
+ Ok(ActualbudgetDate::from_i32(date_as_int))
+}
diff --git a/rust/actualbudget_queries/tests/actualbudget_zero_budgets.rs b/rust/actualbudget_queries/tests/actualbudget_zero_budgets.rs
index 471498c..7218227 100644
--- a/rust/actualbudget_queries/tests/actualbudget_zero_budgets.rs
+++ b/rust/actualbudget_queries/tests/actualbudget_zero_budgets.rs
@@ -1,6 +1,6 @@
pub mod common;
-use actualbudget_queries::actualbudget_zero_budgets::get_all_actualbudget_zero_budgets;
+use actualbudget_queries::actualbudget_zero_budgets::{get_all_actualbudget_zero_budgets, get_first_zero_budget_date};
use common::{db_url::DB_URL, get_reference_data::get_categories, zero_budget_matchers::get_zero_budget_matchers};
use diesel::{Connection, SqliteConnection};
@@ -19,3 +19,16 @@ fn given_test_database_when_get_all_zero_budgets_then_return_zero_budgets() {
assert!(zero_budgets.iter().any(|zb| matcher(zb, &categories)))
}
}
+
+#[test]
+fn given_test_database_when_get_first_zero_budget_date_then_return_1_aug_2024() {
+ let connection = &mut SqliteConnection::establish(DB_URL).unwrap();
+
+ let date = get_first_zero_budget_date(connection);
+
+ assert!(date.is_ok());
+ let date = date.unwrap();
+ assert_eq!("01", date.day());
+ assert_eq!("08", date.month());
+ assert_eq!("2024", date.year());
+}