From d7081a6e0c5eed4438f9f3e8950901031bfe70ec Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Thu, 5 Dec 2024 23:14:53 +0000 Subject: Can get first AB zero budget date --- .../actualbudget_queries/src/actualbudget_zero_budgets.rs | 12 ++++++++++-- .../tests/actualbudget_zero_budgets.rs | 15 ++++++++++++++- 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> { 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 { + let date_as_int = zero_budgets_table + .select(min(zero_budgets_schema::month)) + .first::>(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()); +} -- cgit v1.2.3