summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-03 09:11:37 +0000
committerJoe Carstairs <me@joeac.net>2024-11-03 09:11:37 +0000
commitb1cacec63a19715833170d3a754794b1d939e7fd (patch)
treef6c171dcc8f475306b84aebffea9e330ef2a74bd /backend
parent430f4c1ccb26c8ebe9a6d286012086795e495bb7 (diff)
Tests get_all_category_balances query
Diffstat (limited to 'backend')
-rw-r--r--backend/core/tests/queries/categories.rs93
1 files changed, 83 insertions, 10 deletions
diff --git a/backend/core/tests/queries/categories.rs b/backend/core/tests/queries/categories.rs
index 45ffe8e..da7c132 100644
--- a/backend/core/tests/queries/categories.rs
+++ b/backend/core/tests/queries/categories.rs
@@ -1,7 +1,45 @@
-use budgeting_app_core::queries;
+use budgeting_app_core::{models::{account::Account, category::Category, transaction::Transaction, transaction_categorisation::TransactionCategorisation}, queries};
use diesel::{Connection, SqliteConnection};
-use crate::common::{fakes::category::make_fake_category, test_context::TestContext};
+use crate::common::{fakes::{account::make_fake_account, category::make_fake_category, transaction::make_fake_transaction_builder, transaction_categorisation::make_fake_transaction_categorisation_builder}, test_context::TestContext};
+
+fn given_categories(connection: &mut SqliteConnection) -> Vec<Category> {
+ let categories = vec![make_fake_category(0), make_fake_category(1)];
+ let _ = queries::categories::insert_categories(&categories, connection).unwrap();
+ categories
+}
+
+fn given_transactions(connection: &mut SqliteConnection) -> Vec<Transaction> {
+ let transactions = vec![
+ make_fake_transaction_builder(0).quantity(1).build().unwrap(),
+ make_fake_transaction_builder(1).quantity(2).build().unwrap(),
+ make_fake_transaction_builder(2).quantity(4).build().unwrap(),
+ make_fake_transaction_builder(3).quantity(8).build().unwrap(),
+ ];
+ let _ = queries::transactions::insert_transactions(&transactions, connection).unwrap();
+ transactions
+}
+
+fn given_accounts(connection: &mut SqliteConnection) -> Vec<Account> {
+ let accounts = vec![
+ make_fake_account(0),
+ ];
+ let _ = queries::accounts::insert_accounts(&accounts, connection);
+ accounts
+}
+
+fn given_transaction_categorisations(connection: &mut SqliteConnection) -> Vec<TransactionCategorisation> {
+ let transaction_categorisations = vec![
+ make_fake_transaction_categorisation_builder(0).quantity(1).transaction_id(0).category_id(0).build().unwrap(),
+ make_fake_transaction_categorisation_builder(1).quantity(1).transaction_id(1).category_id(0).build().unwrap(),
+ make_fake_transaction_categorisation_builder(2).quantity(1).transaction_id(1).category_id(0).build().unwrap(),
+ make_fake_transaction_categorisation_builder(3).quantity(4).transaction_id(2).category_id(1).build().unwrap(),
+ make_fake_transaction_categorisation_builder(4).quantity(3).transaction_id(3).category_id(1).build().unwrap(),
+ make_fake_transaction_categorisation_builder(5).quantity(5).transaction_id(3).category_id(1).build().unwrap(),
+ ];
+ let _ = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection).unwrap();
+ transaction_categorisations
+}
#[test]
fn when_insert_categories_then_returns_num_categories() {
@@ -18,8 +56,7 @@ fn when_insert_categories_then_returns_num_categories() {
fn given_categories_when_get_all_categories_then_return_categories() {
let context = TestContext::new();
let connection = &mut SqliteConnection::establish(&context.db_url).unwrap();
- let categories = [make_fake_category(0), make_fake_category(1)];
- let _ = queries::categories::insert_categories(&categories, connection).unwrap();
+ let categories = given_categories(connection);
let categories_in_db = queries::categories::get_all_categories(connection).unwrap();
@@ -36,8 +73,7 @@ fn given_categories_when_get_all_categories_then_return_categories() {
fn given_categories_when_delete_all_categories_then_return_num_of_categories() {
let context = TestContext::new();
let connection = &mut SqliteConnection::establish(&context.db_url).unwrap();
- let categories = [make_fake_category(0), make_fake_category(1)];
- let _ = queries::categories::insert_categories(&categories, connection).unwrap();
+ let categories = given_categories(connection);
let num_categories_deleted = queries::categories::delete_all_categories(connection).unwrap();
@@ -48,8 +84,7 @@ fn given_categories_when_delete_all_categories_then_return_num_of_categories() {
fn given_deleted_categories_when_get_all_categories_then_return_empty() {
let context = TestContext::new();
let connection = &mut SqliteConnection::establish(&context.db_url).unwrap();
- let categories = [make_fake_category(0), make_fake_category(1)];
- let _ = queries::categories::insert_categories(&categories, connection).unwrap();
+ given_categories(connection);
let _ = queries::categories::delete_all_categories(connection).unwrap();
let categories_returned = queries::categories::get_all_categories(connection).unwrap();
@@ -58,8 +93,46 @@ fn given_deleted_categories_when_get_all_categories_then_return_empty() {
}
#[test]
-fn todo() {
- todo!("test get_all_balances");
+fn given_categories_and_no_transactions_when_get_all_balances_then_return_all_zero() {
+ let context = TestContext::new();
+ let connection = &mut SqliteConnection::establish(&context.db_url).unwrap();
+ given_categories(connection);
+
+ let balances = queries::categories::get_all_category_balances(connection);
+
+ assert!(balances.is_ok());
+ let mut balances = balances.unwrap();
+ balances.sort_by(|b1, b2| b1.category_id.cmp(&b2.category_id));
+ assert_eq!(balances.len(), 2);
+ for balance in balances {
+ assert_eq!(0, balance.balance);
+ }
+}
+
+#[test]
+fn given_categories_and_transaction_categorisations_when_get_all_balances_then_return_balances() {
+ let context = TestContext::new();
+ let connection = &mut SqliteConnection::establish(&context.db_url).unwrap();
+ let categories = given_categories(connection);
+ let _accounts = given_accounts(connection);
+ let _transactions = given_transactions(connection);
+ let transaction_categorisations = given_transaction_categorisations(connection);
+
+ let balances = queries::categories::get_all_category_balances(connection);
+
+ assert!(balances.is_ok());
+ let mut balances = balances.unwrap();
+ balances.sort_by(|b1, b2| b1.category_id.cmp(&b2.category_id));
+ assert_eq!(balances.len(), categories.len());
+ for category in categories {
+ let balance = balances.iter().find(|b| b.category_id == category.id).unwrap();
+ let expected_balance: i32 = transaction_categorisations
+ .iter()
+ .filter(|t| t.category_id == category.id)
+ .map(|t| t.quantity)
+ .sum();
+ assert_eq!(expected_balance, balance.balance);
+ }
}
#[test]