use super::test_utils::*;
#[test]
fn test_config_show_basic() {
let test = CliTest::new();
let output = test.arg("config").arg("show").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config show should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("log_level")
|| output.stdout_contains("Effective configuration")
|| output.stdout_contains("max_concurrent_specs"),
"Should display configuration values, got: {}",
output.stdout
);
}
#[test]
fn test_config_show_json() {
let test = CliTest::new();
let output = test.arg("config").arg("show").arg("--json").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config show --json should succeed: stderr={}",
output.stderr
);
let parse_result: Result<serde_json::Value, _> = serde_json::from_str(&output.stdout);
assert!(
parse_result.is_ok(),
"Should output valid JSON, got: {}",
output.stdout
);
}
#[test]
fn test_config_show_specific_path() {
let test = CliTest::new();
let output = test.arg("config").arg("show").arg("log_level").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config show log_level should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("log_level") || output.stdout_contains("info"),
"Should display log_level value, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_all() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("default")
|| output.stdout_contains("log_level")
|| output.stdout_contains("Configuration values"),
"Should display configuration traces, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_all_flag() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").arg("--all").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --all should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("log_level") || output.stdout_contains("max_concurrent_specs"),
"Should display multiple config values, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_specific_path() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").arg("log_level").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace log_level should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("log_level"),
"Should display trace for log_level, got: {}",
output.stdout
);
assert!(
output.stdout_contains("default")
|| output.stdout_contains("final value")
|| output.stdout_contains("├──")
|| output.stdout_contains("└──"),
"Should display source information, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_json() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").arg("--json").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --json should succeed: stderr={}",
output.stderr
);
let parse_result: Result<serde_json::Value, _> = serde_json::from_str(&output.stdout);
assert!(
parse_result.is_ok(),
"Should output valid JSON, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_specific_path_json() {
let test = CliTest::new();
let output = test
.arg("config")
.arg("trace")
.arg("log_level")
.arg("--json")
.run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace log_level --json should succeed: stderr={}",
output.stderr
);
let parse_result: Result<serde_json::Value, _> = serde_json::from_str(&output.stdout);
assert!(
parse_result.is_ok(),
"Should output valid JSON, got: {}",
output.stdout
);
let json = parse_result.unwrap();
assert!(
json.get("path").is_some() || json.get("final_value").is_some(),
"JSON should contain trace fields, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_overrides() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").arg("--overrides").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --overrides should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("No configuration values were overridden")
|| output.stdout_contains("Overridden configuration values")
|| output.stdout_contains("[]"), "Should handle no overrides case, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_overrides_with_env() {
let test = CliTest::new().env("PRODIGY__LOG_LEVEL", "debug");
let output = test.arg("config").arg("trace").arg("--overrides").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --overrides should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("log_level")
|| output.stdout_contains("debug")
|| output.stdout_contains("PRODIGY__LOG_LEVEL"),
"Should show overridden value, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_diagnose() {
let test = CliTest::new();
let output = test.arg("config").arg("trace").arg("--diagnose").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --diagnose should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("No configuration issues detected")
|| output.stdout_contains("Configuration issues detected")
|| output.stdout_contains("Warning")
|| output.stdout_contains("Info"),
"Should display diagnostic output, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_diagnose_empty_env() {
let test = CliTest::new().env("PRODIGY__DEFAULT_EDITOR", "");
let output = test.arg("config").arg("trace").arg("--diagnose").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --diagnose should succeed: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("empty")
|| output.stdout_contains("default_editor")
|| output.stdout_contains("No configuration issues detected"),
"Should handle empty env var detection, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_diagnose_json() {
let test = CliTest::new();
let output = test
.arg("config")
.arg("trace")
.arg("--diagnose")
.arg("--json")
.run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --diagnose --json should succeed: stderr={}",
output.stderr
);
let parse_result: Result<serde_json::Value, _> = serde_json::from_str(&output.stdout);
assert!(
parse_result.is_ok(),
"Should output valid JSON, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_invalid_path() {
let test = CliTest::new();
let output = test
.arg("config")
.arg("trace")
.arg("nonexistent.path.here")
.run();
assert!(
output.exit_code != exit_codes::SUCCESS || output.stderr_contains("No value found"),
"Should handle invalid path, got exit_code={}, stderr={}",
output.exit_code,
output.stderr
);
}
#[test]
fn test_config_show_invalid_path() {
let test = CliTest::new();
let output = test
.arg("config")
.arg("show")
.arg("nonexistent.path.here")
.run();
assert!(
output.exit_code != exit_codes::SUCCESS || output.stderr_contains("No value found"),
"Should handle invalid path, got exit_code={}, stderr={}",
output.exit_code,
output.stderr
);
}
#[test]
fn test_config_trace_with_file_config() {
let config_content = "log_level: debug\nmax_concurrent_specs: 8";
let test = CliTest::new().with_config(config_content);
let (test, _workflow_path) = test.with_workflow("test", &create_test_workflow("test"));
let output = test.arg("config").arg("trace").arg("log_level").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace should succeed with file config: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("debug") || output.stdout_contains("log_level"),
"Should display file config value, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_file_and_env_override() {
let config_content = "log_level: debug";
let test = CliTest::new()
.with_config(config_content)
.env("PRODIGY__LOG_LEVEL", "warn");
let (test, _workflow_path) = test.with_workflow("test", &create_test_workflow("test"));
let output = test.arg("config").arg("trace").arg("log_level").run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace should show override chain: stderr={}",
output.stderr
);
assert!(
output.stdout_contains("warn") || output.stdout_contains("PRODIGY__LOG_LEVEL"),
"Should show env override as final value, got: {}",
output.stdout
);
}
#[test]
fn test_config_trace_overrides_json() {
let test = CliTest::new().env("PRODIGY__LOG_LEVEL", "debug");
let output = test
.arg("config")
.arg("trace")
.arg("--overrides")
.arg("--json")
.run();
assert_eq!(
output.exit_code,
exit_codes::SUCCESS,
"config trace --overrides --json should succeed: stderr={}",
output.stderr
);
let parse_result: Result<serde_json::Value, _> = serde_json::from_str(&output.stdout);
assert!(
parse_result.is_ok(),
"Should output valid JSON, got: {}",
output.stdout
);
}