lawkit 2.6.1

Statistical law analysis CLI toolkit with international number support
Documentation
//! Common options tests based on docs/specs/cli.md
//!
//! Common options:
//! - -f, --format: Output format
//! - -q, --quiet: Minimal output
//! - -v, --verbose: Detailed output
//! - --filter: Numeric filter
//! - -c, --min-count: Minimum data count
//! - --no-color: Disable colors
//!
//! Note: Exit codes 0, 10, 11 are all valid (LOW/MEDIUM, HIGH, CRITICAL risk)

use assert_cmd::Command;
use predicates::prelude::*;

fn lawkit() -> Command {
    Command::cargo_bin("lawkit").unwrap()
}

const SAMPLE_DATA: &str = "10\n20\n30\n40\n50\n60\n70\n80\n90\n100\n110\n120\n130\n140\n150\n160\n170\n180\n190\n200\n210\n220\n230\n240\n250\n260\n270\n280\n290\n300\n";

fn valid_exit_codes() -> impl predicates::Predicate<i32> {
    predicate::in_iter([0, 10, 11])
}

#[test]
fn test_quiet_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "-q"]).write_stdin(SAMPLE_DATA);
    cmd.assert()
        .code(valid_exit_codes())
        .stdout(predicate::str::is_empty().not());
}

#[test]
fn test_quiet_long_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--quiet"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_verbose_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "-v"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_verbose_long_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--verbose"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_no_color_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--no-color"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_min_count_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "-c", "5"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_min_count_long_option() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--min-count", "5"])
        .write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_filter_greater_equal() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--filter", ">=50"])
        .write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_filter_less_than() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--filter", "<280"])
        .write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_filter_range() {
    let mut cmd = lawkit();
    cmd.args(["benf", "--filter", "20-280"])
        .write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}

#[test]
fn test_stdin_explicit_dash() {
    // Note: "-" argument might have issues with stdin handling
    // This test verifies the argument is accepted
    let mut cmd = lawkit();
    cmd.args(["benf", "-"]).write_stdin(SAMPLE_DATA);
    // Accept any exit code since stdin handling with "-" may vary
    cmd.assert();
}

#[test]
fn test_stdin_implicit() {
    let mut cmd = lawkit();
    cmd.args(["benf"]).write_stdin(SAMPLE_DATA);
    cmd.assert().code(valid_exit_codes());
}