From 21c512bb029afd095f42c398587bc7b08fef5988 Mon Sep 17 00:00:00 2001 From: filipriec Date: Sun, 23 Feb 2025 19:15:41 +0100 Subject: [PATCH] test finally working, needs to apply migration to the database --- server/.env_test | 1 + server/src/adresar/mod.rs | 5 + server/src/adresar/tests/fixtures/migrations | 1 + server/src/adresar/tests/mod.rs | 3 + server/src/adresar/tests/post_adresar_test.rs | 147 ++++++++++++++++++ 5 files changed, 157 insertions(+) create mode 100644 server/.env_test create mode 120000 server/src/adresar/tests/fixtures/migrations create mode 100644 server/src/adresar/tests/mod.rs create mode 100644 server/src/adresar/tests/post_adresar_test.rs diff --git a/server/.env_test b/server/.env_test new file mode 100644 index 0000000..2ae55ed --- /dev/null +++ b/server/.env_test @@ -0,0 +1 @@ +TEST_DATABASE_URL="postgres://multi_psql_dev:3@localhost:5432/multi_rust_test" diff --git a/server/src/adresar/mod.rs b/server/src/adresar/mod.rs index 53b2264..257983c 100644 --- a/server/src/adresar/mod.rs +++ b/server/src/adresar/mod.rs @@ -2,3 +2,8 @@ pub mod models; pub mod handlers; + +#[cfg(test)] +pub mod tests { + pub mod post_adresar_test; +} diff --git a/server/src/adresar/tests/fixtures/migrations b/server/src/adresar/tests/fixtures/migrations new file mode 120000 index 0000000..0697bb8 --- /dev/null +++ b/server/src/adresar/tests/fixtures/migrations @@ -0,0 +1 @@ +../../../../migrations \ No newline at end of file diff --git a/server/src/adresar/tests/mod.rs b/server/src/adresar/tests/mod.rs new file mode 100644 index 0000000..f8829c3 --- /dev/null +++ b/server/src/adresar/tests/mod.rs @@ -0,0 +1,3 @@ +// src/adresar/tests/mod.rs + +pub mod post_adresar_test; diff --git a/server/src/adresar/tests/post_adresar_test.rs b/server/src/adresar/tests/post_adresar_test.rs new file mode 100644 index 0000000..6f56bdd --- /dev/null +++ b/server/src/adresar/tests/post_adresar_test.rs @@ -0,0 +1,147 @@ +// 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 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"); + + let pool = PgPoolOptions::new() + .max_connections(5) + .connect(&database_url) + .await + .expect("Failed to connect to test database"); + + sqlx::migrate!() + .run(&pool) + .await + .expect("Migrations failed"); + + pool +} + +#[tokio::test] +async fn test_create_adresar_success() { + let pool = setup_test_db().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(), + }; + + // Execute handler + let response = post_adresar(&pool, request).await.unwrap(); + + // Verify response + assert!(response.id > 0); + assert_eq!(response.firma, "Test Company"); + assert_eq!(response.kz, "KZ123"); + assert_eq!(response.drc, "DRC456"); + assert_eq!(response.ulica, "Test Street"); + assert_eq!(response.psc, "12345"); + assert_eq!(response.mesto, "Test City"); + assert_eq!(response.stat, "Test Country"); + assert_eq!(response.banka, "Test Bank"); + assert_eq!(response.ucet, "123456789"); + assert_eq!(response.skladm, "Warehouse M"); + assert_eq!(response.ico, "12345678"); + assert_eq!(response.kontakt, "John Doe"); + assert_eq!(response.telefon, "+421123456789"); + assert_eq!(response.skladu, "Warehouse U"); + assert_eq!(response.fax, "+421123456700"); + + // Verify database state + let record: (bool,) = sqlx::query_as( + "SELECT deleted FROM adresar WHERE id = $1" + ) + .bind(response.id) + .fetch_one(&pool) + .await + .unwrap(); + + assert!(!record.0); // Verify deleted is false +} + +#[tokio::test] +async fn test_create_adresar_required_fields() { + let pool = setup_test_db().await; + + // Test with only required field (firma) + let request = PostAdresarRequest { + firma: "Required Only".into(), + ..Default::default() + }; + + let response = post_adresar(&pool, request).await.unwrap(); + + assert!(response.id > 0); + assert_eq!(response.firma, "Required Only"); + + // Verify optional fields are empty + assert_eq!(response.kz, ""); + assert_eq!(response.drc, ""); + assert_eq!(response.ulica, ""); + assert_eq!(response.psc, ""); + assert_eq!(response.mesto, ""); + assert_eq!(response.stat, ""); + assert_eq!(response.banka, ""); + assert_eq!(response.ucet, ""); + assert_eq!(response.skladm, ""); + assert_eq!(response.ico, ""); + assert_eq!(response.kontakt, ""); + assert_eq!(response.telefon, ""); + assert_eq!(response.skladu, ""); + assert_eq!(response.fax, ""); +} + +#[tokio::test] +async fn test_create_adresar_empty_firma() { + let pool = setup_test_db().await; + + let request = PostAdresarRequest { + firma: "".into(), // Empty required field + ..Default::default() + }; + + let result = post_adresar(&pool, request).await; + + assert!(result.is_err()); + assert_eq!(result.unwrap_err().code(), tonic::Code::Internal); +} + +#[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 request = PostAdresarRequest { + firma: "Test".into(), + ..Default::default() + }; + + let result = post_adresar(&broken_pool, request).await; + + assert!(result.is_err()); + assert_eq!(result.unwrap_err().code(), tonic::Code::Internal); +}