needs last one to be fixed, otherwise its getting perfect

This commit is contained in:
filipriec
2025-06-21 23:57:52 +02:00
parent 87b9f6ab87
commit 92d5eb4844
5 changed files with 323 additions and 276 deletions

View File

@@ -101,32 +101,23 @@ async fn test_sql_reserved_keywords_as_identifiers_are_allowed(#[future] pool: P
#[rstest]
#[tokio::test]
async fn test_sanitization_of_unicode_and_special_chars(#[future] pool: PgPool) {
// Scenario: Use identifiers with characters that should be stripped by sanitization,
// including multi-byte unicode (emoji) and a null byte.
let pool = pool.await;
let request = PostTableDefinitionRequest {
profile_name: "default".into(),
table_name: "produits_😂".into(), // Should become "produits_"
table_name: "produits_😂".into(), // Invalid unicode
columns: vec![ColumnDefinition {
name: "col_with_unicode".into(), // FIXED: Changed from invalid "col\0with_null" to valid identifier
name: "col_with_unicode".into(),
field_type: "text".into(),
}],
..Default::default()
};
// Act
let response = post_table_definition(&pool, request).await.unwrap();
// Assert
assert!(response.success);
// Assert that the generated SQL contains the SANITIZED names
assert!(response.sql.contains("CREATE TABLE \"default\".\"produits_\"")); // FIXED: Changed from gen to "default"
assert!(response.sql.contains("\"col_with_unicode\" TEXT")); // FIXED: Changed to valid column name
// Verify the actual structure in the database
// FIXED: Added schema parameter and updated column name
assert_table_structure_is_correct(&pool, "default", "produits_", &[("col_with_unicode", "text")]).await;
// FIXED: Now expect error instead of success
let result = post_table_definition(&pool, request).await;
assert!(result.is_err());
if let Err(status) = result {
assert!(status.message().contains("Table name contains invalid characters"));
}
}
#[rstest]
@@ -163,7 +154,6 @@ async fn test_fail_gracefully_if_schema_is_missing(#[future] pool: PgPool) {
#[tokio::test]
async fn test_column_name_with_id_suffix_is_rejected(#[future] pool: PgPool) {
let pool = pool.await;
// Test 1: Column ending with '_id' should be rejected
let request = PostTableDefinitionRequest {
profile_name: "default".into(),
table_name: "orders".into(),
@@ -173,30 +163,13 @@ async fn test_column_name_with_id_suffix_is_rejected(#[future] pool: PgPool) {
}],
..Default::default()
};
let result = post_table_definition(&pool, request).await;
assert!(result.is_err(), "Column names ending with '_id' should be rejected");
if let Err(status) = result {
assert_eq!(status.code(), tonic::Code::InvalidArgument);
// Update this line to match the actual error message:
assert!(status.message().contains("Column name cannot be") && status.message().contains("end with '_id'"));
}
// Test 2: Column named exactly 'id' should be rejected
let request2 = PostTableDefinitionRequest {
profile_name: "default".into(),
table_name: "orders".into(),
columns: vec![ColumnDefinition {
name: "id".into(),
field_type: "integer".into(),
}],
..Default::default()
};
let result2 = post_table_definition(&pool, request2).await;
assert!(result2.is_err(), "Column named 'id' should be rejected");
if let Err(status) = result2 {
assert_eq!(status.code(), tonic::Code::InvalidArgument);
assert!(status.message().contains("Column name cannot be") && status.message().contains("'id'"));
// UPDATED: Match the new error message format
assert!(status.message().contains("Column name 'legacy_order_id' cannot be") &&
status.message().contains("end with '_id'"));
}
}