#[macro_use]
#[path = "common/mod.rs"]
mod common;
use common::TvaCmd;
use std::fs;
use std::path::PathBuf;
fn create_test_file(name: &str, content: &str) -> PathBuf {
let mut path = std::env::temp_dir();
path.push("tva_test_join_header");
fs::create_dir_all(&path).unwrap();
path.push(name);
fs::write(&path, content).unwrap();
path
}
#[test]
fn join_multi_files_different_column_order() {
let filter_content = "ID\tVal
A\tFilterA
B\tFilterB";
let filter_path = create_test_file("filter.tsv", filter_content);
let file1_content = "ID\tData
A\tDataA
C\tDataC";
let file1_path = create_test_file("file1.tsv", file1_content);
let file2_content = "Data\tID
DataB\tB
DataD\tD";
let file2_path = create_test_file("file2.tsv", file2_content);
let (stdout, _) = TvaCmd::new()
.args(&[
"join",
"--header",
"--filter-file",
filter_path.to_str().unwrap(),
"--key-fields",
"ID",
"--append-fields",
"Val",
file1_path.to_str().unwrap(),
file2_path.to_str().unwrap(),
])
.run();
let lines: Vec<&str> = stdout.lines().collect();
assert_eq!(lines.len(), 3);
assert_eq!(lines[0], "ID\tData\tVal");
assert!(lines.contains(&"A\tDataA\tFilterA"));
assert!(lines.contains(&"DataB\tB\tFilterB"));
}