From 0dca3259d7ff4b9199fd6cff9037b97e8880f390 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Apr 2025 20:46:19 -0400 Subject: [PATCH] Saving changes --- src/main.rs | 125 +++++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 59 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7da81f2..5e72437 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,8 +59,6 @@ mod init { #[cfg(test)] mod tests { use super::*; - use std::{env, str::FromStr}; - use uuid::Uuid; use axum::{ body::Body, @@ -77,55 +75,75 @@ mod tests { pub data: icarus_auth::models::common::User, } - async fn connect_to_db(db_name: &str) -> Result { - let db_url = - env::var("TEST_DATABASE_URL").expect("TEST_DATABASE_URL must be set for tests"); - let options = sqlx::postgres::PgConnectOptions::from_str(&db_url)?.database(db_name); - sqlx::PgPool::connect_with(options).await - } + mod db_mgr { + use std::str::FromStr; - async fn create_database( - template_pool: &sqlx::PgPool, - db_name: &str, - ) -> Result<(), sqlx::Error> { - let create_query = format!("CREATE DATABASE {}", db_name); - match sqlx::query(&create_query).execute(template_pool).await { - Ok(_) => Ok(()), - Err(e) => Err(e), + pub const LIMIT: usize = 6; + + pub async fn eeee() -> Result { + let tm_db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be present"); + let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap(); + sqlx::PgPool::connect_with(tm_options).await } - // Ok(()) - } - // Function to drop a database - async fn drop_database(template_pool: &sqlx::PgPool, db_name: &str) -> Result<(), sqlx::Error> { - let drop_query = format!("DROP DATABASE IF EXISTS {} WITH (FORCE)", db_name); - sqlx::query(&drop_query).execute(template_pool).await?; - Ok(()) - } + pub async fn generate_db_name() -> String { + let db_name = + get_database_name().unwrap() + &"_" + &uuid::Uuid::new_v4().to_string()[..LIMIT]; + db_name + } - fn get_database_name() -> Result> { - dotenvy::dotenv().ok(); // Load .env file if it exists + pub async fn connect_to_db(db_name: &str) -> Result { + let db_url = std::env::var("TEST_DATABASE_URL") + .expect("TEST_DATABASE_URL must be set for tests"); + let options = sqlx::postgres::PgConnectOptions::from_str(&db_url)?.database(db_name); + sqlx::PgPool::connect_with(options).await + } - match std::env::var("TEST_DATABASE_URL") { - Ok(database_url) => { - let parsed_url = url::Url::parse(&database_url)?; - if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { - match parsed_url - .path_segments() - .and_then(|segments| segments.last().map(|s| s.to_string())) - { - Some(sss) => Ok(sss), - None => Err("Error parsing".into()), + pub async fn create_database( + template_pool: &sqlx::PgPool, + db_name: &str, + ) -> Result<(), sqlx::Error> { + let create_query = format!("CREATE DATABASE {}", db_name); + match sqlx::query(&create_query).execute(template_pool).await { + Ok(_) => Ok(()), + Err(e) => Err(e), + } + } + + // Function to drop a database + pub async fn drop_database( + template_pool: &sqlx::PgPool, + db_name: &str, + ) -> Result<(), sqlx::Error> { + let drop_query = format!("DROP DATABASE IF EXISTS {} WITH (FORCE)", db_name); + sqlx::query(&drop_query).execute(template_pool).await?; + Ok(()) + } + + pub fn get_database_name() -> Result> { + dotenvy::dotenv().ok(); // Load .env file if it exists + + match std::env::var("TEST_DATABASE_URL") { + Ok(database_url) => { + let parsed_url = url::Url::parse(&database_url)?; + if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { + match parsed_url + .path_segments() + .and_then(|segments| segments.last().map(|s| s.to_string())) + { + Some(sss) => Ok(sss), + None => Err("Error parsing".into()), + } + } else { + // Handle other database types if needed + Err("Error parsing".into()) } - } else { - // Handle other database types if needed + } + Err(_) => { + // TEST_DATABASE_URL environment variable not found Err("Error parsing".into()) } } - Err(_) => { - // TEST_DATABASE_URL environment variable not found - Err("Error parsing".into()) - } } } @@ -153,14 +171,11 @@ mod tests { #[tokio::test] async fn test_register_user() { - let tm_db_url = env::var("DATABASE_URL").expect("DATABASE_URL must be present"); - let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap(); - let tm_pool = sqlx::PgPool::connect_with(tm_options).await.unwrap(); + let tm_pool = db_mgr::eeee().await.unwrap(); - let db_name = get_database_name().unwrap() + &"_" + &uuid::Uuid::new_v4().to_string()[..5]; - // assert_eq!(true, db_name.is_empty(), "{:?} {:?}", db_name, tm_db_url); - // assert!(db_name.is_empty(), "eee {:?}", tm_db_url); - match create_database(&tm_pool, &db_name).await { + let db_name = db_mgr::generate_db_name().await; + + match db_mgr::create_database(&tm_pool, &db_name).await { Ok(_) => { println!("Success"); } @@ -169,16 +184,10 @@ mod tests { } } - let pool = connect_to_db(&db_name).await.unwrap(); + let pool = db_mgr::connect_to_db(&db_name).await.unwrap(); - /* - let pool = icarus_auth::db_pool::create_pool() - .await - .expect("Failed to create pool"); - */ db::migrations(&pool).await; - // let mut tx = pool.begin().await.unwrap(); let app = init::routes().await.layer(axum::Extension(pool)); let usr = icarus_auth::models::common::CreateUser { @@ -220,8 +229,6 @@ mod tests { } }; - drop_database(&tm_pool, &db_name).await; - - // tx.rollback().await.unwrap(); + let _ = db_mgr::drop_database(&tm_pool, &db_name).await; } }