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 add_to_main_module() -> Result<()> {
    let mut wints = WintsCommand::new()?;

    wints
        .cmd
        .arg("add")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("https://site.tld")
        .arg("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Add 'https://site.tld' to 'context' in 'main'..",
        ))
        .stdout(contains(
            " 📝 'https://site.tld' have been added to 'context' in 'main'",
        ));

    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("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🌀 Dry-run mode activated."))
        .stdout(contains(" 🔎 Searching for 'context'..."))
        .stdout(contains(" 🌀 Open https://site.tld"))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

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

    wints
        .cmd
        .arg("add")
        .arg("--config")
        .arg(wints.local_config_dir.display().to_string())
        .arg("--global-config")
        .arg(wints.home_dir_config_dir.display().to_string())
        .arg("https://site.tld")
        .arg("some context about this url");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Add 'https://site.tld' to 'some context about this url' in 'main'..",
        ))
        .stdout(contains(
            " 📝 'https://site.tld' have been added to 'some context about this url' in 'main'",
        ));

    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("context url");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🌀 Dry-run mode activated."))
        .stdout(contains(" 🔎 Searching for 'context url'..."))
        .stdout(contains(" 🌀 Open https://site.tld"))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

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

    wints
        .cmd
        .arg("add")
        .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("some")
        .arg("https://site.tld")
        .arg("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Add 'https://site.tld' to 'context' in 'some'..",
        ))
        .stdout(contains(
            " 📝 'https://site.tld' have been added to 'context' in 'some'",
        ));

    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("--module")
        .arg("some")
        .arg("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🌀 Dry-run mode activated."))
        .stdout(contains(" 🔎 Searching for 'context'..."))
        .stdout(contains(" 🌀 Open https://site.tld"))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}

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

    wints
        .cmd
        .arg("add")
        .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("some")
        .arg("--global")
        .arg("https://site.tld")
        .arg("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(
            " 📝 Add 'https://site.tld' to 'context' in 'some'..",
        ))
        .stdout(contains(
            " 📝 'https://site.tld' have been added to 'context' in 'some'",
        ));

    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("--module")
        .arg("some")
        .arg("context");

    wints
        .cmd
        .assert()
        .success()
        .stdout(contains(" 🌀 Dry-run mode activated."))
        .stdout(contains(" 🔎 Searching for 'context'..."))
        .stdout(contains(" 🌀 Open https://site.tld"))
        .stdout(contains(" ✅ Search completed."));

    Ok(())
}