use crate::shellcode::*;

fn installed_versions() -> Call {
    Call::new("fnm", vec!["ls"])
}

test_shell!(Bash, Zsh, Fish, PowerShell; {
    EvalFnmEnv::default()
        .then(Call::new("fnm", vec!["install", "6.11.3"]))
        .then(Call::new("fnm", vec!["install", "8.11.3"]))
        .then(Call::new("fnm", vec!["alias", "8.11", "oldie"]))
        .then(Call::new("fnm", vec!["alias", "6", "older"]))
        .then(Call::new("fnm", vec!["default", "older"]))
        .then(OutputContains::new(
            OutputContains::new(installed_versions(), "8.11.3"),
            "oldie",
        ))
        .then(OutputContains::new(
            OutputContains::new(OutputContains::new(installed_versions(), "6.11.3"), "older"),
            "default",
        ))
        .then(Call::new("fnm", vec!["use", "older"]))
        .then(test_node_version("v6.11.3"))
        .then(Call::new("fnm", vec!["use", "oldie"]))
        .then(test_node_version("v8.11.3"))
        .then(Call::new("fnm", vec!["use", "default"]))
        .then(test_node_version("v6.11.3"))
});