summaryrefslogtreecommitdiff
path: root/actualbudget_to_schist_transformer/tests/common/budget_drip_matchers.rs
blob: 04be584b76828d5dbeb87ae32310db3e4477c3d4 (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
use std::sync::LazyLock;

use schist_models::{budget_drip::BudgetDrip, category::Category, date_utc::DateUtc};
use schist_traits::dateable::Dateable;

use crate::common::category_names::{CATEGORY_NAME_BILLS, CATEGORY_NAME_BILLS_FLEXIBLE, CATEGORY_NAME_FOOD, CATEGORY_NAME_GENERAL, CATEGORY_NAME_SAVINGS};

pub fn get_num_expected_budget_drips() -> usize {
    let num_expected_dates = DATES.len();
    let num_expected_categories = 5;
    num_expected_dates * num_expected_categories
}

pub fn assert_budget_drip_matches(
    budget_drip: &BudgetDrip,
    categories: &[Category],
) {
    assert!(
        DATES.iter().any(|date| *LazyLock::force(date) == budget_drip.date),
        "budget drip had unexpected date: {:?}",
        budget_drip,
    );

    let category_name = categories
        .iter()
        .find(|c| c.id == budget_drip.category_id)
        .map(|c| c.name.clone())
        .expect(format!(
            "budget drip {:?} had unexpected category ID. categories were: {:?}",
            budget_drip,
            categories,
        ).as_str());

    let expected_quantity = match (
        category_name.as_str(),
        budget_drip.date.month(),
        budget_drip.date.day(),
    ) {
        (CATEGORY_NAME_FOOD, 8 | 10, 1) => 6_50,
        (CATEGORY_NAME_FOOD, 8 | 10, _) => 6_45,
        (CATEGORY_NAME_FOOD, 9 | 11, 1) => 6_86,
        (CATEGORY_NAME_FOOD, 9 | 11, _) => 6_66,
        (CATEGORY_NAME_FOOD, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip),

        (CATEGORY_NAME_GENERAL, 8 | 10, 1) => 3_40,
        (CATEGORY_NAME_GENERAL, 8 | 10, _) => 3_22,
        (CATEGORY_NAME_GENERAL, 9 | 11, 1) => 3_43,
        (CATEGORY_NAME_GENERAL, 9 | 11, _) => 3_33,
        (CATEGORY_NAME_GENERAL, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip),

        (CATEGORY_NAME_BILLS, 8 | 10, 1) => 4_10,
        (CATEGORY_NAME_BILLS, 8 | 10, _) => 4_03,
        (CATEGORY_NAME_BILLS, 9 | 11, 1) => 4_36,
        (CATEGORY_NAME_BILLS, 9 | 11, _) => 4_16,
        (CATEGORY_NAME_BILLS, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip),

        (CATEGORY_NAME_BILLS_FLEXIBLE, 8 | 10, 1) => 1_00,
        (CATEGORY_NAME_BILLS_FLEXIBLE, 8 | 10, _) => 80,
        (CATEGORY_NAME_BILLS_FLEXIBLE, 9 | 11, 1) => 93,
        (CATEGORY_NAME_BILLS_FLEXIBLE, 9 | 11, _) => 83,
        (CATEGORY_NAME_BILLS_FLEXIBLE, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip),

        (CATEGORY_NAME_SAVINGS, 8 | 10, 1) => 13_00,
        (CATEGORY_NAME_SAVINGS, 8 | 10, _) => 12_90,
        (CATEGORY_NAME_SAVINGS, 9 | 11, 1) => 13_43,
        (CATEGORY_NAME_SAVINGS, 9 | 11, _) => 13_33,
        (CATEGORY_NAME_SAVINGS, _, _) => panic!("budget drip {:?} had unexpected date", budget_drip),

        (_, _, _) => panic!(
            "budget drip {:?} had unexpected category name {}",
            budget_drip,
            category_name,
        ),
    };

    assert_eq!(
        expected_quantity,
        budget_drip.quantity,
        "budget drip {:?} had unexpected quantity",
        budget_drip,
    );
}

static DATES: [LazyLock<DateUtc>; 122] = [
    LazyLock::<DateUtc>::new(|| "2024-08-01".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-02".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-03".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-04".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-05".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-06".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-07".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-08".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-09".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-10".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-11".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-12".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-13".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-14".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-15".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-16".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-17".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-18".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-19".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-20".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-21".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-22".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-23".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-24".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-25".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-26".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-27".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-28".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-29".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-30".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-08-31".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-01".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-02".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-03".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-04".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-05".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-06".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-07".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-08".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-09".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-10".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-11".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-12".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-13".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-14".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-15".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-16".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-17".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-18".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-19".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-20".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-21".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-22".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-23".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-24".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-25".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-26".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-27".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-28".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-29".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-09-30".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-01".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-02".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-03".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-04".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-05".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-06".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-07".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-08".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-09".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-10".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-11".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-12".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-13".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-14".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-15".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-16".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-17".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-18".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-19".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-20".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-21".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-22".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-23".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-24".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-25".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-26".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-27".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-28".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-29".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-30".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-10-31".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-01".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-02".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-03".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-04".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-05".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-06".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-07".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-08".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-09".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-10".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-11".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-12".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-13".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-14".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-15".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-16".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-17".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-18".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-19".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-20".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-21".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-22".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-23".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-24".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-25".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-26".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-27".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-28".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-29".parse().unwrap()),
    LazyLock::<DateUtc>::new(|| "2024-11-30".parse().unwrap()),
];