greentic-flow-builder 0.1.0

AI-powered Adaptive Card flow builder with visual graph editor and demo runner
Documentation
//! Integration tests for the render pipeline.
//!
//! These exercise the public `TemplateRegistry::load` + `render::render_preset`
//! surface with the built-in (compile-time embedded) template pack.

use greentic_flow_builder::registry::TemplateRegistry;
use greentic_flow_builder::render;
use std::path::PathBuf;

fn load_registry() -> TemplateRegistry {
    let empty: Vec<PathBuf> = vec![];
    TemplateRegistry::load(&empty).expect("load registry")
}

#[test]
fn test_render_menu_card_with_default_theme() {
    let registry = load_registry();
    let data = serde_json::json!({
        "brand": "Test",
        "brand_icon": "",
        "title": "Welcome",
        "items": [
            { "id": "a", "title": "Option A", "subtitle": "First option", "icon": "🔷" }
        ]
    });
    let response = render::render_preset(&registry, "menu-card", Some("default"), &data).unwrap();
    assert_eq!(response.card["type"], "AdaptiveCard");
    assert_eq!(response.card["version"], "1.5");
    assert_eq!(response.theme, "default");
    assert_eq!(response.preset, "menu-card");
}

#[test]
fn test_render_with_corporate_theme() {
    let registry = load_registry();
    let data = serde_json::json!({
        "title": "Test",
        "items": [{ "id": "a", "title": "A" }]
    });
    let response = render::render_preset(&registry, "menu-card", Some("corporate"), &data).unwrap();
    assert_eq!(response.theme, "corporate");
}

#[test]
fn test_render_unknown_preset_fails() {
    let registry = load_registry();
    let data = serde_json::json!({});
    let result = render::render_preset(&registry, "nonexistent", None, &data);
    assert!(result.is_err(), "unknown preset must error");
}

#[test]
fn test_render_unknown_theme_fails() {
    let registry = load_registry();
    let data = serde_json::json!({
        "title": "T",
        "items": [{"id":"a","title":"A"}]
    });
    let result = render::render_preset(&registry, "menu-card", Some("nonexistent-theme"), &data);
    assert!(result.is_err(), "unknown theme must error");
}

#[test]
fn test_render_default_theme_when_none_specified() {
    let registry = load_registry();
    let data = serde_json::json!({
        "title": "T",
        "items": [{"id":"a","title":"A"}]
    });
    let response = render::render_preset(&registry, "menu-card", None, &data).unwrap();
    assert_eq!(response.theme, "default");
}