working delete also, only fixing the deprecation now

This commit is contained in:
filipriec
2025-02-25 12:17:23 +01:00
parent 2abf0ab772
commit 03f02126b9

View File

@@ -5,6 +5,13 @@ use common::proto::multieko2::adresar::DeleteAdresarRequest;
use crate::common::setup_test_db; use crate::common::setup_test_db;
use sqlx::PgPool; use sqlx::PgPool;
use tonic; use tonic;
use std::sync::Arc;
use tokio::sync::Mutex;
// Reuse the mutex from get_adresar_by_position_test or create a new one
lazy_static::lazy_static! {
static ref TEST_MUTEX: Arc<Mutex<()>> = Arc::new(Mutex::new(()));
}
// Fixtures // Fixtures
#[fixture] #[fixture]
@@ -20,37 +27,45 @@ async fn closed_pool(#[future] pool: PgPool) -> PgPool {
} }
#[fixture] #[fixture]
async fn existing_record(#[future] pool: PgPool) -> (PgPool, i64) { async fn existing_record(#[future] pool: PgPool) -> (PgPool, i64, String) {
let pool = pool.await; let pool = pool.await;
// Use a unique prefix for test data
let prefix = format!("DeleteTest_{}", chrono::Utc::now().timestamp_nanos());
let record = sqlx::query!( let record = sqlx::query!(
r#" r#"
INSERT INTO adresar (firma, deleted) INSERT INTO adresar (firma, deleted)
VALUES ('Test Company', false) VALUES ($1, false)
RETURNING id RETURNING id
"# "#,
format!("{}_Company", prefix)
) )
.fetch_one(&pool) .fetch_one(&pool)
.await .await
.unwrap(); .unwrap();
(pool, record.id) (pool, record.id, prefix)
} }
#[fixture] #[fixture]
async fn existing_deleted_record(#[future] pool: PgPool) -> (PgPool, i64) { async fn existing_deleted_record(#[future] pool: PgPool) -> (PgPool, i64, String) {
let pool = pool.await; let pool = pool.await;
// Use a unique prefix for test data
let prefix = format!("DeletedTest_{}", chrono::Utc::now().timestamp_nanos());
let record = sqlx::query!( let record = sqlx::query!(
r#" r#"
INSERT INTO adresar (firma, deleted) INSERT INTO adresar (firma, deleted)
VALUES ('Deleted Company', true) VALUES ($1, true)
RETURNING id RETURNING id
"# "#,
format!("{}_Deleted", prefix)
) )
.fetch_one(&pool) .fetch_one(&pool)
.await .await
.unwrap(); .unwrap();
(pool, record.id) (pool, record.id, prefix)
} }
// Helper to check if the record is deleted // Helper to check if the record is deleted
@@ -63,18 +78,37 @@ async fn assert_record_deleted(pool: &PgPool, id: i64) {
assert!(db_record.deleted); assert!(db_record.deleted);
} }
// Helper to clean up test records
async fn cleanup_test_records(pool: &PgPool, prefix: &str) {
if !prefix.is_empty() {
sqlx::query!(
"DELETE FROM adresar WHERE firma LIKE $1",
format!("{}%", prefix)
)
.execute(pool)
.await
.unwrap();
}
}
// Tests // Tests
#[rstest] #[rstest]
#[tokio::test] #[tokio::test]
async fn test_delete_adresar_success( async fn test_delete_adresar_success(
#[future] existing_record: (PgPool, i64), #[future] existing_record: (PgPool, i64, String),
) { ) {
let (pool, id) = existing_record.await; // Take a lock to prevent concurrent test execution
let _guard = TEST_MUTEX.lock().await;
let (pool, id, prefix) = existing_record.await;
let request = DeleteAdresarRequest { id }; let request = DeleteAdresarRequest { id };
let response = delete_adresar(&pool, request).await.unwrap(); let response = delete_adresar(&pool, request).await.unwrap();
assert!(response.success); assert!(response.success);
assert_record_deleted(&pool, id).await; assert_record_deleted(&pool, id).await;
// Clean up
cleanup_test_records(&pool, &prefix).await;
} }
#[rstest] #[rstest]
@@ -82,6 +116,9 @@ async fn test_delete_adresar_success(
async fn test_delete_adresar_nonexistent_id( async fn test_delete_adresar_nonexistent_id(
#[future] pool: PgPool, #[future] pool: PgPool,
) { ) {
// Take a lock to prevent concurrent test execution
let _guard = TEST_MUTEX.lock().await;
let pool = pool.await; let pool = pool.await;
let request = DeleteAdresarRequest { id: 9999 }; let request = DeleteAdresarRequest { id: 9999 };
let response = delete_adresar(&pool, request).await.unwrap(); let response = delete_adresar(&pool, request).await.unwrap();
@@ -93,14 +130,20 @@ async fn test_delete_adresar_nonexistent_id(
#[rstest] #[rstest]
#[tokio::test] #[tokio::test]
async fn test_delete_adresar_already_deleted( async fn test_delete_adresar_already_deleted(
#[future] existing_deleted_record: (PgPool, i64), #[future] existing_deleted_record: (PgPool, i64, String),
) { ) {
let (pool, id) = existing_deleted_record.await; // Take a lock to prevent concurrent test execution
let _guard = TEST_MUTEX.lock().await;
let (pool, id, prefix) = existing_deleted_record.await;
let request = DeleteAdresarRequest { id }; let request = DeleteAdresarRequest { id };
let response = delete_adresar(&pool, request).await.unwrap(); let response = delete_adresar(&pool, request).await.unwrap();
// Deleting an already deleted record should return success: false // Deleting an already deleted record should return success: false
assert!(!response.success); assert!(!response.success);
// Clean up
cleanup_test_records(&pool, &prefix).await;
} }
#[rstest] #[rstest]
@@ -108,6 +151,7 @@ async fn test_delete_adresar_already_deleted(
async fn test_delete_adresar_database_error( async fn test_delete_adresar_database_error(
#[future] closed_pool: PgPool, #[future] closed_pool: PgPool,
) { ) {
// No need for mutex here as we're not modifying the database
let closed_pool = closed_pool.await; let closed_pool = closed_pool.await;
let request = DeleteAdresarRequest { id: 1 }; let request = DeleteAdresarRequest { id: 1 };
let result = delete_adresar(&closed_pool, request).await; let result = delete_adresar(&closed_pool, request).await;