paperdown 0.2.0

A fast CLI tool to batch convert PDFs into Markdown using GLM-OCR.
Documentation
use assert_cmd::Command;
use std::fs;

#[test]
fn batch_existing_outputs_fail_before_env_or_ocr() {
    let temp = tempfile::tempdir().expect("tempdir");
    let pdf_dir = temp.path().join("pdf");
    let out_dir = temp.path().join("md");
    fs::create_dir_all(&pdf_dir).expect("pdf dir");

    let pdf_a = pdf_dir.join("a.pdf");
    let pdf_b = pdf_dir.join("b.pdf");
    fs::write(&pdf_a, b"%PDF").expect("pdf a");
    fs::write(&pdf_b, b"%PDF").expect("pdf b");

    fs::create_dir_all(out_dir.join("a")).expect("out a");
    fs::create_dir_all(out_dir.join("b")).expect("out b");
    fs::write(out_dir.join("a/index.md"), b"old").expect("index a");
    fs::write(out_dir.join("b/index.md"), b"old").expect("index b");

    let missing_env = temp.path().join("missing.env");

    let output = Command::cargo_bin("paperdown")
        .expect("binary")
        .args([
            "--input",
            pdf_dir.to_str().expect("pdf path"),
            "--output",
            out_dir.to_str().expect("out path"),
            "--workers",
            "4",
            "--env-file",
            missing_env.to_str().expect("env path"),
        ])
        .env_remove("ZAI_API_KEY")
        .output()
        .expect("run");

    assert!(!output.status.success());

    let stdout = String::from_utf8_lossy(&output.stdout);
    let stderr = String::from_utf8_lossy(&output.stderr);

    assert!(stdout.contains("Batch Complete processed: 0 failed: 2 figures: 0"));

    assert!(stderr.contains("failed:"));
    assert!(stderr.contains("a.pdf"));
    assert!(stderr.contains("b.pdf"));
    assert!(stderr.contains("Re-run with --overwrite"));

    assert!(!stderr.contains("ZAI_API_KEY"));
    assert!(!stdout.contains("\u{1b}["));
    assert!(!stderr.contains("\u{1b}["));
}