treeflow 0.2.0

CLI tool for simplified Git worktree management to speed up switching contexts when working collaboratively.
Documentation
#[cfg(test)]
mod utils;

#[cfg(test)]
mod config_tests {
    use tempdir::TempDir;
    use treeflow::utils::Return;
    use crate::utils::treeflow_command::TreeflowCommand;

    #[test]
    fn print_empty_configuration() {
        let config_dir = TempDir::new("config_dir").expect("Temp dir");
        TreeflowCommand::new(config_dir.into_path())
            .config()
            .cmd()
            .assert()
            .success()
            .stdout("work_types = []\nprojects = []\n");
    }

    #[test]
    fn add_work_type_updates_config() {
        let config_dir = TempDir::new("config_dir").expect("Temp dir");
        let current_dir = TempDir::new("current_dir").expect("Temp dir");
        let work_type_name = "feature";
        let work_type_prefix = "feature/";

        TreeflowCommand::new(config_dir.path().to_path_buf())
            .worktype_add(work_type_name, work_type_prefix)
            .current_dir(current_dir.path())
            .cmd()
            .assert()
            .success()
            .stdout(Return::Null { }.print());

        TreeflowCommand::new(config_dir.path().to_path_buf())
            .config()
            .cmd()
            .assert()
            .success()
            .stdout("projects = []\n\n[[work_types]]\ntype_name = \"feature\"\nprefix = \"feature/\"\n");
    }

    #[test]
    fn add_project_updates_config() {
        let config_dir = TempDir::new("config_dir").expect("should be able to create temp config dir");
        let current_dir =
            TempDir::new("current_dir").expect("should be able to create temp current dir");
        let repository_path = current_dir.path().to_path_buf();
        let worktrees_path = current_dir.path().join("worktrees");

        TreeflowCommand::new(config_dir.path().to_path_buf())
            .project_add(&repository_path, Some(&worktrees_path))
            .current_dir(current_dir.path())
            .cmd()
            .assert()
            .success()
            .stdout(Return::Null { }.print());

        TreeflowCommand::new(config_dir.path().to_path_buf())
            .config()
            .cmd()
            .assert()
            .success()
            .stdout(format!(
                "work_types = []\n\n[[projects]]\nrepository = \"{0}\"\nworktrees = \"{1}\"\n",
                repository_path.display(),
                worktrees_path.display()
            ));
    }
}