diff --git a/server/src/adresar/handlers/post_adresar.rs b/server/src/adresar/handlers/post_adresar.rs index 4e1d92b..47e1191 100644 --- a/server/src/adresar/handlers/post_adresar.rs +++ b/server/src/adresar/handlers/post_adresar.rs @@ -8,6 +8,9 @@ pub async fn post_adresar( db_pool: &PgPool, request: PostAdresarRequest, ) -> Result { + if request.firma.is_empty() { + return Err(Status::invalid_argument("Firma is required")); + } let adresar = sqlx::query_as!( Adresar, r#" diff --git a/server/src/adresar/tests/fixtures/migrations b/server/src/adresar/tests/fixtures/migrations deleted file mode 120000 index 0697bb8..0000000 --- a/server/src/adresar/tests/fixtures/migrations +++ /dev/null @@ -1 +0,0 @@ -../../../../migrations \ No newline at end of file diff --git a/server/src/adresar/tests/post_adresar_test.rs b/server/src/adresar/tests/post_adresar_test.rs index 6f56bdd..050695d 100644 --- a/server/src/adresar/tests/post_adresar_test.rs +++ b/server/src/adresar/tests/post_adresar_test.rs @@ -1,53 +1,33 @@ // src/adresar/tests/post_adresar_test.rs use super::super::handlers::post_adresar; use common::proto::multieko2::adresar::PostAdresarRequest; -use sqlx::{postgres::PgPoolOptions, PgPool}; +use sqlx::{postgres::PgPoolOptions, PgPool, Transaction, Postgres}; use std::env; -async fn setup_test_db() -> PgPool { - dotenvy::dotenv().ok(); // Load .env file - let database_url = env::var("TEST_DATABASE_URL") - .expect("TEST_DATABASE_URL must be set in .env"); - +async fn setup() -> (PgPool, Transaction<'static, Postgres>) { + dotenvy::from_filename(".env_test").ok(); let pool = PgPoolOptions::new() .max_connections(5) - .connect(&database_url) + .connect(&env::var("TEST_DATABASE_URL").unwrap()) .await - .expect("Failed to connect to test database"); - - sqlx::migrate!() - .run(&pool) - .await - .expect("Migrations failed"); - - pool + .unwrap(); + + let transaction = pool.begin().await.unwrap(); + (pool, transaction) } #[tokio::test] async fn test_create_adresar_success() { - let pool = setup_test_db().await; + let (pool, mut transaction) = setup().await; - // Test data let request = PostAdresarRequest { firma: "Test Company".into(), - kz: "KZ123".into(), - drc: "DRC456".into(), - ulica: "Test Street".into(), - psc: "12345".into(), - mesto: "Test City".into(), - stat: "Test Country".into(), - banka: "Test Bank".into(), - ucet: "123456789".into(), - skladm: "Warehouse M".into(), - ico: "12345678".into(), - kontakt: "John Doe".into(), - telefon: "+421123456789".into(), - skladu: "Warehouse U".into(), - fax: "+421123456700".into(), + ..Default::default() }; - // Execute handler - let response = post_adresar(&pool, request).await.unwrap(); + let response = post_adresar(&mut transaction, request) + .await + .unwrap(); // Verify response assert!(response.id > 0); @@ -113,27 +93,25 @@ async fn test_create_adresar_required_fields() { #[tokio::test] async fn test_create_adresar_empty_firma() { - let pool = setup_test_db().await; + let (_, mut transaction) = setup().await; let request = PostAdresarRequest { - firma: "".into(), // Empty required field + firma: "".into(), ..Default::default() }; - let result = post_adresar(&pool, request).await; + let result = post_adresar(&mut transaction, request).await; assert!(result.is_err()); - assert_eq!(result.unwrap_err().code(), tonic::Code::Internal); + assert_eq!(result.unwrap_err().code(), tonic::Code::InvalidArgument); } #[tokio::test] async fn test_create_adresar_database_error() { - let pool = setup_test_db().await; - let broken_pool = PgPoolOptions::new() - .max_connections(0) // Will fail to acquire connection - .connect("postgres://invalid:invalid@localhost/invalid") - .await - .unwrap(); + let (pool, _) = setup().await; + // Simulate closed pool + let broken_pool = pool.clone(); + broken_pool.close().await; let request = PostAdresarRequest { firma: "Test".into(),