mod common; use anyhow::Result; use common::test_context::TestContext; use diesel::{sql_query, Connection, ExpressionMethods, QueryDsl, RunQueryDsl, Selectable, SelectableHelper, SqliteConnection}; use diesel::prelude::{Insertable, Queryable}; use schist_models::budget_period_unit::BudgetPeriodUnit; diesel::table! { budget_period_unit_test (id) { id -> Integer, budget_period_unit -> Text, } } #[derive(Insertable, Queryable, Selectable, Clone)] #[diesel(table_name = budget_period_unit_test)] pub struct BudgetPeriodUnitTest { pub id: i32, pub budget_period_unit: BudgetPeriodUnit, } fn new_test_context() -> Result { let test_context = TestContext::new(); let connection = &mut SqliteConnection::establish(&test_context.db_url)?; let query = "CREATE TABLE budget_period_unit_test(id INTEGER PRIMARY KEY, budget_period_unit TEXT);"; sql_query(query).execute(connection)?; Ok(test_context) } fn insert_budget_period_unit(id: i32, budget_period_unit: &BudgetPeriodUnit, connection: &mut SqliteConnection) -> Result { let model = BudgetPeriodUnitTest { id, budget_period_unit: budget_period_unit.clone(), }; let num_rows_inserted = diesel::insert_into(budget_period_unit_test::dsl::budget_period_unit_test) .values(&[model]) .execute(connection)?; Ok(num_rows_inserted) } fn get_budget_period_unit(id: i32, connection: &mut SqliteConnection) -> Result { let budget_period_unit: Vec = budget_period_unit_test::dsl::budget_period_unit_test .select(BudgetPeriodUnitTest::as_select()) .filter(budget_period_unit_test::id.eq(id)) .load(connection)?; Ok(budget_period_unit[0].clone()) } #[test] fn when_insert_day_and_select_then_returns_day() { let test_context = new_test_context().unwrap(); let connection = &mut SqliteConnection::establish(&test_context.db_url).unwrap(); let budget_period_unit = BudgetPeriodUnit::Day; let num_rows_inserted = insert_budget_period_unit(0, &budget_period_unit, connection); assert!(num_rows_inserted.is_ok()); let num_rows_inserted = num_rows_inserted.unwrap(); assert_eq!(num_rows_inserted, 1); let budget_period_unit_returned = get_budget_period_unit(0, connection); assert!(budget_period_unit_returned.is_ok()); let budget_period_unit_returned = budget_period_unit_returned.unwrap(); assert_eq!(BudgetPeriodUnit::Day, budget_period_unit_returned.budget_period_unit); } #[test] fn when_insert_month_and_select_then_returns_month() { let test_context = new_test_context().unwrap(); let connection = &mut SqliteConnection::establish(&test_context.db_url).unwrap(); let budget_period_unit = BudgetPeriodUnit::Month; let num_rows_inserted = insert_budget_period_unit(0, &budget_period_unit, connection); assert!(num_rows_inserted.is_ok()); let num_rows_inserted = num_rows_inserted.unwrap(); assert_eq!(num_rows_inserted, 1); let budget_period_unit_returned = get_budget_period_unit(0, connection); assert!(budget_period_unit_returned.is_ok()); let budget_period_unit_returned = budget_period_unit_returned.unwrap(); assert_eq!(BudgetPeriodUnit::Month, budget_period_unit_returned.budget_period_unit); }