mod common;
use assert_cmd::Command;
use gitgrip::core::griptree::GriptreeConfig;
use predicates::prelude::*;
use tempfile::TempDir;
use common::fixtures::WorkspaceBuilder;
use common::git_helpers;
#[test]
fn test_help() {
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("Multi-repo workflow tool"));
}
#[test]
fn test_version() {
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.arg("--version")
.assert()
.success()
.stdout(predicate::str::contains(env!("CARGO_PKG_VERSION")));
}
#[test]
fn test_status_outside_workspace() {
let temp = TempDir::new().unwrap();
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.current_dir(temp.path())
.arg("status")
.assert()
.failure()
.stderr(predicate::str::contains("Not in a gitgrip workspace"));
}
#[test]
fn test_bench_list() {
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.arg("bench")
.arg("--list")
.assert()
.success()
.stdout(predicate::str::contains("Available Benchmarks"));
}
#[test]
fn test_bench_run() {
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.arg("bench")
.arg("-n")
.arg("1")
.assert()
.success()
.stdout(predicate::str::contains("Benchmark Results"));
}
#[test]
fn test_bench_json() {
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.arg("bench")
.arg("-n")
.arg("1")
.arg("--json")
.assert()
.success()
.stdout(predicate::str::starts_with("["));
}
#[test]
fn test_checkout_base_uses_griptree_config() {
let ws = WorkspaceBuilder::new()
.add_repo("app")
.add_repo("lib")
.build();
git_helpers::create_branch(&ws.repo_path("app"), "feat/base");
git_helpers::checkout(&ws.repo_path("app"), "main");
git_helpers::create_branch(&ws.repo_path("lib"), "feat/base");
git_helpers::checkout(&ws.repo_path("lib"), "main");
let mut config = GriptreeConfig::new("feat/base", &ws.workspace_root.to_string_lossy());
let config_path = ws.workspace_root.join(".gitgrip").join("griptree.json");
config.save(&config_path).unwrap();
let mut cmd = Command::cargo_bin("gr").unwrap();
cmd.current_dir(&ws.workspace_root)
.arg("checkout")
.arg("--base")
.assert()
.success();
assert_eq!(
git_helpers::current_branch(&ws.repo_path("app")),
"feat/base"
);
assert_eq!(
git_helpers::current_branch(&ws.repo_path("lib")),
"feat/base"
);
}