diff options
| author | Joe Carstairs <jcarstairs@scottlogic.com> | 2025-07-28 13:22:53 +0100 |
|---|---|---|
| committer | Joe Carstairs <jcarstairs@scottlogic.com> | 2025-07-28 13:30:27 +0100 |
| commit | 2361adeb0ca77904138e3466d51c2f44cf6df613 (patch) | |
| tree | f6e7192908f99fab62061913d8a1e9d2b918414b /schist_queries | |
| parent | c7ed1e61ce2218be0b9e60577454124c4e43a366 (diff) | |
Tidier folders
Diffstat (limited to 'schist_queries')
23 files changed, 0 insertions, 1416 deletions
diff --git a/schist_queries/Cargo.toml b/schist_queries/Cargo.toml deleted file mode 100644 index 2cd0c03..0000000 --- a/schist_queries/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "schist_queries" -version = "0.1.0" -edition = "2021" - -[dependencies] -anyhow = { workspace = true } -chrono = { workspace = true, features = ["serde"] } -diesel = { workspace = true, features = ["sqlite"] } -schist_models = { path = "../schist_models" } -schist_schema = { path = "../schist_schema" } -schist_traits = { path = "../schist_traits" } - -[dev-dependencies] -diesel_migrations = { workspace = true } -libsqlite3-sys = { workspace = true, features = ["bundled"] } -schist_fakes = { path = "../schist_fakes" } diff --git a/schist_queries/src/account_transfers.rs b/schist_queries/src/account_transfers.rs deleted file mode 100644 index 070bdc3..0000000 --- a/schist_queries/src/account_transfers.rs +++ /dev/null @@ -1,40 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::account_transfer::AccountTransfer; -use schist_schema::schema::account_transfers::dsl::account_transfers as account_transfers_table; - -pub fn delete_all_account_transfers(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(account_transfers_table) - .execute(connection) - .with_context(|| "failed to delete all account_transfers")?; - Ok(num_rows_deleted) -} - -pub fn get_all_account_transfers(connection: &mut SqliteConnection) -> Result<Vec<AccountTransfer>> { - let all_account_transfers = account_transfers_table.select(AccountTransfer::as_select()) - .load(connection) - .with_context(|| "failed to get all account transfers")?; - Ok(all_account_transfers) -} - -pub fn insert_account_transfers( - account_transfers: &[AccountTransfer], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_account_transfers_inserted = diesel::insert_into(account_transfers_table) - .values(account_transfers) - .execute(connection) - .with_context(|| insert_err_msg(account_transfers))?; - Ok(num_account_transfers_inserted) -} - -fn insert_err_msg(account_transfers: &[AccountTransfer]) -> String { - format!( - "failed to insert account transfers: [{}]", - account_transfers - .iter() - .map(|a| a.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} diff --git a/schist_queries/src/accounts.rs b/schist_queries/src/accounts.rs deleted file mode 100644 index ead281a..0000000 --- a/schist_queries/src/accounts.rs +++ /dev/null @@ -1,40 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::account::Account; -use schist_schema::schema::accounts::dsl::accounts as accounts_table; - -pub fn delete_all_accounts(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(accounts_table) - .execute(connection) - .with_context(|| "failed to delete all accounts")?; - Ok(num_rows_deleted) -} - -pub fn get_all_accounts(connection: &mut SqliteConnection) -> Result<Vec<Account>> { - let all_accounts = accounts_table.select(Account::as_select()) - .load(connection) - .with_context(|| "failed to get all accounts")?; - Ok(all_accounts) -} - -pub fn insert_accounts( - accounts: &[Account], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_accounts_inserted = diesel::insert_into(accounts_table) - .values(accounts) - .execute(connection) - .with_context(|| insert_err_msg(accounts))?; - Ok(num_accounts_inserted) -} - -fn insert_err_msg(accounts: &[Account]) -> String { - format!( - "failed to insert accounts: [{}]", - accounts - .iter() - .map(|a| format!("\"{}\": \"{}\"", a.id, a.name)) - .collect::<Vec<String>>() - .join(", ") - ) -} diff --git a/schist_queries/src/budget_drips.rs b/schist_queries/src/budget_drips.rs deleted file mode 100644 index b6f9372..0000000 --- a/schist_queries/src/budget_drips.rs +++ /dev/null @@ -1,40 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::budget_drip::BudgetDrip; -use schist_schema::schema::budget_drips::dsl::budget_drips as budget_drips_table; - -pub fn delete_all_budget_drips(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(budget_drips_table) - .execute(connection) - .with_context(|| "failed to delete all budget drips")?; - Ok(num_rows_deleted) -} - -pub fn get_all_budget_drips(connection: &mut SqliteConnection) -> Result<Vec<BudgetDrip>> { - let all_budget_drips = budget_drips_table.select(BudgetDrip::as_select()) - .load(connection) - .with_context(|| "failed to get all budget drips")?; - Ok(all_budget_drips) -} - -pub fn insert_budget_drips( - budget_drips: &[BudgetDrip], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_budget_drips_inserted = diesel::insert_into(budget_drips_table) - .values(budget_drips) - .execute(connection) - .with_context(|| insert_err_msg(budget_drips))?; - Ok(num_budget_drips_inserted) -} - -fn insert_err_msg(budget_drips: &[BudgetDrip]) -> String { - format!( - "failed to insert budget drips: [{}]", - budget_drips - .iter() - .map(|a| a.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} diff --git a/schist_queries/src/categories.rs b/schist_queries/src/categories.rs deleted file mode 100644 index f4a9747..0000000 --- a/schist_queries/src/categories.rs +++ /dev/null @@ -1,49 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::category::Category; -use schist_schema::schema::categories::{self as categories_schema, dsl::categories as categories_table}; - -pub fn delete_all_categories(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(categories_table) - .execute(connection) - .with_context(|| "failed to delete all categories")?; - Ok(num_rows_deleted) -} - -pub fn get_all_categories(connection: &mut SqliteConnection) -> Result<Vec<Category>> { - let all_categories = categories_table - .select(Category::as_select()) - .load(connection) - .with_context(|| "failed to get all categories")?; - Ok(all_categories) -} - -pub fn get_all_category_ids(connection: &mut SqliteConnection) -> Result<Vec<i32>> { - let all_category_ids = categories_table - .select(categories_schema::id) - .load(connection) - .with_context(|| "failed to get all category IDs")?; - Ok(all_category_ids) -} - -pub fn insert_categories( - categories: &[Category], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_categories_inserted = diesel::insert_into(categories_table) - .values(categories) - .execute(connection) - .with_context(|| insert_err_msg(categories))?; - Ok(num_categories_inserted) -} - -fn insert_err_msg(categories: &[Category]) -> String { - format!( - "failed to insert categories: [{}]", - categories - .iter() - .map(|c| format!("\"{}\": \"{}\"", c.id, c.name)) - .collect::<Vec<String>>() - .join(", ") - ) -} diff --git a/schist_queries/src/category_transfers.rs b/schist_queries/src/category_transfers.rs deleted file mode 100644 index 33a53ea..0000000 --- a/schist_queries/src/category_transfers.rs +++ /dev/null @@ -1,74 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{dsl::sum, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_schema::schema::category_transfers::{ - self as category_transfers_schema, - dsl::category_transfers as category_transfers_table, -}; -use schist_models::category_transfer::CategoryTransfer; - -pub fn delete_all_category_transfers(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(category_transfers_table) - .execute(connection) - .with_context(|| "failed to delete all category transfers")?; - Ok(num_rows_deleted) -} - -pub fn get_all_category_transfers(connection: &mut SqliteConnection) -> Result<Vec<CategoryTransfer>> { - let all_category_transfers = category_transfers_table - .select(CategoryTransfer::as_select()) - .load(connection) - .with_context(|| "failed to get all category transfers")?; - Ok(all_category_transfers) -} - -pub fn insert_category_transfers( - category_transfers: &[CategoryTransfer], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_rows_inserted = diesel::insert_into(category_transfers_table) - .values(category_transfers) - .execute(connection) - .with_context(|| insert_err_msg(&category_transfers))?; - Ok(num_rows_inserted) -} - -fn insert_err_msg(category_transfers: &[CategoryTransfer]) -> String { - format!( - "failed to insert category transfers: [{}]", - category_transfers - .iter() - .map(|ct| ct.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} - -pub fn sum_category_transfer_quantity_per_from_category_id( - connection: &mut SqliteConnection, -) -> Result<Vec<(i32, i64)>> { - let sum = category_transfers_table - .group_by(category_transfers_schema::from_category_id) - .select(( - category_transfers_schema::from_category_id, - sum(category_transfers_schema::quantity), - )) - .load::<(i32, Option<i64>)>(connection) - .map(|result| result.iter().map(|sum| (sum.0, sum.1.unwrap_or(0))).collect()) - .with_context(|| "failed to sum category transfer quantity per from category ID")?; - Ok(sum) -} - -pub fn sum_category_transfer_quantity_per_to_category_id( - connection: &mut SqliteConnection, -) -> Result<Vec<(i32, i64)>> { - let sum = category_transfers_table - .group_by(category_transfers_schema::to_category_id) - .select(( - category_transfers_schema::to_category_id, - sum(category_transfers_schema::quantity), - )) - .load::<(i32, Option<i64>)>(connection) - .map(|vec| vec.iter().map(|(id, sum)| (*id, sum.unwrap_or(0))).collect()) - .with_context(|| "failed to sum category transfer quantity per to category ID")?; - Ok(sum) -} diff --git a/schist_queries/src/clear.rs b/schist_queries/src/clear.rs deleted file mode 100644 index 7cee699..0000000 --- a/schist_queries/src/clear.rs +++ /dev/null @@ -1,16 +0,0 @@ -use anyhow::Result; -use diesel::SqliteConnection; - -use crate::{ - accounts::delete_all_accounts, budget_drips::delete_all_budget_drips, categories::delete_all_categories, category_transfers::delete_all_category_transfers, transaction_categorisations::delete_all_transaction_categorisations, transactions::delete_all_transactions -}; - -pub fn clear(connection: &mut SqliteConnection) -> Result<()> { - delete_all_accounts(connection)?; - delete_all_budget_drips(connection)?; - delete_all_categories(connection)?; - delete_all_category_transfers(connection)?; - delete_all_transactions(connection)?; - delete_all_transaction_categorisations(connection)?; - Ok(()) -} diff --git a/schist_queries/src/lib.rs b/schist_queries/src/lib.rs deleted file mode 100644 index a1a5c20..0000000 --- a/schist_queries/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod accounts; -pub mod account_transfers; -pub mod budget_drips; -pub mod categories; -pub mod category_transfers; -pub mod clear; -pub mod transactions; -pub mod transaction_categorisations; - -mod utils; diff --git a/schist_queries/src/transaction_categorisations.rs b/schist_queries/src/transaction_categorisations.rs deleted file mode 100644 index 320782d..0000000 --- a/schist_queries/src/transaction_categorisations.rs +++ /dev/null @@ -1,59 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{dsl::sum, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::transaction_categorisation::TransactionCategorisation; -use schist_schema::schema::transaction_categorisations::{ - self as transaction_categorisations_schema, - dsl::transaction_categorisations as transaction_categorisations_table, -}; - -pub fn delete_all_transaction_categorisations(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(transaction_categorisations_table) - .execute(connection) - .with_context(|| "failed to delete all transaction categorisations")?; - Ok(num_rows_deleted) -} - -pub fn get_all_transaction_categorisations(connection: &mut SqliteConnection) -> Result<Vec<TransactionCategorisation>> { - let all_transaction_categorisations = transaction_categorisations_table - .select(TransactionCategorisation::as_select()) - .load(connection) - .with_context(|| "failed to get all transaction categorisations")?; - Ok(all_transaction_categorisations) -} - -pub fn insert_transaction_categorisations( - transaction_categorisations: &[TransactionCategorisation], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_rows_inserted = diesel::insert_into(transaction_categorisations_table) - .values(transaction_categorisations) - .execute(connection) - .with_context(|| insert_err_msg(&transaction_categorisations))?; - Ok(num_rows_inserted) -} - -fn insert_err_msg(transaction_categorisations: &[TransactionCategorisation]) -> String { - format!( - "failed to insert transaction categorisations: [{}]", - transaction_categorisations - .iter() - .map(|tc| tc.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} - -pub fn sum_transaction_categorisation_quantity_per_category_id( - connection: &mut SqliteConnection, -) -> Result<Vec<(i32, i64)>> { - let sum = transaction_categorisations_table - .group_by(transaction_categorisations_schema::category_id) - .select(( - transaction_categorisations_schema::category_id, - sum(transaction_categorisations_schema::quantity), - )) - .load::<(i32, Option<i64>)>(connection) - .map(|vec| vec.iter().map(|(category_id, sum)| (*category_id, sum.unwrap_or(0))).collect()) - .with_context(|| "failed to sum transaction categorisation quantity per category ID")?; - Ok(sum) -} diff --git a/schist_queries/src/transactions.rs b/schist_queries/src/transactions.rs deleted file mode 100644 index 70b14e7..0000000 --- a/schist_queries/src/transactions.rs +++ /dev/null @@ -1,41 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::transaction::Transaction; -use schist_schema::schema::transactions::dsl::transactions as transactions_table; - -pub fn delete_all_transactions(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(transactions_table) - .execute(connection) - .with_context(|| "failed to delete all transactions")?; - Ok(num_rows_deleted) -} - -pub fn get_all_transactions(connection: &mut SqliteConnection) -> Result<Vec<Transaction>> { - let all_transactions = transactions_table - .select(Transaction::as_select()) - .load(connection) - .with_context(|| "failed to get all category transfers")?; - Ok(all_transactions) -} - -pub fn insert_transactions( - transactions: &[Transaction], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_rows_inserted = diesel::insert_into(transactions_table) - .values(transactions) - .execute(connection) - .with_context(|| insert_err_msg(&transactions))?; - Ok(num_rows_inserted) -} - -fn insert_err_msg(transactions: &[Transaction]) -> String { - format!( - "failed to insert transactions: [{}]", - transactions - .iter() - .map(|t| t.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} diff --git a/schist_queries/src/utils/calculate_budgets_accrual.rs b/schist_queries/src/utils/calculate_budgets_accrual.rs deleted file mode 100644 index ca82953..0000000 --- a/schist_queries/src/utils/calculate_budgets_accrual.rs +++ /dev/null @@ -1,72 +0,0 @@ -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); - } -} diff --git a/schist_queries/src/utils/calculate_category_balance.rs b/schist_queries/src/utils/calculate_category_balance.rs deleted file mode 100644 index 73e80cd..0000000 --- a/schist_queries/src/utils/calculate_category_balance.rs +++ /dev/null @@ -1,130 +0,0 @@ -use anyhow::Result; -use schist_models::{budget_drip::BudgetDrip, category::Category}; - -use super::{calculate_budgets_accrual, find_by_id_or}; - -pub fn calculate_category_balance( - category: &Category, - transaction_sums: &[(i32, i64)], - category_transfer_from_sums: &[(i32, i64)], - category_transfer_to_sums: &[(i32, i64)], - budget_drips: &[BudgetDrip], -) -> Result<i64> { - let transaction_sum = find_by_id_or(transaction_sums, category.id, 0); - let category_transfer_from_sum = find_by_id_or(category_transfer_from_sums, category.id, 0); - let category_transfer_to_sum = find_by_id_or(category_transfer_to_sums, category.id, 0); - let budget_accruals_sum = calculate_budgets_accrual(category, budget_drips)?; - - Ok( - transaction_sum - + budget_accruals_sum - + category_transfer_to_sum - - category_transfer_from_sum - ) -} - -#[cfg(test)] -mod test { - use schist_fakes::{budget_drip::make_fake_budget_drip_builder, category::make_fake_category}; - - use super::calculate_category_balance; - - #[test] - fn when_no_data_then_returns_zero() { - let category = make_fake_category(0); - - let result = calculate_category_balance(&category, &[], &[], &[], &[]); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 0_i64); - } - - #[test] - fn when_data_only_for_another_category_then_returns_zero() { - let category = make_fake_category(0); - let transaction_sums = [(1, 100)]; - let category_transfer_from_sums = [(1, 91)]; - let category_transfer_to_sums = [(2, 79)]; - let budget_drips = [ - make_fake_budget_drip_builder(0).quantity(100).category_id(1).build().unwrap(), - ]; - - let result = calculate_category_balance( - &category, - &transaction_sums, - &category_transfer_from_sums, - &category_transfer_to_sums, - &budget_drips, - ); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 0_i64); - } - - #[test] - fn when_transaction_sum_is_zero_then_returns_zero() { - let category = make_fake_category(0); - let transaction_sums = [(0, 0)]; - let category_transfer_from_sums = []; - let category_transfer_to_sums = []; - let budget_drips = []; - - let result = calculate_category_balance( - &category, - &transaction_sums, - &category_transfer_from_sums, - &category_transfer_to_sums, - &budget_drips, - ); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 0_i64); - } - - #[test] - fn when_category_transfers_are_zero_then_returns_zero() { - let category = make_fake_category(0); - let transaction_sums = []; - let category_transfer_from_sums = [(0, 0)]; - let category_transfer_to_sums = [(0, 0)]; - let budget_drips = []; - - let result = calculate_category_balance( - &category, - &transaction_sums, - &category_transfer_from_sums, - &category_transfer_to_sums, - &budget_drips, - ); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 0_i64); - } - - #[test] - fn when_some_data_then_calculates_as_expected() { - let category = make_fake_category(0); - let transaction_sums = [(0, 100)]; - let category_transfer_from_sums = [(0, 91)]; - let category_transfer_to_sums = [(0, 79)]; - let budget_drips = [ - make_fake_budget_drip_builder(0).quantity(77).category_id(0).build().unwrap(), - make_fake_budget_drip_builder(0).quantity(77).category_id(0).build().unwrap(), - make_fake_budget_drip_builder(0).quantity(77).category_id(0).build().unwrap(), - make_fake_budget_drip_builder(0).quantity(77).category_id(0).build().unwrap(), - make_fake_budget_drip_builder(0).quantity(77).category_id(0).build().unwrap(), - ]; - - let result = calculate_category_balance( - &category, - &transaction_sums, - &category_transfer_from_sums, - &category_transfer_to_sums, - &budget_drips, - ); - - let expected_result = 100 + (-91) + 79 + 77 * 5; - assert!(result.is_ok()); - assert_eq!(result.unwrap(), expected_result); - } -} diff --git a/schist_queries/src/utils/find_by_id_or.rs b/schist_queries/src/utils/find_by_id_or.rs deleted file mode 100644 index 8335e5c..0000000 --- a/schist_queries/src/utils/find_by_id_or.rs +++ /dev/null @@ -1,41 +0,0 @@ -pub fn find_by_id_or<Id: PartialEq, Val: Copy>( - arr: &[(Id, Val)], - id: Id, - default: Val, -) -> Val { - arr.iter() - .find(|(elem_id, _)| *elem_id == id) - .map_or(default, |row| row.1) -} - -#[cfg(test)] -mod test { - use super::find_by_id_or; - - #[test] - fn when_no_elements_then_return_default() { - let arr = []; - - let result = find_by_id_or(&arr, 1, 42); - - assert_eq!(result, 42); - } - - #[test] - fn when_id_not_in_elements_then_return_default() { - let arr = [(0, 100), (2, 200)]; - - let result = find_by_id_or(&arr, 1, 42); - - assert_eq!(result, 42); - } - - #[test] - fn when_id_in_elements_then_return_value() { - let arr = [(1, 67)]; - - let result = find_by_id_or(&arr, 1, 42); - - assert_eq!(result, 67); - } -} diff --git a/schist_queries/src/utils/mod.rs b/schist_queries/src/utils/mod.rs deleted file mode 100644 index f2653d8..0000000 --- a/schist_queries/src/utils/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod calculate_budgets_accrual; -mod calculate_category_balance; -mod find_by_id_or; - -use calculate_budgets_accrual::calculate_budgets_accrual; - -pub use calculate_category_balance::calculate_category_balance; -pub use find_by_id_or::find_by_id_or; diff --git a/schist_queries/tests/account.rs b/schist_queries/tests/account.rs deleted file mode 100644 index e3bb7db..0000000 --- a/schist_queries/tests/account.rs +++ /dev/null @@ -1,60 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::account::make_fake_account; -use schist_queries as queries; - -#[test] -fn when_insert_accounts_then_returns_num_accounts() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0), make_fake_account(1)]; - - let num_accounts_inserted = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - - assert_eq!(num_accounts_inserted, 2); -} - -#[test] -fn given_accounts_when_get_all_accounts_then_return_accounts() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - - let accounts_in_db = queries::accounts::get_all_accounts(connection).unwrap(); - - assert_eq!(accounts_in_db.len(), accounts.len()); - for account in &accounts { - assert!(accounts_in_db.iter().any(|account_in_db| account_in_db.eq(&account))); - } - for account_in_db in accounts_in_db { - assert!(accounts.iter().any(|account| account.eq(&account_in_db))); - } -} - -#[test] -fn given_accounts_when_delete_all_accounts_then_return_num_of_accounts() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - - let num_accounts_deleted = queries::accounts::delete_all_accounts(connection).unwrap(); - - assert_eq!(num_accounts_deleted, accounts.len()); -} - -#[test] -fn given_deleted_accounts_when_get_all_accounts_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - let _ = queries::accounts::delete_all_accounts(connection).unwrap(); - - let accounts_returned = queries::accounts::get_all_accounts(connection).unwrap(); - - assert_eq!(accounts_returned.len(), 0); -} diff --git a/schist_queries/tests/account_transfers.rs b/schist_queries/tests/account_transfers.rs deleted file mode 100644 index 13f7db7..0000000 --- a/schist_queries/tests/account_transfers.rs +++ /dev/null @@ -1,71 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::{account::make_fake_account, account_transfer::make_fake_account_transfer}; -use schist_queries as queries; - -#[test] -fn when_insert_account_transfers_then_returns_num_account_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let account_transfers = [make_fake_account_transfer(0), make_fake_account_transfer(1)]; - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - - let num_account_transfers_inserted = queries::account_transfers::insert_account_transfers( - &account_transfers, - connection, - ).unwrap(); - - assert_eq!(num_account_transfers_inserted, 2); -} - -#[test] -fn given_account_transfers_when_get_all_account_transfers_then_return_account_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let account_transfers = [make_fake_account_transfer(0), make_fake_account_transfer(1)]; - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - let _ = queries::account_transfers::insert_account_transfers(&account_transfers, connection).unwrap(); - - let account_transfers_in_db = queries::account_transfers::get_all_account_transfers(connection).unwrap(); - - assert_eq!(account_transfers_in_db.len(), account_transfers.len()); - for account_transfer in &account_transfers { - assert!(account_transfers_in_db.iter().any(|account_transfer_in_db| account_transfer_in_db.eq(&account_transfer))); - } - for account_transfer_in_db in account_transfers_in_db { - assert!(account_transfers.iter().any(|account_transfer| account_transfer.eq(&account_transfer_in_db))); - } -} - -#[test] -fn given_account_transfers_when_delete_all_account_transfers_then_return_num_of_account_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let account_transfers = [make_fake_account_transfer(0), make_fake_account_transfer(1)]; - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - let _ = queries::account_transfers::insert_account_transfers(&account_transfers, connection).unwrap(); - - let num_account_transfers_deleted = queries::account_transfers::delete_all_account_transfers(connection).unwrap(); - - assert_eq!(num_account_transfers_deleted, account_transfers.len()); -} - -#[test] -fn given_deleted_account_transfers_when_get_all_account_transfers_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let account_transfers = [make_fake_account_transfer(0), make_fake_account_transfer(1)]; - let accounts = [make_fake_account(0), make_fake_account(1)]; - let _ = queries::accounts::insert_accounts(&accounts, connection).unwrap(); - let _ = queries::account_transfers::insert_account_transfers(&account_transfers, connection).unwrap(); - let _ = queries::account_transfers::delete_all_account_transfers(connection).unwrap(); - - let account_transfers_returned = queries::account_transfers::get_all_account_transfers(connection).unwrap(); - - assert_eq!(account_transfers_returned.len(), 0); -} diff --git a/schist_queries/tests/budget_drips.rs b/schist_queries/tests/budget_drips.rs deleted file mode 100644 index ac33885..0000000 --- a/schist_queries/tests/budget_drips.rs +++ /dev/null @@ -1,186 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::{budget_drip::make_fake_budget_drip_builder, category::make_fake_category}; -use schist_models::{category::Category, date_utc::DateUtc}; -use schist_queries as queries; - -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); - categories -} - -#[test] -fn when_insert_budget_drips_then_returns_num_budget_drips() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - let budget_drips = [ - make_fake_budget_drip_builder(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .category_id(0) - .build().unwrap(), - make_fake_budget_drip_builder(1) - .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) - .category_id(0) - .build().unwrap(), - ]; - - let num_budget_drips_inserted = queries::budget_drips::insert_budget_drips(&budget_drips, connection).unwrap(); - - assert_eq!(num_budget_drips_inserted, 2); -} - -#[test] -fn given_budget_drip_when_insert_budget_drip_same_category_and_same_date_then_return_err() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - - let budget_drips_1 = [ - make_fake_budget_drip_builder(0) - .category_id(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .build().unwrap() - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips_1, connection); - - let budget_drips_2 = [ - make_fake_budget_drip_builder(1) - .category_id(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .build().unwrap() - ]; - let result = queries::budget_drips::insert_budget_drips(&budget_drips_2, connection); - - assert!(result.is_err()); -} - -#[test] -fn given_budget_drip_when_insert_budget_drip_different_category_and_same_date_then_return_num_budget_drips_inserted() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - - let budget_drips_1 = [ - make_fake_budget_drip_builder(0) - .category_id(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .build().unwrap() - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips_1, connection); - - let budget_drips_2 = [ - make_fake_budget_drip_builder(1) - .category_id(1) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .build().unwrap() - ]; - let result = queries::budget_drips::insert_budget_drips(&budget_drips_2, connection); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 1); -} - -#[test] -fn given_budget_drip_when_insert_budget_drip_same_category_and_different_date_then_return_num_budget_drips_inserted() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - - let budget_drips_1 = [ - make_fake_budget_drip_builder(0) - .category_id(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .build().unwrap() - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips_1, connection); - - let budget_drips_2 = [ - make_fake_budget_drip_builder(1) - .category_id(0) - .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) - .build().unwrap() - ]; - let result = queries::budget_drips::insert_budget_drips(&budget_drips_2, connection); - - assert!(result.is_ok()); - assert_eq!(result.unwrap(), 1); -} - -#[test] -fn given_budget_drips_when_get_all_budget_drips_then_return_budget_drips() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - let budget_drips = [ - make_fake_budget_drip_builder(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .category_id(0) - .build().unwrap(), - make_fake_budget_drip_builder(1) - .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) - .category_id(0) - .build().unwrap(), - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips, connection).unwrap(); - - let budget_drips_in_db = queries::budget_drips::get_all_budget_drips(connection).unwrap(); - - assert_eq!(budget_drips_in_db.len(), budget_drips.len()); - assert_eq!(budget_drips_in_db[0], budget_drips[0]); - assert_eq!(budget_drips_in_db[1], budget_drips[1]); - for budget_drip in &budget_drips { - assert!(budget_drips_in_db.iter().any(|budget_drip_in_db| budget_drip_in_db.eq(&budget_drip))); - } - for budget_drip_in_db in budget_drips_in_db { - assert!(budget_drips.iter().any(|budget_drip| budget_drip.eq(&budget_drip_in_db))); - } -} - -#[test] -fn given_budget_drips_when_delete_all_budget_drips_then_return_num_of_budget_drips() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - let budget_drips = [ - make_fake_budget_drip_builder(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .category_id(0) - .build().unwrap(), - make_fake_budget_drip_builder(1) - .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) - .category_id(0) - .build().unwrap(), - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips, connection).unwrap(); - - let num_budget_drips_deleted = queries::budget_drips::delete_all_budget_drips(connection).unwrap(); - - assert_eq!(num_budget_drips_deleted, budget_drips.len()); -} - -#[test] -fn given_deleted_budget_drips_when_get_all_budget_drips_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let _categories = given_categories(connection); - let budget_drips = [ - make_fake_budget_drip_builder(0) - .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) - .category_id(0) - .build().unwrap(), - make_fake_budget_drip_builder(1) - .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) - .category_id(0) - .build().unwrap(), - ]; - let _ = queries::budget_drips::insert_budget_drips(&budget_drips, connection).unwrap(); - let _ = queries::budget_drips::delete_all_budget_drips(connection).unwrap(); - - let budget_drips_returned = queries::budget_drips::get_all_budget_drips(connection).unwrap(); - - assert_eq!(budget_drips_returned.len(), 0); -} diff --git a/schist_queries/tests/categories.rs b/schist_queries/tests/categories.rs deleted file mode 100644 index 915e853..0000000 --- a/schist_queries/tests/categories.rs +++ /dev/null @@ -1,81 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::category::make_fake_category; -use schist_models::category::Category; -use schist_queries as queries; - -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 -} - -#[test] -fn when_insert_categories_then_returns_num_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 num_categories_inserted = queries::categories::insert_categories(&categories, connection).unwrap(); - - assert_eq!(num_categories_inserted, 2); -} - -#[test] -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 = given_categories(connection); - - let categories_in_db = queries::categories::get_all_categories(connection).unwrap(); - - assert_eq!(categories_in_db.len(), categories.len()); - for category in &categories { - assert!(categories_in_db.iter().any(|category_in_db| category_in_db.eq(&category))); - } - for category_in_db in categories_in_db { - assert!(categories.iter().any(|category| category.eq(&category_in_db))); - } -} - -#[test] -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 = given_categories(connection); - - let num_categories_deleted = queries::categories::delete_all_categories(connection).unwrap(); - - assert_eq!(num_categories_deleted, categories.len()); -} - -#[test] -fn given_deleted_categories_when_get_all_categories_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_categories(connection); - let _ = queries::categories::delete_all_categories(connection).unwrap(); - - let categories_returned = queries::categories::get_all_categories(connection).unwrap(); - - assert_eq!(categories_returned.len(), 0); -} - -#[test] -fn given_categories_when_get_all_ids_then_return_all_ids() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = given_categories(connection); - - let ids = queries::categories::get_all_category_ids(connection).unwrap(); - - assert_eq!(categories.len(), ids.len()); - for category in &categories { - assert!(ids.iter().any(|id| category.id == *id)); - } - for id in ids { - assert!(categories.iter().any(|category| category.id == id)); - } -} diff --git a/schist_queries/tests/category_transfers.rs b/schist_queries/tests/category_transfers.rs deleted file mode 100644 index f37a668..0000000 --- a/schist_queries/tests/category_transfers.rs +++ /dev/null @@ -1,126 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::{category::make_fake_category, category_transfer::make_fake_category_transfer_builder}; -use schist_queries as queries; - -#[test] -fn when_insert_category_transfers_then_returns_num_category_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = [make_fake_category(0), make_fake_category(1)]; - let category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - - let num_category_transfers_inserted = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - - assert_eq!(num_category_transfers_inserted, 2); -} - -#[test] -fn given_category_transfers_when_get_all_category_transfers_then_return_category_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = [make_fake_category(0), make_fake_category(1)]; - let category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - let _ = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - - let category_transfers_in_db = queries::category_transfers::get_all_category_transfers(connection).unwrap(); - - assert_eq!(category_transfers_in_db.len(), category_transfers.len()); - for category_transfer in &category_transfers { - assert!(category_transfers_in_db.iter().any(|category_transfer_in_db| category_transfer_in_db.eq(&category_transfer))); - } - for category_transfer_in_db in category_transfers_in_db { - assert!(category_transfers.iter().any(|category_transfer| category_transfer.eq(&category_transfer_in_db))); - } -} - -#[test] -fn given_category_transfers_when_delete_all_category_transfers_then_return_num_of_category_transfers() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = [make_fake_category(0), make_fake_category(1)]; - let category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - let _ = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - - let num_category_transfers_deleted = queries::category_transfers::delete_all_category_transfers(connection).unwrap(); - - assert_eq!(num_category_transfers_deleted, category_transfers.len()); -} - -#[test] -fn given_deleted_category_transfers_when_get_all_category_transfers_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 category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - let _ = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - let _ = queries::category_transfers::delete_all_category_transfers(connection).unwrap(); - - let category_transfers_returned = queries::category_transfers::get_all_category_transfers(connection).unwrap(); - - assert_eq!(category_transfers_returned.len(), 0); -} - -#[test] -fn given_category_transfers_when_sum_quantity_per_from_category_id_then_returns_sum_per_from_category_id() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = [make_fake_category(0), make_fake_category(1)]; - let category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).quantity(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).quantity(2).build().unwrap(), - make_fake_category_transfer_builder(2).from_category_id(1).to_category_id(0).quantity(4).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - let _ = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - - let sums = queries::category_transfers::sum_category_transfer_quantity_per_from_category_id(connection); - - assert!(sums.is_ok()); - let mut sums = sums.unwrap(); - sums.sort_by_key(|sum| sum.0); - assert_eq!(categories.len(), sums.len()); - assert_eq!(3, sums[0].1); - assert_eq!(4, sums[1].1); -} - -#[test] -fn given_category_transfers_when_sum_quantity_per_to_category_id_then_returns_sum_per_to_category_id() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let categories = [make_fake_category(0), make_fake_category(1)]; - let category_transfers = [ - make_fake_category_transfer_builder(0).from_category_id(0).to_category_id(1).quantity(1).build().unwrap(), - make_fake_category_transfer_builder(1).from_category_id(0).to_category_id(1).quantity(2).build().unwrap(), - make_fake_category_transfer_builder(2).from_category_id(1).to_category_id(0).quantity(4).build().unwrap(), - ]; - let _ = queries::categories::insert_categories(&categories, connection); - let _ = queries::category_transfers::insert_category_transfers(&category_transfers, connection).unwrap(); - - let sums = queries::category_transfers::sum_category_transfer_quantity_per_to_category_id(connection); - - assert!(sums.is_ok()); - let mut sums = sums.unwrap(); - sums.sort_by_key(|sum| sum.0); - assert_eq!(categories.len(), sums.len()); - assert_eq!(4, sums[0].1); - assert_eq!(3, sums[1].1); -} diff --git a/schist_queries/tests/common/mod.rs b/schist_queries/tests/common/mod.rs deleted file mode 100644 index 5ff67da..0000000 --- a/schist_queries/tests/common/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod test_context; diff --git a/schist_queries/tests/common/test_context.rs b/schist_queries/tests/common/test_context.rs deleted file mode 100644 index 183cd9b..0000000 --- a/schist_queries/tests/common/test_context.rs +++ /dev/null @@ -1,44 +0,0 @@ -use std::sync::atomic::{AtomicU64, Ordering}; - -use diesel::{Connection, SqliteConnection}; -use diesel_migrations::MigrationHarness; -use schist_models::migrations::MIGRATIONS; -use schist_queries::clear::clear; - -pub struct TestContext { - pub db_url: String, -} - -static ID_COUNTER: AtomicU64 = AtomicU64::new(0); - -impl TestContext { - pub fn new() -> Self { - let db_url = Self::next_id() + ".sqlite"; - - let connection = &mut SqliteConnection - ::establish(&db_url) - .expect("failed to connect to database"); - - connection - .run_pending_migrations(MIGRATIONS) - .expect("failed to run migrations"); - - clear(connection) - .expect("failed to clear database"); - - Self { - db_url, - } - } - - fn next_id() -> String { - ID_COUNTER.fetch_add(1, Ordering::Relaxed).to_string() - } -} - -impl Drop for TestContext { - fn drop(&mut self) { - std::fs::remove_file(&self.db_url) - .expect(format!("failed to delete database {}", self.db_url).as_str()); - } -} diff --git a/schist_queries/tests/transaction_categorisations.rs b/schist_queries/tests/transaction_categorisations.rs deleted file mode 100644 index 13864b4..0000000 --- a/schist_queries/tests/transaction_categorisations.rs +++ /dev/null @@ -1,130 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::{account::make_fake_account, category::make_fake_category, transaction::make_fake_transaction_builder, transaction_categorisation::make_fake_transaction_categorisation_builder}; -use schist_models::{account::Account, category::Category, transaction::Transaction}; -use schist_queries as queries; - -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_categories(connection: &mut SqliteConnection) -> Vec<Category> { - let categories = vec![make_fake_category(0), make_fake_category(1)]; - let _ = queries::categories::insert_categories(&categories, connection); - categories -} - -fn given_transactions(connection: &mut SqliteConnection) -> Vec<Transaction> { - let transactions = vec![ - make_fake_transaction_builder(0).account_id(0).build().unwrap(), - make_fake_transaction_builder(1).account_id(0).build().unwrap(), - ]; - let _ = queries::transactions::insert_transactions(&transactions, connection); - transactions -} - -#[test] -fn when_insert_transaction_categorisations_then_returns_num_transaction_categorisations() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_accounts(connection); - given_categories(connection); - given_transactions(connection); - let transaction_categorisations = [ - make_fake_transaction_categorisation_builder(0).category_id(0).build().unwrap(), - make_fake_transaction_categorisation_builder(1).category_id(0).build().unwrap(), - ]; - - let num_transaction_categorisations_inserted = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection).unwrap(); - - assert_eq!(num_transaction_categorisations_inserted, 2); -} - -#[test] -fn given_transaction_categorisations_when_get_all_transaction_categorisations_then_return_transaction_categorisations() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_accounts(connection); - given_categories(connection); - given_transactions(connection); - let transaction_categorisations = [ - make_fake_transaction_categorisation_builder(0).category_id(0).build().unwrap(), - make_fake_transaction_categorisation_builder(1).category_id(0).build().unwrap(), - ]; - let _ = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection); - - let transaction_categorisations_in_db = queries::transaction_categorisations::get_all_transaction_categorisations(connection).unwrap(); - - assert_eq!(transaction_categorisations_in_db.len(), transaction_categorisations.len()); - for transaction_categorisation in &transaction_categorisations { - assert!(transaction_categorisations_in_db.iter().any(|transaction_categorisation_in_db| transaction_categorisation_in_db.eq(&transaction_categorisation))); - } - for transaction_categorisation_in_db in transaction_categorisations_in_db { - assert!(transaction_categorisations.iter().any(|transaction_categorisation| transaction_categorisation.eq(&transaction_categorisation_in_db))); - } -} - -#[test] -fn given_transaction_categorisations_when_delete_all_transaction_categorisations_then_return_num_of_transaction_categorisations() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_accounts(connection); - given_categories(connection); - given_transactions(connection); - let transaction_categorisations = [ - make_fake_transaction_categorisation_builder(0).category_id(0).build().unwrap(), - make_fake_transaction_categorisation_builder(1).category_id(0).build().unwrap(), - ]; - let _ = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection); - - let num_transaction_categorisations_deleted = queries::transaction_categorisations::delete_all_transaction_categorisations(connection).unwrap(); - - assert_eq!(num_transaction_categorisations_deleted, transaction_categorisations.len()); -} - -#[test] -fn given_deleted_transaction_categorisations_when_get_all_transaction_categorisations_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_accounts(connection); - given_categories(connection); - given_transactions(connection); - let transaction_categorisations = [ - make_fake_transaction_categorisation_builder(0).category_id(0).build().unwrap(), - make_fake_transaction_categorisation_builder(1).category_id(0).build().unwrap(), - ]; - let _ = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection); - let _ = queries::transaction_categorisations::delete_all_transaction_categorisations(connection); - - let transaction_categorisations_returned = queries::transaction_categorisations::get_all_transaction_categorisations(connection).unwrap(); - - assert_eq!(transaction_categorisations_returned.len(), 0); -} - -#[test] -fn given_transaction_categorisations_when_sum_quantity_per_category_id_then_returns_sum_quantity_per_category_id() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - given_accounts(connection); - let categories = given_categories(connection); - given_transactions(connection); - let transaction_categorisations = [ - make_fake_transaction_categorisation_builder(0).category_id(0).quantity(1).build().unwrap(), - make_fake_transaction_categorisation_builder(1).category_id(0).quantity(2).build().unwrap(), - make_fake_transaction_categorisation_builder(2).category_id(1).quantity(4).build().unwrap(), - ]; - let _ = queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection); - - let sums = queries::transaction_categorisations::sum_transaction_categorisation_quantity_per_category_id(connection); - - assert!(sums.is_ok()); - let mut sums = sums.unwrap(); - sums.sort_by_key(|sum| sum.0); - assert_eq!(categories.len(), sums.len()); - assert_eq!(3, sums[0].1); - assert_eq!(4, sums[1].1); -} diff --git a/schist_queries/tests/transactions.rs b/schist_queries/tests/transactions.rs deleted file mode 100644 index 5e57074..0000000 --- a/schist_queries/tests/transactions.rs +++ /dev/null @@ -1,80 +0,0 @@ -mod common; - -use common::test_context::TestContext; -use diesel::{Connection, SqliteConnection}; -use schist_fakes::{account::make_fake_account, transaction::make_fake_transaction_builder}; -use schist_queries as queries; - -#[test] -fn when_insert_transactions_then_returns_num_transactions() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0)]; - let transactions = [ - make_fake_transaction_builder(0).account_id(0).build().unwrap(), - make_fake_transaction_builder(1).account_id(0).build().unwrap(), - ]; - let _ = queries::accounts::insert_accounts(&accounts, connection); - - let num_transactions_inserted = queries::transactions::insert_transactions(&transactions, connection).unwrap(); - - assert_eq!(num_transactions_inserted, 2); -} - -#[test] -fn given_transactions_when_get_all_transactions_then_return_transactions() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0)]; - let transactions = [ - make_fake_transaction_builder(0).account_id(0).build().unwrap(), - make_fake_transaction_builder(1).account_id(0).build().unwrap(), - ]; - let _ = queries::accounts::insert_accounts(&accounts, connection); - let _ = queries::transactions::insert_transactions(&transactions, connection).unwrap(); - - let transactions_in_db = queries::transactions::get_all_transactions(connection).unwrap(); - - assert_eq!(transactions_in_db.len(), transactions.len()); - for transaction in &transactions { - assert!(transactions_in_db.iter().any(|transaction_in_db| transaction_in_db.eq(&transaction))); - } - for transaction_in_db in transactions_in_db { - assert!(transactions.iter().any(|transaction| transaction.eq(&transaction_in_db))); - } -} - -#[test] -fn given_transactions_when_delete_all_transactions_then_return_num_of_transactions() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0)]; - let transactions = [ - make_fake_transaction_builder(0).account_id(0).build().unwrap(), - make_fake_transaction_builder(1).account_id(0).build().unwrap(), - ]; - let _ = queries::accounts::insert_accounts(&accounts, connection); - let _ = queries::transactions::insert_transactions(&transactions, connection).unwrap(); - - let num_transactions_deleted = queries::transactions::delete_all_transactions(connection).unwrap(); - - assert_eq!(num_transactions_deleted, transactions.len()); -} - -#[test] -fn given_deleted_transactions_when_get_all_transactions_then_return_empty() { - let context = TestContext::new(); - let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); - let accounts = [make_fake_account(0)]; - let transactions = [ - make_fake_transaction_builder(0).account_id(0).build().unwrap(), - make_fake_transaction_builder(1).account_id(0).build().unwrap(), - ]; - let _ = queries::accounts::insert_accounts(&accounts, connection); - let _ = queries::transactions::insert_transactions(&transactions, connection).unwrap(); - let _ = queries::transactions::delete_all_transactions(connection).unwrap(); - - let transactions_returned = queries::transactions::get_all_transactions(connection).unwrap(); - - assert_eq!(transactions_returned.len(), 0); -} |
