diff options
| author | Joe Carstairs <me@joeac.net> | 2024-11-17 09:29:32 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-11-17 09:30:04 +0000 |
| commit | 10f071447594f2bdcec84a461df9ad648f71f44b (patch) | |
| tree | 645924a4948f39a4d9e2ec270d79fc6c2a3a937a /rust/schist_core/tests/models/datetime_utc.rs | |
| parent | 1ae19eb3315c40e3f9062592c27fa76c11cf626c (diff) | |
Renames app to 'schist'
Diffstat (limited to 'rust/schist_core/tests/models/datetime_utc.rs')
| -rw-r--r-- | rust/schist_core/tests/models/datetime_utc.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/rust/schist_core/tests/models/datetime_utc.rs b/rust/schist_core/tests/models/datetime_utc.rs new file mode 100644 index 0000000..5bb51c0 --- /dev/null +++ b/rust/schist_core/tests/models/datetime_utc.rs @@ -0,0 +1,60 @@ +use anyhow::Result; +use schist_core::models::datetime_utc::DatetimeUtc; +use schist_core::traits::nowlike::Nowlike; +use diesel::{sql_query, Connection, ExpressionMethods, QueryDsl, RunQueryDsl, Selectable, SelectableHelper, SqliteConnection}; +use diesel::prelude::{Insertable, Queryable}; + +use crate::common::test_context::TestContext; + +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<TestContext> { + 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<usize> { + 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<DatetimeUtcTest> { + let datetime_utc: Vec<DatetimeUtcTest> = 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(()) +} |
