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 { 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); }