wints 0.8.0

wints is a fuzzy term-based URLs opener
Documentation
use anyhow::Result;
use assert_cmd::prelude::*;
use predicate::str::contains;
use predicates::prelude::*;

use crate::WintsCommand;

#[test]
fn no_template() -> Result<()> {
    let mut wints = WintsCommand::new()?;

    wints
        .cmd
        .arg("init")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string());

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 📝 Initialise 'main' with template 'empty'..."))
        .stdout(contains(
            " 📝 A new 'main' module have been created with 0 contexts and 0 URLs",
        ));

    wints.new_cmd()?;
    wints
        .cmd
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--dry-run")
        .arg("repo");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🔎 Searching for 'repo'..."))
        .stdout(contains(" 😢 Nothing found, try with another term."))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

#[test]
fn default_template() -> Result<()> {
    let mut wints = WintsCommand::new()?;

    wints
        .cmd
        .arg("init")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("default");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 📝 Initialise 'main' with template 'default'..."))
        .stdout(contains(
            " 📝 A new 'main' module have been created with 4 contexts and 4 URLs",
        ));

    wints.new_cmd()?;

    wints
        .cmd
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--dry-run")
        .arg("repo");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🌀 Dry-run mode activated."))
        .stdout(contains(" 🔎 Searching for 'repo'..."))
        .stdout(contains(" 🌀 Open https://github.com/rlespinasse/wints"))
        .stdout(contains(
            " 🌀 Open https://github.com/rlespinasse/wints/issues",
        ))
        .stdout(contains(" 🌀 Open https://crates.io/crates/wints"))
        .stdout(contains(
            " 🌀 Open https://github.com/rlespinasse/wints/blob/v0.x/USAGE.adoc",
        ))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

#[test]
fn using_module() -> Result<()> {
    let mut wints = WintsCommand::new()?;

    wints
        .cmd
        .arg("init")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--module")
        .arg("another");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Initialise 'another' with template 'empty'...",
        ))
        .stdout(contains(
            " 📝 A new 'another' module have been created with 0 contexts and 0 URLs",
        ));

    wints.new_cmd()?;

    wints
        .cmd
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--module")
        .arg("another")
        .arg("--dry-run")
        .arg("repo");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🔎 Searching for 'repo'..."))
        .stdout(contains(" 😢 Nothing found, try with another term."))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

#[test]
fn using_global_module() -> Result<()> {
    let mut wints = WintsCommand::new()?;

    wints
        .cmd
        .arg("init")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--module")
        .arg("another")
        .arg("--global");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Initialise 'another' with template 'empty'...",
        ))
        .stdout(contains(
            " 📝 A new 'another' module have been created with 0 contexts and 0 URLs",
        ));

    wints.new_cmd()?;

    wints
        .cmd
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("--module")
        .arg("another")
        .arg("--dry-run")
        .arg("repo");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🔎 Searching for 'repo'..."))
        .stdout(contains(" 😢 Nothing found, try with another term."))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}