mod common;
use common::TestRepo;
#[test]
fn test_ci_no_tracked_branches() {
let repo = TestRepo::new();
let output = repo.run_stax(&["ci"]);
let stderr = TestRepo::stderr(&output);
let stdout = TestRepo::stdout(&output);
assert!(
stdout.contains("No tracked branches")
|| stderr.contains("GitHub token")
|| stderr.contains("GitHub auth")
|| stderr.contains("remote"),
"Expected 'No tracked branches', GitHub auth message, or remote error, got stdout: {}, stderr: {}",
stdout,
stderr
);
}
#[test]
fn test_ci_requires_github_token() {
let repo = TestRepo::new();
repo.run_stax(&["bc", "feature"]);
repo.create_file("feature.txt", "content");
repo.commit("Add feature");
let output = repo.run_stax(&["ci"]);
let stderr = TestRepo::stderr(&output);
let stdout = TestRepo::stdout(&output);
let has_token_error = stderr.contains("GitHub token")
|| stderr.contains("GitHub auth")
|| stderr.contains("GITHUB_TOKEN");
let has_remote_error = stderr.contains("remote");
let has_no_ci_output = stdout.contains("No CI") || stdout.contains("No tracked");
let success = output.status.success();
assert!(
has_token_error || has_remote_error || has_no_ci_output || success,
"Expected token/remote error or no CI output, got stdout: {}, stderr: {}",
stdout,
stderr
);
}
#[test]
fn test_ci_json_format_structure() {
let repo = TestRepo::new();
repo.run_stax(&["bc", "test-branch"]);
repo.create_file("test.txt", "content");
repo.commit("Test commit");
let output = repo.run_stax(&["ci", "--json"]);
let stdout = TestRepo::stdout(&output);
let stderr = TestRepo::stderr(&output);
if output.status.success() && !stdout.trim().is_empty() {
let parsed: Result<serde_json::Value, _> = serde_json::from_str(&stdout);
assert!(parsed.is_ok(), "Expected valid JSON output: {}", stdout);
let json = parsed.unwrap();
assert!(json.is_array(), "Expected JSON array output");
} else {
assert!(
stderr.contains("GitHub") || stderr.contains("token") || stderr.contains("remote"),
"Expected GitHub token or remote error, got: {}",
stderr
);
}
}
#[test]
fn test_ci_all_flag() {
let repo = TestRepo::new();
let output = repo.run_stax(&["ci", "--all"]);
let stderr = TestRepo::stderr(&output);
assert!(
!stderr.contains("unrecognized") && !stderr.contains("unknown"),
"Flag --all should be recognized: {}",
stderr
);
}
#[test]
fn test_ci_refresh_flag() {
let repo = TestRepo::new();
let output = repo.run_stax(&["ci", "--refresh"]);
let stderr = TestRepo::stderr(&output);
assert!(
!stderr.contains("unrecognized") && !stderr.contains("unknown"),
"Flag --refresh should be recognized: {}",
stderr
);
}
#[test]
fn test_ci_combined_flags() {
let repo = TestRepo::new();
let output = repo.run_stax(&["ci", "--all", "--json", "--refresh"]);
let stderr = TestRepo::stderr(&output);
assert!(
!stderr.contains("unrecognized")
&& !stderr.contains("unknown")
&& !stderr.contains("unexpected"),
"Combined flags should be accepted: {}",
stderr
);
}