sdkt-cli 2.5.0

Command Line Interface (CLI) application combining core Soroban DevKit components.
use assert_cmd::Command;
use predicates::prelude::*;

#[test]
fn test_cli_fee_estimate_testnet() {
    let mut cmd = Command::cargo_bin("sdkt").unwrap();
    cmd.arg("fee")
        .arg("estimate")
        .arg("--network")
        .arg("testnet")
        .arg("--base-fees")
        .arg("100,120,90,110")
        .arg("--format")
        .arg("pretty");

    cmd.assert()
        .success()
        .stdout(predicate::str::contains("Fee Estimate (testnet):"))
        .stdout(predicate::str::contains("Stroops: 100"))
        .stdout(predicate::str::contains("XLM: 0.00001"));
}

#[test]
fn test_cli_fee_estimate_mainnet_json() {
    let mut cmd = Command::cargo_bin("sdkt").unwrap();
    cmd.arg("fee")
        .arg("estimate")
        .arg("--network")
        .arg("mainnet")
        .arg("--base-fees")
        .arg("100")
        .arg("--format")
        .arg("json");

    cmd.assert().success().stdout(predicate::str::contains(
        r#"{"stroops":125,"xlm":"0.0000125"}"#,
    ));
}

#[test]
fn test_cli_fee_estimate_invalid_fees() {
    let mut cmd = Command::cargo_bin("sdkt").unwrap();
    cmd.arg("fee")
        .arg("estimate")
        .arg("--base-fees")
        .arg("100,abc,120");

    cmd.assert()
        .failure()
        .stderr(predicate::str::contains("Invalid base_fees"));
}

#[test]
fn test_cli_fee_estimate_unknown_network() {
    let mut cmd = Command::cargo_bin("sdkt").unwrap();
    cmd.arg("fee")
        .arg("estimate")
        .arg("--network")
        .arg("fakenet")
        .arg("--base-fees")
        .arg("100");

    cmd.assert()
        .failure()
        .stderr(predicate::str::contains("Invalid network"));
}