From 99fa72e2b9d572e00cd232bd55a3fa24722c3134 Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Sun, 17 Nov 2024 12:16:19 +0000 Subject: Refactors workspace --- rust/schist_queries/tests/common/mod.rs | 1 + rust/schist_queries/tests/common/test_context.rs | 44 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 rust/schist_queries/tests/common/mod.rs create mode 100644 rust/schist_queries/tests/common/test_context.rs (limited to 'rust/schist_queries/tests/common') diff --git a/rust/schist_queries/tests/common/mod.rs b/rust/schist_queries/tests/common/mod.rs new file mode 100644 index 0000000..5ff67da --- /dev/null +++ b/rust/schist_queries/tests/common/mod.rs @@ -0,0 +1 @@ +pub mod test_context; diff --git a/rust/schist_queries/tests/common/test_context.rs b/rust/schist_queries/tests/common/test_context.rs new file mode 100644 index 0000000..183cd9b --- /dev/null +++ b/rust/schist_queries/tests/common/test_context.rs @@ -0,0 +1,44 @@ +use std::sync::atomic::{AtomicU64, Ordering}; + +use diesel::{Connection, SqliteConnection}; +use diesel_migrations::MigrationHarness; +use schist_models::migrations::MIGRATIONS; +use schist_queries::clear::clear; + +pub struct TestContext { + pub db_url: String, +} + +static ID_COUNTER: AtomicU64 = AtomicU64::new(0); + +impl TestContext { + pub fn new() -> Self { + let db_url = Self::next_id() + ".sqlite"; + + let connection = &mut SqliteConnection + ::establish(&db_url) + .expect("failed to connect to database"); + + connection + .run_pending_migrations(MIGRATIONS) + .expect("failed to run migrations"); + + clear(connection) + .expect("failed to clear database"); + + Self { + db_url, + } + } + + fn next_id() -> String { + ID_COUNTER.fetch_add(1, Ordering::Relaxed).to_string() + } +} + +impl Drop for TestContext { + fn drop(&mut self) { + std::fs::remove_file(&self.db_url) + .expect(format!("failed to delete database {}", self.db_url).as_str()); + } +} -- cgit v1.2.3