1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
use anyhow::Result;
use schist_models::{
budget_drip::BudgetDrip,
category::Category,
};
pub fn calculate_budgets_accrual(category: &Category, budget_drips: &[BudgetDrip]) -> Result<i64> {
Ok(budget_drips
.iter()
.filter(|bd| bd.category_id == category.id)
.map(|bd| Into::<i64>::into(bd.quantity))
.sum()
)
}
#[cfg(test)]
mod test {
use schist_fakes::{budget_drip::make_fake_budget_drip_builder, category::make_fake_category};
use super::calculate_budgets_accrual;
#[test]
fn when_no_budget_drips_then_return_zero() {
let category = make_fake_category(0);
let budget_drips = [];
let result = calculate_budgets_accrual(&category, &budget_drips);
assert!(result.is_ok());
assert_eq!(result.unwrap(), 0_i64);
}
#[test]
fn when_one_budget_drip_for_another_category_then_return_zero() {
let category = make_fake_category(0);
let budget_drips = [
make_fake_budget_drip_builder(0).quantity(100).category_id(1).build().unwrap(),
];
let result = calculate_budgets_accrual(&category, &budget_drips);
assert!(result.is_ok());
assert_eq!(result.unwrap(), 0_i64);
}
#[test]
fn when_one_budget_drip_then_return_quantity() {
let category = make_fake_category(0);
let budget_drips = [
make_fake_budget_drip_builder(0).quantity(100).category_id(0).build().unwrap(),
];
let result = calculate_budgets_accrual(&category, &budget_drips);
assert!(result.is_ok());
assert_eq!(result.unwrap(), 100);
}
#[test]
fn when_two_budget_drips_then_return_sum() {
let category = make_fake_category(0);
let budget_drips = [
make_fake_budget_drip_builder(0).quantity(100).category_id(0).build().unwrap(),
make_fake_budget_drip_builder(1).quantity(120).category_id(0).build().unwrap(),
];
let result = calculate_budgets_accrual(&category, &budget_drips);
assert!(result.is_ok());
assert_eq!(result.unwrap(), 220);
}
}
|