proto_cli 0.56.0

A multi-language version manager, a unified toolchain.
use proto_core::test_utils::*;
use starbase_sandbox::predicates::prelude::*;

mod plugin_search {
    use super::*;

    #[test]
    fn errors_if_no_query() {
        let sandbox = create_empty_proto_sandbox();

        let assert = sandbox
            .run_bin(|cmd| {
                cmd.arg("plugin").arg("search");
            })
            .failure();

        assert.stderr(predicate::str::contains(
            "the following required arguments were not provided",
        ));
    }

    #[test]
    fn errors_if_no_results() {
        let sandbox = create_empty_proto_sandbox();

        let assert = sandbox
            .run_bin(|cmd| {
                cmd.arg("plugin").arg("search").arg("gibberish");
            })
            .failure();

        assert.stderr(predicate::str::contains(
            "no plugins found in the registry for the query gibberish",
        ));
    }

    #[test]
    fn returns_matching_results() {
        let sandbox = create_empty_proto_sandbox();

        let assert = sandbox
            .run_bin(|cmd| {
                cmd.arg("plugin").arg("search").arg("zig");
            })
            .success();

        assert.stdout(predicate::str::contains("Search results for: zig"));
    }

    #[test]
    fn returns_json_data() {
        let sandbox = create_empty_proto_sandbox();

        let assert = sandbox
            .run_bin(|cmd| {
                cmd.arg("plugin").arg("search").arg("zig").arg("--json");
            })
            .success();

        assert.stdout(predicate::str::starts_with("["));
    }

    #[test]
    fn caches_results_in_store() {
        let sandbox = create_empty_proto_sandbox();

        sandbox
            .run_bin(|cmd| {
                cmd.arg("plugin").arg("search").arg("zig");
            })
            .success();

        assert!(
            sandbox
                .path()
                .join(".proto/cache/registry/external-plugins.json")
                .exists()
        );
    }
}