proto_cli 0.23.2

A multi-language version manager, a unified toolchain.
mod utils;

use starbase_sandbox::predicates::prelude::*;
use utils::*;

mod bin {
    use super::*;

    #[test]
    fn errors_if_not_installed() {
        let sandbox = create_empty_sandbox();

        let mut cmd = create_proto_command(sandbox.path());
        let assert = cmd.arg("bin").arg("npm").arg("9.0.0").assert();

        assert.stderr(predicate::str::contains(
            "Unable to find an executable for npm",
        ));
    }

    #[test]
    fn returns_path_if_installed() {
        let sandbox = create_empty_sandbox();

        let mut cmd = create_proto_command(sandbox.path());
        cmd.arg("install")
            .arg("npm")
            .arg("9.0.0")
            .assert()
            .success();

        let mut cmd = create_proto_command(sandbox.path());
        let assert = cmd.arg("bin").arg("npm").arg("9.0.0").assert();

        if cfg!(windows) {
            assert.stdout(predicate::str::contains(
                "tools\\npm\\9.0.0\\bin/npm-cli.js",
            ));
        } else {
            assert.stdout(predicate::str::contains("tools/npm/9.0.0/bin/npm-cli.js"));
        }
    }

    #[test]
    fn returns_bin_path() {
        let sandbox = create_empty_sandbox();

        let mut cmd = create_proto_command(sandbox.path());
        cmd.arg("install")
            .arg("npm")
            .arg("9.0.0")
            .assert()
            .success();

        let mut cmd = create_proto_command(sandbox.path());
        let assert = cmd.arg("bin").arg("npm").arg("9.0.0").arg("--bin").assert();

        if cfg!(windows) {
            assert.stdout(predicate::str::contains("bin\\npm.cmd"));
        } else {
            assert.stdout(predicate::str::contains("bin/npm"));
        }
    }

    #[test]
    fn returns_shim_path() {
        let sandbox = create_empty_sandbox();

        let mut cmd = create_proto_command(sandbox.path());
        cmd.arg("install")
            .arg("npm")
            .arg("9.0.0")
            .assert()
            .success();

        let mut cmd = create_proto_command(sandbox.path());
        let assert = cmd
            .arg("bin")
            .arg("npm")
            .arg("9.0.0")
            .arg("--shim")
            .assert();

        if cfg!(windows) {
            assert.stdout(predicate::str::contains("shims\\npm.ps1"));
        } else {
            assert.stdout(predicate::str::contains("shims/npm"));
        }
    }
}