From 8881e4d7eb0f082cd71ab41b4496e6f999cfb3ef Mon Sep 17 00:00:00 2001 From: Mika Date: Fri, 20 Jun 2025 16:35:52 +0200 Subject: [PATCH] it WORKS --- crates/backend/tests/common/test_helpers.rs | 20 +++++++++++++------- crates/backend/tests/endpoints/user.rs | 14 ++++++++------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/crates/backend/tests/common/test_helpers.rs b/crates/backend/tests/common/test_helpers.rs index 57149ef..2873e96 100644 --- a/crates/backend/tests/common/test_helpers.rs +++ b/crates/backend/tests/common/test_helpers.rs @@ -9,26 +9,32 @@ use super::setup; struct TestState { _postgres: ContainerAsync, _redis: ContainerAsync, - database: Database, } lazy_static! { static ref TEST_STATE: tokio::sync::OnceCell = tokio::sync::OnceCell::new(); } -pub async fn get_database() -> &'static Database { - let state = TEST_STATE +pub async fn get_database() -> Database { + let _state = TEST_STATE .get_or_init(|| async { - let (postgres, redis, database) = setup().await; + let (postgres, redis, _database) = setup().await; TestState { _postgres: postgres, _redis: redis, - database, } }) .await; - &state.database + // Create a new database connection for each test + let database_url = backend::build_database_url(); + let mut opts = sea_orm::ConnectOptions::new(database_url); + opts.max_connections(5) + .min_connections(1) + .connect_timeout(std::time::Duration::from_secs(10)) + .acquire_timeout(std::time::Duration::from_secs(10)); + + Database::new(opts).await.unwrap() } static TEST_COUNTER: AtomicU64 = AtomicU64::new(1); @@ -71,7 +77,7 @@ macro_rules! create_test_app { actix_web::test::init_service( actix_web::App::new() - .app_data(actix_web::web::Data::new(db.clone())) + .app_data(actix_web::web::Data::new(db)) .service( actix_web::web::scope("/api/v1") .configure(backend::controller::register_controllers), diff --git a/crates/backend/tests/endpoints/user.rs b/crates/backend/tests/endpoints/user.rs index d55a03d..7b73272 100644 --- a/crates/backend/tests/endpoints/user.rs +++ b/crates/backend/tests/endpoints/user.rs @@ -17,7 +17,7 @@ mod tests { #[actix_web::test] async fn test_create_user() { let ctx: TestContext = TestContext::new(); - let db = crate::common::test_helpers::get_database().await; + let db = &crate::common::test_helpers::get_database().await; let app = create_test_app!(); @@ -61,7 +61,7 @@ mod tests { #[actix_web::test] async fn test_delete_user() { let ctx = TestContext::new(); - let db = crate::common::test_helpers::get_database().await; + let db = &crate::common::test_helpers::get_database().await; let app = create_test_app!(); @@ -97,7 +97,7 @@ mod tests { #[actix_web::test] async fn test_get_users() { let ctx = TestContext::new(); - let db = crate::common::test_helpers::get_database().await; + let db = &crate::common::test_helpers::get_database().await; let app = create_test_app!(); @@ -127,8 +127,10 @@ mod tests { assert!(found, "User {} not found in API response", user.username); } - // Verify database consistency - assert!(ctx.assert_user_count(db, 3).await); + // Verify our created users exist in database + for user in &users { + assert!(ctx.assert_user_exists(db, user.id).await); + } // Cleanup ctx.cleanup_all(db).await; @@ -137,7 +139,7 @@ mod tests { #[actix_web::test] async fn test_delete_nonexistent_user() { let ctx = TestContext::new(); - let db = crate::common::test_helpers::get_database().await; + let db = &crate::common::test_helpers::get_database().await; let app = create_test_app!(); let fake_id = "00000000-0000-0000-0000-000000000000";