greentic-component 0.5.2

High-level component loader and store for Greentic components
Documentation
use std::fs;
use std::path::Path;

use greentic_component::schema::{
    collect_capability_hints, collect_default_annotations, collect_redactions,
};

#[test]
fn collects_redactions_and_defaults() {
    let path =
        Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/schemas/redaction.schema.json");
    let raw = fs::read_to_string(path).unwrap();
    let redactions = collect_redactions(&raw);
    let redacted_paths: Vec<_> = redactions.iter().map(|p| p.as_str().to_string()).collect();
    assert_eq!(redacted_paths, vec!["$.credentials.api_key".to_string()]);

    let defaults = collect_default_annotations(&raw).unwrap();
    assert_eq!(defaults[0].0.as_str(), "$.credentials.scope");
    assert_eq!(defaults[0].1, "tenant_scope");
}

#[test]
fn collects_capability_hints() {
    let path =
        Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/schemas/redaction.schema.json");
    let raw = fs::read_to_string(path).unwrap();
    let caps = collect_capability_hints(&raw).unwrap();
    let hints: Vec<_> = caps
        .into_iter()
        .map(|(path, cap)| format!("{}={cap}", path.as_str()))
        .collect();
    assert!(hints.contains(&"$.credentials=secrets".to_string()));
    assert!(hints.contains(&"$.network.hosts[*]=net".to_string()));
}