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::date_utc::DateUtc; use schist_traits::nowlike::Nowlike; diesel::table! { date_utc_test (id) { id -> Integer, date_utc -> Text, } } #[derive(Insertable, Queryable, Selectable, Clone)] #[diesel(table_name = date_utc_test)] pub struct DateUtcTest { pub id: i32, pub date_utc: DateUtc, } fn new_test_context() -> Result { let test_context = TestContext::new(); let connection = &mut SqliteConnection::establish(&test_context.db_url)?; let query = "CREATE TABLE date_utc_test(id INTEGER PRIMARY KEY, date_utc TEXT);"; sql_query(query).execute(connection)?; Ok(test_context) } fn insert_date_utc(id: i32, date_utc: &DateUtc, connection: &mut SqliteConnection) -> Result { let model = DateUtcTest { id, date_utc: date_utc.clone(), }; let num_rows_inserted = diesel::insert_into(date_utc_test::dsl::date_utc_test) .values(&[model]) .execute(connection)?; Ok(num_rows_inserted) } fn get_date_utc(id: i32, connection: &mut SqliteConnection) -> Result { let date_utc: Vec = date_utc_test::dsl::date_utc_test .select(DateUtcTest::as_select()) .filter(date_utc_test::id.eq(id)) .load(connection)?; Ok(date_utc[0].clone()) } #[test] fn when_insert_date_utc_and_select_then_returns_original_value() -> Result<()> { let date_utc = DateUtc::now(); let test_context = new_test_context()?; let connection = &mut SqliteConnection::establish(&test_context.db_url)?; let num_rows_inserted = insert_date_utc(0, &date_utc, connection)?; assert_eq!(num_rows_inserted, 1); let date_utc_returned = get_date_utc(0, connection)?; assert_eq!(date_utc_returned.date_utc, date_utc); Ok(()) }