mod common;
use common::fixtures::WorkspaceBuilder;
use common::git_helpers;
#[test]
fn test_verify_clean_passes_on_clean_workspace() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true, quiet: false,
clean: true,
links: false,
on_branch: None,
synced: false,
});
assert!(
result.is_ok(),
"verify --clean should pass on clean workspace"
);
}
#[test]
fn test_verify_clean_fails_with_changes() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
std::fs::write(ws.repo_path("frontend").join("dirty.txt"), "dirty").unwrap();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: true,
links: false,
on_branch: None,
synced: false,
});
assert!(result.is_ok());
}
#[test]
fn test_verify_on_branch_passes() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: false,
links: false,
on_branch: Some("main"),
synced: false,
});
assert!(result.is_ok(), "verify --on-branch main should pass");
}
#[test]
fn test_verify_on_branch_fails() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: false,
links: false,
on_branch: Some("feat/test"),
synced: false,
});
assert!(result.is_ok()); }
#[test]
fn test_verify_no_flags_returns_error() {
let ws = WorkspaceBuilder::new().add_repo("frontend").build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: false,
quiet: false,
clean: false,
links: false,
on_branch: None,
synced: false,
});
assert!(result.is_err(), "verify with no flags should error");
}
#[test]
fn test_verify_links_no_links_defined() {
let ws = WorkspaceBuilder::new().add_repo("frontend").build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: false,
links: true,
on_branch: None,
synced: false,
});
assert!(
result.is_ok(),
"verify --links should pass with no links defined"
);
}
#[test]
fn test_verify_multiple_checks_combined() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: true,
links: false,
on_branch: Some("main"),
synced: false,
});
assert!(
result.is_ok(),
"verify --clean --on-branch main should pass"
);
}
#[test]
fn test_verify_on_branch_after_branch_switch() {
let ws = WorkspaceBuilder::new()
.add_repo("frontend")
.add_repo("backend")
.build();
let manifest = ws.load_manifest();
git_helpers::create_branch(&ws.repo_path("frontend"), "feat/test");
let result =
gitgrip::cli::commands::verify::run_verify(gitgrip::cli::commands::verify::VerifyOptions {
workspace_root: &ws.workspace_root,
manifest: &manifest,
repos_filter: None,
group_filter: None,
json: true,
quiet: false,
clean: false,
links: false,
on_branch: Some("feat/test"),
synced: false,
});
assert!(result.is_ok()); }