it WORKS
This commit is contained in:
parent
42dae815a6
commit
7033ad7013
2 changed files with 21 additions and 13 deletions
|
@ -9,26 +9,32 @@ use super::setup;
|
||||||
struct TestState {
|
struct TestState {
|
||||||
_postgres: ContainerAsync<Postgres>,
|
_postgres: ContainerAsync<Postgres>,
|
||||||
_redis: ContainerAsync<Redis>,
|
_redis: ContainerAsync<Redis>,
|
||||||
database: Database,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref TEST_STATE: tokio::sync::OnceCell<TestState> = tokio::sync::OnceCell::new();
|
static ref TEST_STATE: tokio::sync::OnceCell<TestState> = tokio::sync::OnceCell::new();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_database() -> &'static Database {
|
pub async fn get_database() -> Database {
|
||||||
let state = TEST_STATE
|
let _state = TEST_STATE
|
||||||
.get_or_init(|| async {
|
.get_or_init(|| async {
|
||||||
let (postgres, redis, database) = setup().await;
|
let (postgres, redis, _database) = setup().await;
|
||||||
TestState {
|
TestState {
|
||||||
_postgres: postgres,
|
_postgres: postgres,
|
||||||
_redis: redis,
|
_redis: redis,
|
||||||
database,
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.await;
|
.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);
|
static TEST_COUNTER: AtomicU64 = AtomicU64::new(1);
|
||||||
|
@ -71,7 +77,7 @@ macro_rules! create_test_app {
|
||||||
|
|
||||||
actix_web::test::init_service(
|
actix_web::test::init_service(
|
||||||
actix_web::App::new()
|
actix_web::App::new()
|
||||||
.app_data(actix_web::web::Data::new(db.clone()))
|
.app_data(actix_web::web::Data::new(db))
|
||||||
.service(
|
.service(
|
||||||
actix_web::web::scope("/api/v1")
|
actix_web::web::scope("/api/v1")
|
||||||
.configure(backend::controller::register_controllers),
|
.configure(backend::controller::register_controllers),
|
||||||
|
|
|
@ -17,7 +17,7 @@ mod tests {
|
||||||
#[actix_web::test]
|
#[actix_web::test]
|
||||||
async fn test_create_user() {
|
async fn test_create_user() {
|
||||||
let ctx: TestContext = TestContext::new();
|
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!();
|
let app = create_test_app!();
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ mod tests {
|
||||||
#[actix_web::test]
|
#[actix_web::test]
|
||||||
async fn test_delete_user() {
|
async fn test_delete_user() {
|
||||||
let ctx = TestContext::new();
|
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 app = create_test_app!();
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ mod tests {
|
||||||
#[actix_web::test]
|
#[actix_web::test]
|
||||||
async fn test_get_users() {
|
async fn test_get_users() {
|
||||||
let ctx = TestContext::new();
|
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 app = create_test_app!();
|
||||||
|
|
||||||
|
@ -127,8 +127,10 @@ mod tests {
|
||||||
assert!(found, "User {} not found in API response", user.username);
|
assert!(found, "User {} not found in API response", user.username);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify database consistency
|
// Verify our created users exist in database
|
||||||
assert!(ctx.assert_user_count(db, 3).await);
|
for user in &users {
|
||||||
|
assert!(ctx.assert_user_exists(db, user.id).await);
|
||||||
|
}
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
ctx.cleanup_all(db).await;
|
ctx.cleanup_all(db).await;
|
||||||
|
@ -137,7 +139,7 @@ mod tests {
|
||||||
#[actix_web::test]
|
#[actix_web::test]
|
||||||
async fn test_delete_nonexistent_user() {
|
async fn test_delete_nonexistent_user() {
|
||||||
let ctx = TestContext::new();
|
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 app = create_test_app!();
|
||||||
let fake_id = "00000000-0000-0000-0000-000000000000";
|
let fake_id = "00000000-0000-0000-0000-000000000000";
|
||||||
|
|
Loading…
Add table
Reference in a new issue