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