From 1ae19eb3315c40e3f9062592c27fa76c11cf626c Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Sun, 17 Nov 2024 09:23:28 +0000 Subject: Renames workspace folder --- rust/core/tests/models/datetime_utc.rs | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 rust/core/tests/models/datetime_utc.rs (limited to 'rust/core/tests/models/datetime_utc.rs') diff --git a/rust/core/tests/models/datetime_utc.rs b/rust/core/tests/models/datetime_utc.rs new file mode 100644 index 0000000..7029429 --- /dev/null +++ b/rust/core/tests/models/datetime_utc.rs @@ -0,0 +1,60 @@ +use anyhow::Result; +use budgeting_app_core::models::datetime_utc::DatetimeUtc; +use budgeting_app_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 { + 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(()) +} -- cgit v1.2.3