ic-query 0.93.4

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

#[test]
fn account_transaction_cursor_accepts_arbitrary_decimal_and_canonicalizes_zeroes() {
    for (value, expected) in [
        ("0", "0"),
        ("0000", "0"),
        ("42", "42"),
        ("00042", "42"),
        ("18446744073709551616", "18446744073709551616"),
        ("00018446744073709551616", "18446744073709551616"),
    ] {
        assert_eq!(normalize_transaction_cursor(value).unwrap(), expected);
    }
    for value in ["", "+1", "-1", " 1", "1 ", "1.0", "١", "42"] {
        assert!(matches!(
            normalize_transaction_cursor(value),
            Err(IcrcAccountTransactionError::InvalidCursor { .. })
        ));
    }
}

#[test]
fn canonical_rows_require_unique_descending_arbitrary_size_ids() {
    let rows = |ids: &[&str]| {
        ids.iter()
            .map(|id| {
                serde_json::from_value::<IcrcAccountTransactionRow>(serde_json::json!({
                    "id": id,
                    "kind": "transfer",
                    "raw_transaction": {},
                }))
                .unwrap()
            })
            .collect::<Vec<_>>()
    };
    validate_canonical_account_transactions(&rows(&[
        "18446744073709551617",
        "18446744073709551616",
        "9",
        "0",
    ]))
    .expect("canonical newest-first rows beyond u64");
    for ids in [
        vec!["18446744073709551616", "18446744073709551616"],
        vec!["9", "10"],
        vec!["00042"],
        vec![""],
        vec!["+1"],
        vec!["-1"],
        vec!["01"],
        vec![" 1"],
        vec!["1 "],
        vec!["1.0"],
        vec!["١"],
        vec!["42"],
    ] {
        assert!(validate_canonical_account_transactions(&rows(&ids)).is_err());
    }
}