cask-cli 0.2.0

Docker-based application deployment tool for developer
use assert_cmd::Command;

static TURBO_HELP: &str = "turbo
The build system that makes ship happen
USAGE:
    turbo [OPTIONS] [TASKS]... [SUBCOMMAND]
ARGS:
    <TASKS>...
OPTIONS:
        --api <API>                  Override the endpoint for API calls
        --color                      Force color usage in the terminal
        --cpuprofile <CPUPROFILE>    Specify a file to save a cpu profile
        --cwd <CWD>                  The directory in which to run turbo
    -h, --help
        --heap <HEAP>                Specify a file to save a pprof heap profile
        --login <LOGIN>              Override the login endpoint
        --no-color                   Suppress color usage in the terminal
        --preflight                  When enabled, turbo will precede HTTP requests with an OPTIONS
                                     request for authorization
        --team <TEAM>                Set the team slug for API calls
        --token <TOKEN>              Set the auth token for API calls
        --trace <TRACE>              Specify a file to save a pprof trace
    -v, --verbosity <VERBOSITY>      verbosity
        --version
SUBCOMMANDS:
    bin           Get the path to the Turbo binary
    completion    Generate the autocompletion script for the specified shell
    daemon        Runs the Turborepo background daemon
    help          Help about any command
    link          Link your local directory to a Vercel organization and enable remote caching
    login         Login to your Vercel account
    logout        Logout to your Vercel account
    prune         Prepare a subset of your monorepo
    run           Run tasks across projects in your monorepo
    unlink        Unlink the current directory from your Vercel organization and disable Remote
                      Caching
";

fn get_version() -> &'static str {
    include_str!("../../version.txt")
        .split_once('\n')
        .expect("Failed to read version from version.txt")
        .0
}

#[test]
fn test_help() {
    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.arg("--help");
    cmd.assert().success().stdout(TURBO_HELP);

    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.arg("-h");
    cmd.assert().success().stdout(TURBO_HELP);

    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.arg("--version");
    cmd.assert()
        .success()
        .stdout(format!("{}\n", get_version()));
}

#[test]
fn test_find_correct_turbo() {
    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.assert()
        .append_context("turbo", "no arguments")
        .append_context(
            "expect",
            "`turbo` with no arguments should exit with code 1",
        )
        .code(1);

    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.args(&["--cwd", "../examples/basic", "bin"])
        .assert()
        .append_context(
            "turbo",
            "bin command with cwd flag set to package with local turbo installed",
        )
        .append_context(
            "expect",
            "`turbo --cwd ../../examples/basic bin` should print out local turbo binary installed \
             in examples/basic",
        )
        .success()
        .stdout(predicates::str::ends_with(
            "examples/basic/node_modules/.bin/turbo\n",
        ));

    let mut cmd = Command::cargo_bin("turbo").unwrap();
    cmd.args(&["--cwd", "..", "bin"])
        .assert()
        .append_context(
            "turbo",
            "bin command with cwd flag set to package without local turbo installed",
        )
        .append_context(
            "expect",
            "`turbo --cwd .. bin` should print out current turbo binary",
        )
        .success()
        .stdout(predicates::str::ends_with("target/debug/turbo\n"));
}