clickup-cli 0.9.1

CLI for the ClickUp API, optimized for AI agents
Documentation
use clickup_cli::error::CliError;

#[test]
fn test_auth_error_exit_code() {
    let err = CliError::AuthError {
        message: "Token expired".into(),
    };
    assert_eq!(err.exit_code(), 2);
}

#[test]
fn test_not_found_exit_code() {
    let err = CliError::NotFound {
        message: "Task not found".into(),
        resource_id: "abc123".into(),
    };
    assert_eq!(err.exit_code(), 3);
}

#[test]
fn test_rate_limited_exit_code() {
    let err = CliError::RateLimited {
        message: "Rate limited".into(),
        retry_after: Some(30),
    };
    assert_eq!(err.exit_code(), 4);
}

#[test]
fn test_server_error_exit_code() {
    let err = CliError::ServerError {
        message: "Internal error".into(),
    };
    assert_eq!(err.exit_code(), 5);
}

#[test]
fn test_auth_error_hint() {
    let err = CliError::AuthError {
        message: "Unauthorized".into(),
    };
    assert!(err.hint().unwrap().contains("clickup setup"));
}

#[test]
fn test_not_found_hint_includes_id() {
    let err = CliError::NotFound {
        message: "Not found".into(),
        resource_id: "abc123".into(),
    };
    assert!(err.hint().unwrap().contains("abc123"));
}

#[test]
fn test_config_error_hint() {
    let err = CliError::ConfigError("Not configured".into());
    assert!(err.hint().unwrap().contains("clickup setup"));
}

#[test]
fn test_error_display() {
    let err = CliError::AuthError {
        message: "Token expired".into(),
    };
    assert_eq!(format!("{}", err), "Token expired");
}