use serde_json::json;
use sql_cli::data::csv_datasource::CsvApiClient;
use std::io::Write;
use tempfile::NamedTempFile;
#[test]
fn test_column_auto_sizing() {
let test_data = json!([
{
"id": 1, "platformOrderId": "ORDER-2024-001", "quantity": 1000, "status": "Completed", "counterparty": "Bank of America" },
{
"id": 2,
"platformOrderId": "ORDER-2024-002",
"quantity": 500,
"status": "Pending",
"counterparty": "JP Morgan"
},
{
"id": 999,
"platformOrderId": "ORDER-2024-003",
"quantity": 750,
"status": "Completed",
"counterparty": "Mizuho Bank"
}
]);
let mut temp_file = NamedTempFile::new().unwrap();
write!(temp_file, "{test_data}").unwrap();
let mut client = CsvApiClient::new();
client.load_json(temp_file.path(), "test").unwrap();
let result = client.query_csv("SELECT * FROM test").unwrap();
assert_eq!(result.data.len(), 3);
println!("✓ Column auto-sizing calculation completed");
println!(" Expected optimal widths:");
println!(" id: ~5 chars (short)");
println!(" platformOrderId: ~17 chars (long)");
println!(" quantity: ~10 chars (medium)");
println!(" status: ~11 chars (medium)");
println!(" counterparty: ~17 chars (long)");
for (i, row) in result.data.iter().enumerate() {
assert!(row.is_object(), "Row {i} should be an object");
if let Some(obj) = row.as_object() {
assert!(obj.contains_key("id"));
assert!(obj.contains_key("platformOrderId"));
assert!(obj.contains_key("quantity"));
assert!(obj.contains_key("status"));
assert!(obj.contains_key("counterparty"));
}
}
}