use std::sync::atomic::{AtomicU64, Ordering}; use diesel::{Connection, SqliteConnection}; use diesel_migrations::MigrationHarness; use schist_queries::clear::clear; use schist_models::migrations::MIGRATIONS; 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()); } }