ic-query 0.90.0

Internet Computer query library for CloudEngine, NNS, SNS, ICRC, system canisters, and public network metadata
Documentation
use super::*;

#[test]
fn permission_names_cover_native_and_unknown_codes() {
    for (code, expected) in [
        (0, "unspecified"),
        (1, "configure_dissolve_state"),
        (2, "manage_principals"),
        (3, "submit_proposal"),
        (4, "vote"),
        (5, "disburse"),
        (6, "split"),
        (7, "merge_maturity"),
        (8, "disburse_maturity"),
        (9, "stake_maturity"),
        (10, "manage_voting_permission"),
        (11, "unknown"),
        (-1, "unknown"),
    ] {
        assert_eq!(sns_neuron_permission_name(code), expected, "code {code}");
    }
}

#[test]
fn policy_observations_fail_closed_and_prioritize_known_violations() {
    let mut detail = SnsNeuronDetail {
        neuron: SnsNeuronRow {
            neuron_id: "00".repeat(32),
            cached_neuron_stake_e8s: 0,
            maturity_e8s_equivalent: 0,
            staked_maturity_e8s_equivalent: None,
            created_timestamp_seconds: 0,
            source_nns_neuron_id: None,
            auto_stake_maturity: None,
            aging_since_timestamp_seconds: 0,
            dissolve_state: None,
            voting_power_percentage_multiplier: 100,
            vesting_period_seconds: None,
            neuron_fees_e8s: 0,
        },
        permissions: vec![SnsNeuronPermissionRow {
            principal: Some("aaaaa-aa".to_string()),
            permission_types: vec![11],
        }],
        disburse_maturity_in_progress: Vec::new(),
        followees: Vec::new(),
        topic_followees: None,
    };

    assert_eq!(
        detail.derived_policy_observations(),
        (
            SnsPolicyObservationStatus::Unassessable,
            SnsPolicyObservationStatus::Unassessable,
        )
    );

    detail.permissions[0].permission_types.push(7);
    assert_eq!(
        detail.derived_policy_observations(),
        (
            SnsPolicyObservationStatus::Violated,
            SnsPolicyObservationStatus::Unassessable,
        )
    );
}