diff --git a/server/Makefile b/server/Makefile new file mode 100644 index 0000000..6662d93 --- /dev/null +++ b/server/Makefile @@ -0,0 +1,13 @@ +# Makefile + +test: reset_db run_tests + +reset_db: + @echo "Resetting test database..." + @./scripts/reset_test_db.sh + +run_tests: + @echo "Running tests..." + @cargo test + +.PHONY: test diff --git a/server/scripts/reset_test_db.sh b/server/scripts/reset_test_db.sh new file mode 100755 index 0000000..3dd557d --- /dev/null +++ b/server/scripts/reset_test_db.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# scripts/reset_test_db.sh + +DATABASE_URL=${TEST_DATABASE_URL:-"postgres://multi_psql_dev:3@localhost:5432/multi_rust_test"} + +echo "Reset db script" +yes | sqlx database drop --database-url "$DATABASE_URL" +sqlx database create --database-url "$DATABASE_URL" +echo "Test database reset complete." diff --git a/server/tests/table_definition/post_table_definition_test.rs b/server/tests/table_definition/post_table_definition_test.rs index 0dfc1c2..0eae3ff 100644 --- a/server/tests/table_definition/post_table_definition_test.rs +++ b/server/tests/table_definition/post_table_definition_test.rs @@ -142,6 +142,33 @@ async fn test_create_table_success(#[future] pool: PgPool) { .await; } +#[rstest] +#[tokio::test] +async fn test_fail_on_invalid_decimal_format(#[future] pool: PgPool) { + let pool = pool.await; + let invalid_types = vec![ + "decimal(0,0)", // precision too small + "decimal(5,10)", // scale > precision + "decimal(10)", // missing scale + "decimal(a,b)", // non-numeric + ]; + + for invalid_type in invalid_types { + let request = PostTableDefinitionRequest { + profile_name: "default".into(), + table_name: format!("table_{}", invalid_type), + columns: vec![ColumnDefinition { + name: "amount".into(), + field_type: invalid_type.into(), + }], + ..Default::default() + }; + + let result = post_table_definition(&pool, request).await; + assert_eq!(result.unwrap_err().code(), Code::InvalidArgument); + } +} + #[rstest] #[tokio::test] async fn test_create_table_with_link(