summaryrefslogtreecommitdiff
path: root/schist_core/schist_queries/src/utils
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-08-15 16:02:40 +0000
committerjoeac <me@joeac.net>2025-08-15 16:02:40 +0000
commit703496a49315f7b67442abf0e0df3c41d3605d3b (patch)
tree8e92f3842710162f3b26e910eb931950c1049f07 /schist_core/schist_queries/src/utils
parent8d714f760bd0349560d464583a151a04a19de1c9 (diff)
task-012 (#2)
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com> Reviewed-on: https://git.joeac.net/joeac/schist/pulls/2 Co-authored-by: Joe Carstairs <me@joeac.net> Co-committed-by: Joe Carstairs <me@joeac.net>
Diffstat (limited to 'schist_core/schist_queries/src/utils')
-rw-r--r--schist_core/schist_queries/src/utils/calculate_bucket_balance.rs57
-rw-r--r--schist_core/schist_queries/src/utils/calculate_budgets_accrual.rs72
-rw-r--r--schist_core/schist_queries/src/utils/mod.rs4
-rw-r--r--schist_core/schist_queries/src/utils/sum_drips_for_bucket.rs80
4 files changed, 119 insertions, 94 deletions
diff --git a/schist_core/schist_queries/src/utils/calculate_bucket_balance.rs b/schist_core/schist_queries/src/utils/calculate_bucket_balance.rs
index 5194084..e238613 100644
--- a/schist_core/schist_queries/src/utils/calculate_bucket_balance.rs
+++ b/schist_core/schist_queries/src/utils/calculate_bucket_balance.rs
@@ -1,31 +1,26 @@
use anyhow::Result;
-use schist_models::{bucket::Bucket, budget_drip::BudgetDrip};
+use schist_models::{bucket::Bucket, drip::Drip};
-use super::{calculate_budgets_accrual, find_by_id_or};
+use super::{find_by_id_or, sum_drips_for_bucket};
pub fn calculate_bucket_balance(
bucket: &Bucket,
transaction_sums: &[(i32, i64)],
bucket_transfer_from_sums: &[(i32, i64)],
bucket_transfer_to_sums: &[(i32, i64)],
- budget_drips: &[BudgetDrip],
+ budget_drips: &[Drip],
) -> Result<i64> {
let transaction_sum = find_by_id_or(transaction_sums, bucket.id, 0);
let bucket_transfer_from_sum = find_by_id_or(bucket_transfer_from_sums, bucket.id, 0);
let bucket_transfer_to_sum = find_by_id_or(bucket_transfer_to_sums, bucket.id, 0);
- let budget_accruals_sum = calculate_budgets_accrual(bucket, budget_drips)?;
-
- Ok(
- transaction_sum
- + budget_accruals_sum
- + bucket_transfer_to_sum
- - bucket_transfer_from_sum
- )
+ let budget_accruals_sum = sum_drips_for_bucket(bucket, budget_drips)?;
+
+ Ok(transaction_sum + budget_accruals_sum + bucket_transfer_to_sum - bucket_transfer_from_sum)
}
#[cfg(test)]
mod test {
- use schist_fakes::{budget_drip::make_fake_budget_drip_builder, bucket::make_fake_bucket};
+ use schist_fakes::{bucket::make_fake_bucket, drip::make_fake_drip_builder};
use super::calculate_bucket_balance;
@@ -45,9 +40,11 @@ mod test {
let transaction_sums = [(1, 100)];
let bucket_transfer_from_sums = [(1, 91)];
let bucket_transfer_to_sums = [(2, 79)];
- let budget_drips = [
- make_fake_budget_drip_builder(0).quantity(100).bucket_id(1).build().unwrap(),
- ];
+ let budget_drips = [make_fake_drip_builder(0)
+ .amount(100)
+ .bucket_id(1)
+ .build()
+ .unwrap()];
let result = calculate_bucket_balance(
&bucket,
@@ -108,11 +105,31 @@ mod test {
let bucket_transfer_from_sums = [(0, 91)];
let bucket_transfer_to_sums = [(0, 79)];
let budget_drips = [
- make_fake_budget_drip_builder(0).quantity(77).bucket_id(0).build().unwrap(),
- make_fake_budget_drip_builder(0).quantity(77).bucket_id(0).build().unwrap(),
- make_fake_budget_drip_builder(0).quantity(77).bucket_id(0).build().unwrap(),
- make_fake_budget_drip_builder(0).quantity(77).bucket_id(0).build().unwrap(),
- make_fake_budget_drip_builder(0).quantity(77).bucket_id(0).build().unwrap(),
+ make_fake_drip_builder(0)
+ .amount(77)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ make_fake_drip_builder(0)
+ .amount(77)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ make_fake_drip_builder(0)
+ .amount(77)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ make_fake_drip_builder(0)
+ .amount(77)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ make_fake_drip_builder(0)
+ .amount(77)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
];
let result = calculate_bucket_balance(
diff --git a/schist_core/schist_queries/src/utils/calculate_budgets_accrual.rs b/schist_core/schist_queries/src/utils/calculate_budgets_accrual.rs
deleted file mode 100644
index cbf7180..0000000
--- a/schist_core/schist_queries/src/utils/calculate_budgets_accrual.rs
+++ /dev/null
@@ -1,72 +0,0 @@
-use anyhow::Result;
-use schist_models::{
- budget_drip::BudgetDrip,
- bucket::Bucket,
-};
-
-pub fn calculate_budgets_accrual(bucket: &Bucket, budget_drips: &[BudgetDrip]) -> Result<i64> {
- Ok(budget_drips
- .iter()
- .filter(|bd| bd.bucket_id == bucket.id)
- .map(|bd| Into::<i64>::into(bd.quantity))
- .sum()
- )
-}
-
-#[cfg(test)]
-mod test {
- use schist_fakes::{budget_drip::make_fake_budget_drip_builder, bucket::make_fake_bucket};
-
- use super::calculate_budgets_accrual;
-
- #[test]
- fn when_no_budget_drips_then_return_zero() {
- let bucket = make_fake_bucket(0);
- let budget_drips = [];
-
- let result = calculate_budgets_accrual(&bucket, &budget_drips);
-
- assert!(result.is_ok());
- assert_eq!(result.unwrap(), 0_i64);
- }
-
- #[test]
- fn when_one_budget_drip_for_another_bucket_then_return_zero() {
- let bucket = make_fake_bucket(0);
- let budget_drips = [
- make_fake_budget_drip_builder(0).quantity(100).bucket_id(1).build().unwrap(),
- ];
-
- let result = calculate_budgets_accrual(&bucket, &budget_drips);
-
- assert!(result.is_ok());
- assert_eq!(result.unwrap(), 0_i64);
- }
-
- #[test]
- fn when_one_budget_drip_then_return_quantity() {
- let bucket = make_fake_bucket(0);
- let budget_drips = [
- make_fake_budget_drip_builder(0).quantity(100).bucket_id(0).build().unwrap(),
- ];
-
- let result = calculate_budgets_accrual(&bucket, &budget_drips);
-
- assert!(result.is_ok());
- assert_eq!(result.unwrap(), 100);
- }
-
- #[test]
- fn when_two_budget_drips_then_return_sum() {
- let bucket = make_fake_bucket(0);
- let budget_drips = [
- make_fake_budget_drip_builder(0).quantity(100).bucket_id(0).build().unwrap(),
- make_fake_budget_drip_builder(1).quantity(120).bucket_id(0).build().unwrap(),
- ];
-
- let result = calculate_budgets_accrual(&bucket, &budget_drips);
-
- assert!(result.is_ok());
- assert_eq!(result.unwrap(), 220);
- }
-}
diff --git a/schist_core/schist_queries/src/utils/mod.rs b/schist_core/schist_queries/src/utils/mod.rs
index c006a9b..6b47b48 100644
--- a/schist_core/schist_queries/src/utils/mod.rs
+++ b/schist_core/schist_queries/src/utils/mod.rs
@@ -1,8 +1,8 @@
-mod calculate_budgets_accrual;
mod calculate_bucket_balance;
mod find_by_id_or;
+mod sum_drips_for_bucket;
-use calculate_budgets_accrual::calculate_budgets_accrual;
+use sum_drips_for_bucket::sum_drips_for_bucket;
pub use calculate_bucket_balance::calculate_bucket_balance;
pub use find_by_id_or::find_by_id_or;
diff --git a/schist_core/schist_queries/src/utils/sum_drips_for_bucket.rs b/schist_core/schist_queries/src/utils/sum_drips_for_bucket.rs
new file mode 100644
index 0000000..76f7988
--- /dev/null
+++ b/schist_core/schist_queries/src/utils/sum_drips_for_bucket.rs
@@ -0,0 +1,80 @@
+use anyhow::Result;
+use schist_models::{bucket::Bucket, drip::Drip};
+
+pub fn sum_drips_for_bucket(bucket: &Bucket, budget_drips: &[Drip]) -> Result<i64> {
+ Ok(budget_drips
+ .iter()
+ .filter(|bd| bd.bucket_id == bucket.id)
+ .map(|bd| Into::<i64>::into(bd.amount))
+ .sum())
+}
+
+#[cfg(test)]
+mod test {
+ use schist_fakes::{bucket::make_fake_bucket, drip::make_fake_drip_builder};
+
+ use super::sum_drips_for_bucket;
+
+ #[test]
+ fn when_no_budget_drips_then_return_zero() {
+ let bucket = make_fake_bucket(0);
+ let budget_drips = [];
+
+ let result = sum_drips_for_bucket(&bucket, &budget_drips);
+
+ assert!(result.is_ok());
+ assert_eq!(result.unwrap(), 0_i64);
+ }
+
+ #[test]
+ fn when_one_budget_drip_for_another_bucket_then_return_zero() {
+ let bucket = make_fake_bucket(0);
+ let budget_drips = [make_fake_drip_builder(0)
+ .amount(100)
+ .bucket_id(1)
+ .build()
+ .unwrap()];
+
+ let result = sum_drips_for_bucket(&bucket, &budget_drips);
+
+ assert!(result.is_ok());
+ assert_eq!(result.unwrap(), 0_i64);
+ }
+
+ #[test]
+ fn when_one_budget_drip_then_return_quantity() {
+ let bucket = make_fake_bucket(0);
+ let budget_drips = [make_fake_drip_builder(0)
+ .amount(100)
+ .bucket_id(0)
+ .build()
+ .unwrap()];
+
+ let result = sum_drips_for_bucket(&bucket, &budget_drips);
+
+ assert!(result.is_ok());
+ assert_eq!(result.unwrap(), 100);
+ }
+
+ #[test]
+ fn when_two_budget_drips_then_return_sum() {
+ let bucket = make_fake_bucket(0);
+ let budget_drips = [
+ make_fake_drip_builder(0)
+ .amount(100)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ make_fake_drip_builder(1)
+ .amount(120)
+ .bucket_id(0)
+ .build()
+ .unwrap(),
+ ];
+
+ let result = sum_drips_for_bucket(&bucket, &budget_drips);
+
+ assert!(result.is_ok());
+ assert_eq!(result.unwrap(), 220);
+ }
+}