summaryrefslogtreecommitdiff
path: root/backend/core/tests/models
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-10-28 07:52:51 +0000
committerJoe Carstairs <me@joeac.net>2024-10-28 07:52:51 +0000
commit6e9f0069f5d1e4cfbf7f9feb8536795a78c818f6 (patch)
tree2d4751f541c6979fa73261983e3f09a925644b58 /backend/core/tests/models
parent5824c353f978a5b9ab9696451ee3014c6a614ffc (diff)
Integration tests for basic CRD queries
Diffstat (limited to 'backend/core/tests/models')
-rw-r--r--backend/core/tests/models/date_time_utc.rs59
-rw-r--r--backend/core/tests/models/mod.rs1
2 files changed, 60 insertions, 0 deletions
diff --git a/backend/core/tests/models/date_time_utc.rs b/backend/core/tests/models/date_time_utc.rs
new file mode 100644
index 0000000..1f86968
--- /dev/null
+++ b/backend/core/tests/models/date_time_utc.rs
@@ -0,0 +1,59 @@
+use anyhow::Result;
+use budgeting_app_core::models::date_time_utc::DateTimeUtc;
+use diesel::{sql_query, Connection, ExpressionMethods, QueryDsl, RunQueryDsl, Selectable, SelectableHelper, SqliteConnection};
+use diesel::prelude::{Insertable, Queryable};
+
+use crate::common::test_context::TestContext;
+
+diesel::table! {
+ date_time_utc_test (id) {
+ id -> Integer,
+ date_time_utc -> Text,
+ }
+}
+
+#[derive(Insertable, Queryable, Selectable, Clone)]
+#[diesel(table_name = date_time_utc_test)]
+pub struct DateTimeUtcTest {
+ pub id: i32,
+ pub date_time_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 date_time_utc_test(id INTEGER PRIMARY KEY, date_time_utc TEXT);";
+ sql_query(query).execute(connection)?;
+ Ok(test_context)
+}
+
+fn insert_date_time_utc(id: i32, date_time_utc: &DateTimeUtc, connection: &mut SqliteConnection) -> Result<usize> {
+ let model = DateTimeUtcTest {
+ id,
+ date_time_utc: date_time_utc.clone(),
+ };
+ let num_rows_inserted = diesel::insert_into(date_time_utc_test::dsl::date_time_utc_test)
+ .values(&[model])
+ .execute(connection)?;
+ Ok(num_rows_inserted)
+}
+
+fn get_date_time_utc(id: i32, connection: &mut SqliteConnection) -> Result<DateTimeUtcTest> {
+ let date_time_utc: Vec<DateTimeUtcTest> = date_time_utc_test::dsl::date_time_utc_test
+ .select(DateTimeUtcTest::as_select())
+ .filter(date_time_utc_test::id.eq(id))
+ .load(connection)?;
+ Ok(date_time_utc[0].clone())
+}
+
+#[test]
+fn when_insert_date_time_utc_and_select_then_returns_original_value() -> Result<()> {
+ let date_time_utc = DateTimeUtc::now();
+ let test_context = new_test_context()?;
+ let connection = &mut SqliteConnection::establish(&test_context.db_url)?;
+ let num_rows_inserted = insert_date_time_utc(0, &date_time_utc, connection)?;
+ assert_eq!(num_rows_inserted, 1);
+ let date_time_utc_returned = get_date_time_utc(0, connection)?;
+ assert_eq!(date_time_utc_returned.date_time_utc.to_date_str(), date_time_utc.to_date_str());
+ Ok(())
+}
diff --git a/backend/core/tests/models/mod.rs b/backend/core/tests/models/mod.rs
new file mode 100644
index 0000000..5837dcd
--- /dev/null
+++ b/backend/core/tests/models/mod.rs
@@ -0,0 +1 @@
+mod date_time_utc;