use std::fs;
use std::path::Path;
use std::process::Command;
#[test]
fn test_csv_converter_end_to_end() {
let input_file = "tests/input.csv";
let output_file = "tests/output.csv";
let config_file = "tests/config.csv";
let expected_output_file = "tests/expected_output.csv";
if Path::new(output_file).exists() {
fs::remove_file(output_file).expect("Failed to remove old output file");
}
let output = Command::new(env!("CARGO_BIN_EXE_csv_converter"))
.arg("-i")
.arg(input_file)
.arg("-o")
.arg(output_file)
.arg("-c")
.arg(config_file)
.output()
.expect("Failed to execute csv_converter");
assert!(
output.status.success(),
"csv_converter did not run successfully: {}",
String::from_utf8_lossy(&output.stderr)
);
assert!(Path::new(output_file).exists(), "Output file was not created");
let actual_output = fs::read_to_string(output_file).expect("Failed to read the output file");
let expected_output =
fs::read_to_string(expected_output_file).expect("Failed to read the expected output file").replace("\r\n", "\n");
assert_eq!(actual_output, expected_output, "The output does not match the expected output");
}