ocel-cli 0.1.3

Command-line tool to convert and validate OCEL 2.0 event logs
use std::path::PathBuf;
use std::process::Command;

fn bin() -> &'static str {
    env!("CARGO_BIN_EXE_ocel")
}

fn fixture(name: &str) -> PathBuf {
    let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    p.push("../ocel/tests/fixtures");
    p.push(name);
    p
}

fn tmp(name: &str) -> PathBuf {
    std::env::temp_dir().join(name)
}

#[test]
fn convert_json_to_sqlite_then_validate() {
    let out = tmp("ocel-cli-convert.sqlite");
    let status = Command::new(bin())
        .arg("convert")
        .arg(fixture("order_management_small.json"))
        .arg(&out)
        .status()
        .unwrap();
    assert!(status.success());
    assert!(out.exists());

    let status = Command::new(bin())
        .arg("validate")
        .arg(&out)
        .status()
        .unwrap();
    assert!(status.success());

    let _ = std::fs::remove_file(&out);
}

#[test]
fn convert_json_to_xml() {
    let out = tmp("ocel-cli-convert.xmlocel");
    let status = Command::new(bin())
        .arg("convert")
        .arg(fixture("order_management_small.json"))
        .arg(&out)
        .status()
        .unwrap();
    assert!(status.success());
    assert!(out.exists());
    let _ = std::fs::remove_file(&out);
}

#[test]
fn validate_missing_file_fails() {
    let status = Command::new(bin())
        .arg("validate")
        .arg(tmp("ocel-cli-does-not-exist.jsonocel"))
        .status()
        .unwrap();
    assert!(!status.success());
}

#[test]
fn unknown_extension_fails() {
    let status = Command::new(bin())
        .arg("validate")
        .arg(fixture("order_management_small.txt"))
        .status()
        .unwrap();
    assert!(!status.success());
}