diff options
Diffstat (limited to 'backend/core/tests/queries')
| -rw-r--r-- | backend/core/tests/queries/categories.rs | 93 |
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] |
