use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;
#[test]
fn test_cli_version() {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--version");
cmd.assert()
.success()
.stdout(predicate::str::contains("weather_man"));
}
#[test]
fn test_cli_help() {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--help");
cmd.assert()
.success()
.stdout(predicate::str::contains("Usage:"))
.stdout(predicate::str::contains("Options:"))
.stdout(predicate::str::contains("--mode"))
.stdout(predicate::str::contains("--location"));
}
#[test]
fn test_cli_invalid_mode() {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--mode").arg("invalid_mode");
cmd.assert()
.failure()
.stderr(predicate::str::contains("Invalid mode"));
}
#[test]
fn test_cli_units_option() {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--units")
.arg("metric")
.arg("--no-animations")
.arg("--location")
.arg("London");
cmd.assert().code(predicate::in_iter(vec![0, 1]));
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--units")
.arg("imperial")
.arg("--no-animations")
.arg("--location")
.arg("London");
cmd.assert().code(predicate::in_iter(vec![0, 1]));
}
#[test]
fn test_cli_detail_option() {
let detail_levels = ["basic", "standard", "detailed", "debug"];
for level in detail_levels {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--detail")
.arg(level)
.arg("--no-animations")
.arg("--location")
.arg("London");
cmd.assert().code(predicate::in_iter(vec![0, 1]));
}
}
#[test]
fn test_cli_json_output() {
let mut cmd = Command::cargo_bin("weather_man").unwrap();
cmd.arg("--json").arg("--location").arg("London");
cmd.assert().code(predicate::in_iter(vec![0, 1]));
}