cli-diary 0.8.0

A CLI based diary tool for adding entries on the fly.
Documentation
use std::{fs, path::PathBuf, process::Command};

use assert_cmd::prelude::*;
use predicates::prelude::*;

mod utils;

#[test]
fn test_default_init_success() -> utils::TestReturn {
    let mut cmd = Command::cargo_bin("diary")?;

    let (dir_str, config_path) = utils::create_temp_dir_and_path()?;

    cmd.args(["--config", config_path.to_str().unwrap(), "init", &dir_str]);
    cmd.assert()
        .success()
        .stdout(predicate::str::contains("Initialised diary."));

    let diary_path: PathBuf = [&dir_str, "diary"].iter().collect();

    assert!(diary_path.exists());
    assert!(config_path.exists());

    Ok(())
}

#[test]
fn test_init_success_with_options() -> utils::TestReturn {
    let mut cmd = Command::cargo_bin("diary")?;

    let (dir_str, config_path) = utils::create_temp_dir_and_path()?;

    cmd.args([
        "--config",
        config_path.to_str().unwrap(),
        "init",
        &dir_str,
        "--prefix",
        "d",
        "--filetype",
        "rst",
    ]);
    cmd.assert()
        .success()
        .stdout(predicate::str::contains("Initialised diary."));

    let diary_path: PathBuf = [&dir_str, "diary"].iter().collect();

    assert!(diary_path.exists());

    let content = fs::read_to_string(config_path).expect("Unable to read file.");

    assert!(content.contains("prefix = 'd'"));
    assert!(content.contains("file_type = 'rst'"));

    Ok(())
}

#[test]
fn test_init_success_with_git_repo() -> utils::TestReturn {
    let mut cmd = Command::cargo_bin("diary")?;

    let (dir_str, config_path) = utils::create_temp_dir_and_path()?;

    cmd.args([
        "--config",
        config_path.to_str().unwrap(),
        "init",
        &dir_str,
        "--repo",
    ]);
    cmd.assert()
        .success()
        .stdout(predicate::str::contains("Initialised diary."));

    let git_path: PathBuf = [&dir_str, "diary", ".git"].iter().collect();

    assert!(git_path.exists());

    Ok(())
}

#[test]
fn test_init_failure() -> utils::TestReturn {
    let mut cmd = Command::cargo_bin("diary")?;

    let (dir_str, config_path) = utils::create_temp_dir_and_path()?;

    cmd.args(["--config", config_path.to_str().unwrap(), "init", &dir_str]);
    cmd.assert()
        .success()
        .stdout(predicate::str::contains("Initialised diary."));

    cmd.assert().failure();
    Ok(())
}