Files
lovasoa 12daf3eb8f Refactor test files for improved clarity and consistency
- Updated SQL queries in CSV data tests to use uppercase column names.
- Simplified database table management in core tests by separating drop and create statements.
- Enhanced transaction tests to utilize an enum for database type handling.
2025-09-30 15:07:01 +02:00

101 lines
3.7 KiB
Rust

use actix_web::{http::StatusCode, test};
use sqlpage::webserver::{database::SupportedDatabase, http::main_handler};
use crate::common::{get_request_to_with_data, make_app_data};
#[actix_web::test]
async fn test_transaction_error() -> actix_web::Result<()> {
let data = make_app_data().await;
let path = match data.db.info.database_type {
SupportedDatabase::MySql => "/tests/transactions/failed_transaction_mysql.sql",
SupportedDatabase::Mssql => "/tests/transactions/failed_transaction_mssql.sql",
SupportedDatabase::Snowflake => {
return Ok(()); //snowflake doesn't support transactions
}
_ => "/tests/transactions/failed_transaction.sql",
};
let req = get_request_to_with_data(path, data.clone())
.await?
.to_srv_request();
let resp = main_handler(req).await?;
let body = test::read_body(resp).await;
let body_str = String::from_utf8(body.to_vec())
.unwrap()
.to_ascii_lowercase();
assert!(
body_str.contains("error") && body_str.contains("null"),
"{body_str}\nexpected to contain: constraint failed"
);
// Now query again, with ?x=1447
let path_with_param = path.to_string() + "?x=1447";
let req = get_request_to_with_data(&path_with_param, data.clone())
.await?
.to_srv_request();
let resp = main_handler(req).await?;
let body = test::read_body(resp).await;
let body_str = String::from_utf8(body.to_vec()).unwrap();
assert!(
body_str.contains("1447"),
"{body_str}\nexpected to contain: 1447"
);
Ok(())
}
#[actix_web::test]
async fn test_failed_copy_followed_by_query() -> actix_web::Result<()> {
let app_data = make_app_data().await;
let big_csv = "col1,col2\nval1,val2\n".repeat(1000);
let req = get_request_to_with_data(
"/tests/sql_test_files/error_failed_to_import_the_csv.sql",
app_data.clone(),
)
.await?
.insert_header(("content-type", "multipart/form-data; boundary=1234567890"))
.set_payload(format!(
"--1234567890\r\n\
Content-Disposition: form-data; name=\"recon_csv_file_input\"; filename=\"data.csv\"\r\n\
Content-Type: text/csv\r\n\
\r\n\
{big_csv}\r\n\
--1234567890--\r\n"
))
.to_srv_request();
let resp = main_handler(req).await?;
assert_eq!(resp.status(), StatusCode::OK);
let body = test::read_body(resp).await;
let body_str = String::from_utf8(body.to_vec()).unwrap();
assert!(
body_str.contains("error"),
"{body_str}\nexpected to contain error message"
);
// On postgres, the error message should contain "The postgres COPY FROM STDIN command failed"
if matches!(app_data.db.to_string().to_lowercase().as_str(), "postgres") {
assert!(
body_str.contains("The postgres COPY FROM STDIN command failed"),
"{body_str}\nexpected to contain: The postgres COPY FROM STDIN command failed"
);
}
// Now make other requests to verify the connection is still usable
for path in [
"/tests/sql_test_files/it_works_lower.sql",
"/tests/sql_test_files/it_works_simple.sql",
"/tests/sql_test_files/it_works_path.sql",
] {
let req = get_request_to_with_data(path, app_data.clone())
.await?
.to_srv_request();
let resp = main_handler(req).await?;
assert_eq!(resp.status(), StatusCode::OK);
let body = test::read_body(resp).await;
let body_str = String::from_utf8(body.to_vec()).unwrap();
assert!(
body_str.contains("It works !"),
"{body_str}\nexpected to contain: It works !"
);
}
Ok(())
}