greentic-types 0.4.60

Shared primitives for Greentic: TenantCtx, InvocationEnvelope, NodeError, ids.
Documentation
#![cfg(feature = "schemars")]

use greentic_types::{Outcome, PackRef, SpanContext, TenantCtx, WizardPlan};
use schemars::{JsonSchema, schema_for};
use serde_json::Value;

fn schema_value<T: JsonSchema>() -> Value {
    let schema = schema_for!(T);
    serde_json::to_value(&schema).expect("schema serializes")
}

fn defs_keys(value: &Value) -> Vec<String> {
    value
        .pointer("/$defs")
        .or_else(|| value.pointer("/definitions"))
        .and_then(|defs| defs.as_object())
        .map(|defs| defs.keys().cloned().collect())
        .unwrap_or_default()
}

#[test]
fn tenant_context_schema_registered() {
    let value = schema_value::<TenantCtx>();
    assert!(
        value.is_object(),
        "TenantCtx root schema should be an object"
    );
    let defs = defs_keys(&value);
    assert!(
        defs.iter().any(|name| name.contains("Impersonation")),
        "Impersonation definition missing: {defs:?}"
    );
}

#[test]
fn span_context_schema_has_object() {
    let value = schema_value::<SpanContext>();
    assert!(value.is_object(), "SpanContext schema should be an object");
}

#[test]
fn pack_schema_includes_signature() {
    let value = schema_value::<PackRef>();
    let defs = defs_keys(&value);
    assert!(
        defs.iter().any(|name| name.contains("Signature")),
        "Signature definition missing: {defs:?}"
    );
}

#[test]
fn outcome_schema_enumerates_variants() {
    let value = schema_value::<Outcome<String>>();
    let variants = value
        .pointer("/oneOf")
        .and_then(|variants| variants.as_array())
        .map(|list| list.len())
        .unwrap_or_default();
    assert!(variants >= 3, "Outcome schema should declare variants");
}

#[test]
fn wizard_plan_schema_has_delegate_variant() {
    let value = schema_value::<WizardPlan>();
    let serialized = serde_json::to_string(&value).expect("schema string");
    assert!(
        serialized.contains("\"delegate\""),
        "WizardPlan schema should include delegate step variant"
    );
}