diff --git a/server/tests/tables_data/handlers/delete_table_data_test.rs b/server/tests/tables_data/handlers/delete_table_data_test.rs index fd06f54..674162b 100644 --- a/server/tests/tables_data/handlers/delete_table_data_test.rs +++ b/server/tests/tables_data/handlers/delete_table_data_test.rs @@ -1,4 +1,4 @@ -// tests/tables_data/delete_table_data_test.rs +// tests/tables_data/handlers/delete_table_data_test.rs use rstest::{fixture, rstest}; use server::tables_data::handlers::delete_table_data; use common::proto::multieko2::tables_data::DeleteTableDataRequest; @@ -8,6 +8,7 @@ use tonic; use std::sync::Arc; use tokio::sync::Mutex; use chrono::Utc; +use serde_json::json; lazy_static::lazy_static! { static ref TEST_MUTEX: Arc> = Arc::new(Mutex::new(())); @@ -46,10 +47,29 @@ async fn existing_table( let (pool, profile_name, profile_id) = existing_profile.await; let table_name = format!("test_table_{}", Utc::now().timestamp_nanos_opt().unwrap_or_default()); + // Define columns for the table + let columns = json!([ + { + "name": "id", + "type": "SERIAL", + "primary_key": true + }, + { + "name": "deleted", + "type": "BOOLEAN", + "default": false + } + ]); + + // Add indexes definition - this is what's missing + let indexes = json!([]); // Empty array if no indexes, but not null + sqlx::query!( - "INSERT INTO table_definitions (profile_id, table_name) VALUES ($1, $2)", + "INSERT INTO table_definitions (profile_id, table_name, columns, indexes) VALUES ($1, $2, $3, $4)", profile_id, - table_name + table_name, + columns, + indexes ) .execute(&pool) .await @@ -82,12 +102,12 @@ async fn existing_record( "INSERT INTO \"{}\" (deleted) VALUES (false) RETURNING id", table_name ); - + let row = sqlx::query(&query) .fetch_one(&pool) .await .unwrap(); - + let id: i64 = row.get("id"); (pool, profile_name, table_name, id) } @@ -101,16 +121,34 @@ async fn existing_deleted_record( "INSERT INTO \"{}\" (deleted) VALUES (true) RETURNING id", table_name ); - + let row = sqlx::query(&query) .fetch_one(&pool) .await .unwrap(); - + let id: i64 = row.get("id"); (pool, profile_name, table_name, id) } +async fn cleanup_test_data(pool: &PgPool, table_name: &str) { + // Clean up table definition + sqlx::query!( + "DELETE FROM table_definitions WHERE table_name = $1", + table_name + ) + .execute(pool) + .await + .unwrap(); + + // Clean up physical table + let drop_table = format!(r#"DROP TABLE IF EXISTS "{}" CASCADE"#, table_name); + sqlx::query(&drop_table) + .execute(pool) + .await + .unwrap(); +} + #[rstest] #[tokio::test] async fn test_delete_table_data_success( @@ -135,8 +173,10 @@ async fn test_delete_table_data_success( .fetch_one(&pool) .await .unwrap(); - + assert!(row.get::("deleted")); + + cleanup_test_data(&pool, &table_name).await; } #[rstest] @@ -182,11 +222,13 @@ async fn test_delete_table_data_record_not_found( let (pool, profile_name, _, table_name) = existing_table.await; let request = DeleteTableDataRequest { profile_name, - table_name, + table_name: table_name.clone(), // Clone here record_id: 9999, }; let response = delete_table_data(&pool, request).await.unwrap(); assert!(!response.success); + + cleanup_test_data(&pool, &table_name).await; } #[rstest] @@ -198,11 +240,13 @@ async fn test_delete_table_data_already_deleted( let (pool, profile_name, table_name, record_id) = existing_deleted_record.await; let request = DeleteTableDataRequest { profile_name, - table_name, + table_name: table_name.clone(), // Clone here record_id, }; let response = delete_table_data(&pool, request).await.unwrap(); assert!(!response.success); + + cleanup_test_data(&pool, &table_name).await; } #[rstest]