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