fbas_analyzer 0.7.4

Library and tools for analyzing FBASs like the Stellar network
Documentation
use assert_cmd::Command;
use predicates::prelude::*;

#[test]
fn multiple_merging_options_passed() -> Result<(), Box<dyn std::error::Error>> {
    let mut cmd = Command::cargo_bin("fbas_analyzer")?;
    cmd.arg("test_data/stellarbeat_nodes_2019-09-17.json")
        .arg("--merge-by-isp")
        .arg("--merge-by-country")
        .arg("--merge-by-org")
        .arg("test_data/stellarbeat_organizations_2019-09-17.json")
        .arg("-p");
    cmd.assert().success().stderr(predicate::str::contains(
        "Multiple merging options detected; will only merge nodes by country...",
    ));
    Ok(())
}

#[test]
fn json_describing_fbas_not_available_as_file() -> Result<(), Box<dyn std::error::Error>> {
    let fbas_input = r#"[
            {
                "publicKey": "Jim",
                "geoData": {
                    "countryName": "Oceania,"
                }
            },
            {
                "publicKey": "Jon",
                "geoData": {
                    "countryName": "Oceania"
                }
            },
            {
                "publicKey": "Alex",
                "geoData": {
                    "countryName": "Eastasia"
                }
            },
            {
                "publicKey": "Bob"
            }
            ]"#;
    Command::cargo_bin("fbas_analyzer")?
        .write_stdin(fbas_input.as_bytes())
        .arg("--merge-by-country")
        .arg("-p")
        .assert()
        .success()
        .stderr(predicate::str::contains(
            "Will not merge. JSON file describing FBAS needed to perform merge.",
        ));
    Ok(())
}

#[test]
fn merge_by_ctry_cli_arg_works() -> Result<(), Box<dyn std::error::Error>> {
    let mut cmd = Command::cargo_bin("fbas_analyzer")?;
    cmd.arg("test_data/stellarbeat_nodes_2019-09-17.json")
        .arg("--merge-by-country")
        .arg("-q")
        .arg("-p")
        .arg("--results-only");
    cmd.assert().success().stdout(predicate::str::contains(
        r#"top_tier: ["United States","Finland","Germany"]"#,
    ));
    Ok(())
}