git-clean 0.8.0

A tool for cleaning old git branches.
Documentation
use support::project;

#[test]
fn test_git_clean_removes_remote_branches() {
    let project = project("git-clean_removes_remote").build().setup_remote();

    project.batch_setup_commands(&[
        "git checkout -b test1",
        "git push origin HEAD",
        "git checkout -b test2",
        "git push origin HEAD",
        "git checkout main",
    ]);

    let verify = project.setup_command("git branch -r");

    assert!(
        verify.stdout().contains("test1"),
        "{}",
        verify.failure_message("test1 to exist in remote")
    );
    assert!(
        verify.stdout().contains("test2"),
        "{}",
        verify.failure_message("test2 to exist in remote")
    );

    let result = project.git_clean_command("-y").run();

    assert!(
        result.is_success(),
        "{}",
        result.failure_message("command to succeed")
    );
    assert!(
        result
            .stdout()
            .contains(deleted_branch_output("test1").as_str()),
        "{}",
        result.failure_message("command to delete test1")
    );
    assert!(
        result
            .stdout()
            .contains(deleted_branch_output("test2").as_str()),
        "{}",
        result.failure_message("command to delete test2")
    );
}

#[test]
fn test_git_clean_does_not_remove_ignored_remote_branches() {
    let project = project("git-clean_removes_remote").build().setup_remote();

    project.batch_setup_commands(&[
        "git checkout -b test1",
        "git push origin HEAD",
        "git checkout -b test2",
        "git push origin HEAD",
        "git checkout main",
    ]);

    let verify = project.setup_command("git branch -r");

    assert!(
        verify.stdout().contains("test1"),
        "{}",
        verify.failure_message("test1 to exist in remote")
    );
    assert!(
        verify.stdout().contains("test2"),
        "{}",
        verify.failure_message("test2 to exist in remote")
    );

    let result = project.git_clean_command("-y -i test2").run();

    assert!(
        result.is_success(),
        "{}",
        result.failure_message("command to succeed")
    );
    assert!(
        result
            .stdout()
            .contains(deleted_branch_output("test1").as_str()),
        "{}",
        result.failure_message("command to delete test1")
    );
    assert!(
        !result
            .stdout()
            .contains(deleted_branch_output("test2").as_str()),
        "{}",
        result.failure_message("command to delete test2")
    );
}

fn deleted_branch_output(branch: &str) -> String {
    format!(" - [deleted]         {}", branch)
}