harn-cli 0.10.128

CLI for the Harn programming language — run, test, REPL, format, and lint
use super::super::prepared_session::{PREPARED_SESSION_COMMANDS, PREPARED_SESSION_STATES};
use super::*;

#[test]
fn generated_bindings_expose_one_prepared_session_contract() {
    let typescript = generate_typescript();
    let rust = generate_rust();
    let swift = generate_swift();
    let python = generate_python();
    let go = generate_go();
    for (artifact, lease, update) in [
        (
            &typescript,
            "HarnPreparedSessionLease",
            "HarnPreparedSessionUpdate",
        ),
        (
            &rust,
            "HarnPreparedSessionLease",
            "HarnPreparedSessionUpdate",
        ),
        (
            &swift,
            "HarnPreparedSessionLease",
            "HarnPreparedSessionUpdate",
        ),
        (
            &python,
            "HarnPreparedSessionLease",
            "HarnPreparedSessionUpdate",
        ),
        (&go, "HarnPreparedSessionLease", "HarnPreparedSessionUpdate"),
    ] {
        assert!(artifact.contains(lease), "binding missing prepared lease");
        assert!(artifact.contains(update), "binding missing prepared update");
        assert!(artifact.contains("harn.prepared_session.v1"));
        for value in PREPARED_SESSION_STATES
            .iter()
            .chain(PREPARED_SESSION_COMMANDS.iter())
        {
            assert!(artifact.contains(value), "binding missing {value}");
        }
    }
    let manifest_json = manifest_json().expect("generate protocol manifest");
    let manifest: serde_json::Value =
        serde_json::from_str(&manifest_json).expect("protocol manifest");
    assert_eq!(
        manifest["preparedSession"]["schema"],
        harn_vm::prepared_run::PREPARED_SESSION_SCHEMA
    );
    assert_eq!(
        manifest["preparedSession"]["states"],
        serde_json::json!(PREPARED_SESSION_STATES)
    );
    assert_eq!(
        manifest["preparedSession"]["commands"],
        serde_json::json!(PREPARED_SESSION_COMMANDS)
    );
}