ic-query-cli 0.26.4

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

fn json_source_args() -> [&'static str; 3] {
    ["--json", "--source-endpoint", "https://icp-api.io"]
}

fn assert_topology_read_defaults(network: &str, format: OutputFormat, source_endpoint: &str) {
    assert_eq!(network, MAINNET_NETWORK);
    assert_eq!(format, OutputFormat::Text);
    assert_eq!(source_endpoint, DEFAULT_NNS_NODE_SOURCE_ENDPOINT);
}

fn assert_topology_json_source(format: OutputFormat, source_endpoint: &str) {
    assert_eq!(format, OutputFormat::Json);
    assert_eq!(source_endpoint, "https://icp-api.io");
}

macro_rules! topology_read_options_parse_test {
    ($test_name:ident, $options:ident, $command:ident, $description:literal) => {
        #[test]
        fn $test_name() {
            let defaults = parse_test_options($command(), &[], $options::from_matches)
                .expect("parse defaults");
            assert_topology_read_defaults(
                &defaults.network,
                defaults.format,
                &defaults.source_endpoint,
            );

            let options =
                parse_test_options($command(), &json_source_args(), $options::from_matches)
                    .expect($description);
            assert_topology_json_source(options.format, &options.source_endpoint);
        }
    };
}

topology_read_options_parse_test!(
    topology_summary_parses_defaults_and_json_format,
    TopologySummaryOptions,
    topology_summary_command,
    "parse topology summary"
);
topology_read_options_parse_test!(
    topology_versions_parses_defaults_and_json_format,
    TopologyVersionsOptions,
    topology_versions_command,
    "parse topology versions"
);
topology_read_options_parse_test!(
    topology_coverage_parses_defaults_and_json_format,
    TopologyCoverageOptions,
    topology_coverage_command,
    "parse topology coverage"
);
topology_read_options_parse_test!(
    topology_health_parses_defaults_and_json_format,
    TopologyHealthOptions,
    topology_health_command,
    "parse topology health"
);
topology_read_options_parse_test!(
    topology_gaps_parses_defaults_and_json_format,
    TopologyGapsOptions,
    topology_gaps_command,
    "parse topology gaps"
);
topology_read_options_parse_test!(
    topology_capacity_parses_defaults_and_json_format,
    TopologyCapacityOptions,
    topology_capacity_command,
    "parse topology capacity"
);
topology_read_options_parse_test!(
    topology_regions_parses_defaults_and_json_format,
    TopologyRegionsOptions,
    topology_regions_command,
    "parse topology regions"
);
topology_read_options_parse_test!(
    topology_providers_parses_defaults_and_json_format,
    TopologyProvidersOptions,
    topology_providers_command,
    "parse topology providers"
);

#[test]
fn topology_refresh_parses_defaults_and_dry_run() {
    let defaults = parse_test_options(
        topology_refresh_command(),
        &[],
        TopologyRefreshOptions::from_matches,
    )
    .expect("parse defaults");

    assert_eq!(defaults.network, MAINNET_NETWORK);
    assert_eq!(defaults.format, OutputFormat::Text);
    assert_eq!(defaults.source_endpoint, DEFAULT_NNS_NODE_SOURCE_ENDPOINT);
    assert_eq!(defaults.lock_stale_after_seconds, 30 * 60);
    assert!(!defaults.dry_run);

    let options = parse_test_options(
        topology_refresh_command(),
        &[
            "--json",
            "--source-endpoint",
            "https://icp-api.io",
            "--lock-stale-after",
            "5m",
            "--dry-run",
        ],
        TopologyRefreshOptions::from_matches,
    )
    .expect("parse topology refresh");

    assert_topology_json_source(options.format, &options.source_endpoint);
    assert_eq!(options.lock_stale_after_seconds, 300);
    assert!(options.dry_run);
}