oaxaca_blinder 0.2.2

A Rust library for performing Oaxaca-Blinder decomposition on Polars DataFrames, with support for categorical variables and bootstrapped standard errors.
Documentation
#![allow(deprecated)]
use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;

#[test]
fn test_mean_decomposition() {
    let mut cmd = Command::cargo_bin("oaxaca-cli").unwrap();
    cmd.arg("--data")
        .arg("tests/data/wage.csv")
        .arg("--outcome")
        .arg("wage")
        .arg("--group")
        .arg("gender")
        .arg("--reference")
        .arg("F")
        .arg("--predictors")
        .arg("education")
        .arg("--bootstrap-reps")
        .arg("2");

    cmd.assert()
        .success()
        .stdout(predicate::str::contains(
            "Oaxaca-Blinder Decomposition Results",
        ))
        .stdout(predicate::str::contains("Two-Fold Decomposition"))
        .stdout(predicate::str::contains(
            "Detailed Decomposition (Explained)",
        ))
        .stdout(predicate::str::contains(
            "Detailed Decomposition (Unexplained)",
        ));
}

#[test]
fn test_mean_decomposition_with_categorical() {
    let mut cmd = Command::cargo_bin("oaxaca-cli").unwrap();
    cmd.arg("--data")
        .arg("tests/data/wage.csv")
        .arg("--outcome")
        .arg("wage")
        .arg("--group")
        .arg("gender")
        .arg("--reference")
        .arg("F")
        .arg("--predictors")
        .arg("education")
        .arg("--categorical")
        .arg("sector")
        .arg("--bootstrap-reps")
        .arg("2");

    cmd.assert().success().stdout(predicate::str::contains(
        "Oaxaca-Blinder Decomposition Results",
    ));
}

#[test]
fn test_quantile_decomposition() {
    let mut cmd = Command::cargo_bin("oaxaca-cli").unwrap();
    cmd.arg("--data")
        .arg("tests/data/wage.csv")
        .arg("--outcome")
        .arg("wage")
        .arg("--group")
        .arg("gender")
        .arg("--reference")
        .arg("F")
        .arg("--predictors")
        .arg("education")
        .arg("--analysis-type")
        .arg("quantile")
        .arg("--bootstrap-reps")
        .arg("2")
        .arg("--simulations")
        .arg("10");

    cmd.assert().success().stdout(predicate::str::contains(
        "Machado-Mata Quantile Decomposition Results",
    ));
}

#[test]
fn test_invalid_argument() {
    let mut cmd = Command::cargo_bin("oaxaca-cli").unwrap();
    cmd.arg("--data")
        .arg("tests/data/non_existent_file.csv")
        .arg("--outcome")
        .arg("wage")
        .arg("--group")
        .arg("gender")
        .arg("--reference")
        .arg("F")
        .arg("--predictors")
        .arg("education");

    cmd.assert()
        .failure()
        .stderr(predicate::str::contains("Error:"));
}