diff options
| author | Joe Carstairs <me@joeac.net> | 2025-08-15 16:02:40 +0000 |
|---|---|---|
| committer | joeac <me@joeac.net> | 2025-08-15 16:02:40 +0000 |
| commit | 703496a49315f7b67442abf0e0df3c41d3605d3b (patch) | |
| tree | 8e92f3842710162f3b26e910eb931950c1049f07 /schist_core/schist_queries/tests/drips.rs | |
| parent | 8d714f760bd0349560d464583a151a04a19de1c9 (diff) | |
task-012 (#2)
Co-authored-by: Joe Carstairs <jcarstairs@scottlogic.com>
Reviewed-on: https://git.joeac.net/joeac/schist/pulls/2
Co-authored-by: Joe Carstairs <me@joeac.net>
Co-committed-by: Joe Carstairs <me@joeac.net>
Diffstat (limited to 'schist_core/schist_queries/tests/drips.rs')
| -rw-r--r-- | schist_core/schist_queries/tests/drips.rs | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/schist_core/schist_queries/tests/drips.rs b/schist_core/schist_queries/tests/drips.rs new file mode 100644 index 0000000..dccdbf4 --- /dev/null +++ b/schist_core/schist_queries/tests/drips.rs @@ -0,0 +1,195 @@ +mod common; + +use common::test_context::TestContext; +use diesel::{Connection, SqliteConnection}; +use schist_fakes::{bucket::make_fake_bucket, drip::make_fake_drip_builder}; +use schist_models::{bucket::Bucket, date_utc::DateUtc}; +use schist_queries as queries; + +fn given_buckets(connection: &mut SqliteConnection) -> Vec<Bucket> { + let buckets = vec![make_fake_bucket(0), make_fake_bucket(1)]; + let _ = queries::buckets::insert_buckets(&buckets, connection); + buckets +} + +#[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 _buckets = given_buckets(connection); + let budget_drips = [ + make_fake_drip_builder(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + make_fake_drip_builder(1) + .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + ]; + + let num_budget_drips_inserted = + queries::drips::insert_drips(&budget_drips, connection).unwrap(); + + assert_eq!(num_budget_drips_inserted, 2); +} + +#[test] +fn given_budget_drip_when_insert_budget_drip_same_bucket_and_same_date_then_return_err() { + let context = TestContext::new(); + let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); + let _buckets = given_buckets(connection); + + let budget_drips_1 = [make_fake_drip_builder(0) + .bucket_id(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .build() + .unwrap()]; + let _ = queries::drips::insert_drips(&budget_drips_1, connection); + + let budget_drips_2 = [make_fake_drip_builder(1) + .bucket_id(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .build() + .unwrap()]; + let result = queries::drips::insert_drips(&budget_drips_2, connection); + + assert!(result.is_err()); +} + +#[test] +fn given_budget_drip_when_insert_budget_drip_different_bucket_and_same_date_then_return_num_budget_drips_inserted( +) { + let context = TestContext::new(); + let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); + let _buckets = given_buckets(connection); + + let budget_drips_1 = [make_fake_drip_builder(0) + .bucket_id(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .build() + .unwrap()]; + let _ = queries::drips::insert_drips(&budget_drips_1, connection); + + let budget_drips_2 = [make_fake_drip_builder(1) + .bucket_id(1) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .build() + .unwrap()]; + let result = queries::drips::insert_drips(&budget_drips_2, connection); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), 1); +} + +#[test] +fn given_budget_drip_when_insert_budget_drip_same_bucket_and_different_date_then_return_num_budget_drips_inserted( +) { + let context = TestContext::new(); + let connection = &mut SqliteConnection::establish(&context.db_url).unwrap(); + let _buckets = given_buckets(connection); + + let budget_drips_1 = [make_fake_drip_builder(0) + .bucket_id(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .build() + .unwrap()]; + let _ = queries::drips::insert_drips(&budget_drips_1, connection); + + let budget_drips_2 = [make_fake_drip_builder(1) + .bucket_id(0) + .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) + .build() + .unwrap()]; + let result = queries::drips::insert_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 _buckets = given_buckets(connection); + let budget_drips = [ + make_fake_drip_builder(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + make_fake_drip_builder(1) + .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + ]; + let _ = queries::drips::insert_drips(&budget_drips, connection).unwrap(); + + let budget_drips_in_db = queries::drips::get_all_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 _buckets = given_buckets(connection); + let budget_drips = [ + make_fake_drip_builder(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + make_fake_drip_builder(1) + .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + ]; + let _ = queries::drips::insert_drips(&budget_drips, connection).unwrap(); + + let num_budget_drips_deleted = queries::drips::delete_all_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 _buckets = given_buckets(connection); + let budget_drips = [ + make_fake_drip_builder(0) + .date(DateUtc::from_ymd(2020, 12, 25).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + make_fake_drip_builder(1) + .date(DateUtc::from_ymd(2020, 12, 26).unwrap()) + .bucket_id(0) + .build() + .unwrap(), + ]; + let _ = queries::drips::insert_drips(&budget_drips, connection).unwrap(); + let _ = queries::drips::delete_all_drips(connection).unwrap(); + + let budget_drips_returned = queries::drips::get_all_drips(connection).unwrap(); + + assert_eq!(budget_drips_returned.len(), 0); +} |
