use assert_cmd::Command;
use std::fs;
use tempfile::tempdir;
fn run(from: &str, to: &str, input: &str, in_ext: &str, out_ext: &str) -> Result<String, String> {
let dir = tempdir().unwrap();
let inp = dir.path().join(format!("in.{in_ext}"));
let out = dir.path().join(format!("out.{out_ext}"));
fs::write(&inp, input).unwrap();
let result = Command::cargo_bin("sheeter")
.unwrap()
.args([
"convert",
"--from",
from,
"--to",
to,
inp.to_str().unwrap(),
out.to_str().unwrap(),
])
.output()
.unwrap();
if !result.status.success() {
return Err(String::from_utf8_lossy(&result.stderr).to_string());
}
Ok(fs::read_to_string(out).unwrap())
}
#[test]
fn csv_to_json_cli() {
let dir = tempdir().unwrap();
let input = dir.path().join("input.csv");
let output = dir.path().join("output.json");
fs::write(&input, "name,age\nAlice,30").unwrap();
Command::cargo_bin("sheeter")
.unwrap()
.args([
"convert",
"--from",
"csv",
"--to",
"json",
input.to_str().unwrap(),
output.to_str().unwrap(),
])
.assert()
.success();
let json = fs::read_to_string(output).unwrap();
assert_eq!(json, r#"[{"name":"Alice","age":"30"}]"#);
}
#[test]
fn json_to_csv_cli() {
let dir = tempdir().unwrap();
let input = dir.path().join("input.json");
let output = dir.path().join("output.csv");
fs::write(&input, r#"[{"name":"Alice","age":"30"}]"#).unwrap();
Command::cargo_bin("sheeter")
.unwrap()
.args([
"convert",
"--from",
"json",
"--to",
"csv",
input.to_str().unwrap(),
output.to_str().unwrap(),
])
.assert()
.success();
let csv = fs::read_to_string(output).unwrap();
assert_eq!(csv, "name,age\nAlice,30\n");
}