summaryrefslogtreecommitdiff
path: root/rust/schist_models/tests/datetime_utc.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-17 12:16:19 +0000
committerJoe Carstairs <me@joeac.net>2024-11-17 12:20:48 +0000
commit99fa72e2b9d572e00cd232bd55a3fa24722c3134 (patch)
tree6b50ce600fffa07a0c21b7f14d2447fe5ac3c2ed /rust/schist_models/tests/datetime_utc.rs
parent10f071447594f2bdcec84a461df9ad648f71f44b (diff)
Refactors workspace
Diffstat (limited to 'rust/schist_models/tests/datetime_utc.rs')
-rw-r--r--rust/schist_models/tests/datetime_utc.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/rust/schist_models/tests/datetime_utc.rs b/rust/schist_models/tests/datetime_utc.rs
new file mode 100644
index 0000000..27182ff
--- /dev/null
+++ b/rust/schist_models/tests/datetime_utc.rs
@@ -0,0 +1,62 @@
+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<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(())
+}