ic-query-cli 0.17.1

Command-line wrapper for read-only Internet Computer metadata queries
Documentation
use super::*;
use ic_query::nns::governance::DEFAULT_NNS_GOVERNANCE_SOURCE_ENDPOINT;

#[test]
fn nns_governance_options_are_shared_across_reports() {
    let defaults = NnsGovernanceOptions::parse(
        [],
        governance_economics_command(),
        governance_economics_usage,
    )
    .expect("economics defaults");
    assert_eq!(defaults.network, MAINNET_NETWORK);
    assert_eq!(defaults.format, OutputFormat::Text);
    assert_eq!(
        defaults.source_endpoint,
        DEFAULT_NNS_GOVERNANCE_SOURCE_ENDPOINT
    );

    let explicit = NnsGovernanceOptions::parse(
        [
            OsString::from("--format"),
            OsString::from("json"),
            OsString::from("--source-endpoint"),
            OsString::from("https://example.test"),
        ],
        governance_metrics_command(),
        governance_metrics_usage,
    )
    .expect("metrics options");
    assert_eq!(explicit.format, OutputFormat::Json);
    assert_eq!(explicit.source_endpoint, "https://example.test");
}

#[test]
fn nns_governance_help_advertises_native_live_reports() {
    assert!(usage().contains("governance"));
    let family = governance_usage();
    assert!(family.contains("economics"));
    assert!(family.contains("metrics"));
    assert!(family.contains("reward-event"));
    assert!(family.contains("maturity-modulation"));

    for help in [
        governance_economics_usage(),
        governance_metrics_usage(),
        governance_reward_event_usage(),
        governance_maturity_modulation_usage(),
    ] {
        assert!(help.contains("Collection mode: Live query"));
        assert!(help.contains("--source-endpoint"));
        assert!(help.contains("--format"));
    }
}

#[test]
fn nns_governance_non_mainnet_is_rejected_before_live_query() {
    for command in [
        "economics",
        "metrics",
        "reward-event",
        "maturity-modulation",
    ] {
        let error = run([
            OsString::from("governance"),
            OsString::from(command),
            OsString::from("--__icq-network"),
            OsString::from("local"),
        ])
        .expect_err("local network must be rejected");

        let message = error.to_string();
        assert!(message.contains("supports only the mainnet `ic` network"));
        assert!(message.contains("icq --network ic nns governance economics"));
    }
}

#[test]
fn nns_governance_each_report_command_accepts_common_options() {
    for (command, usage) in [
        (
            governance_economics_command(),
            governance_economics_usage as fn() -> String,
        ),
        (
            governance_metrics_command(),
            governance_metrics_usage as fn() -> String,
        ),
        (
            governance_reward_event_command(),
            governance_reward_event_usage as fn() -> String,
        ),
        (
            governance_maturity_modulation_command(),
            governance_maturity_modulation_usage as fn() -> String,
        ),
    ] {
        let options = NnsGovernanceOptions::parse(
            [OsString::from("--format"), OsString::from("json")],
            command,
            usage,
        )
        .expect("shared report options");
        assert_eq!(options.format, OutputFormat::Json);
    }
}