katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use super::*;
use crate::ManifestOnlyBackend;
use crate::test_support::SampleSnapshotFactory;

#[test]
fn build_entry_returns_graph() -> Result<(), Box<dyn std::error::Error>> {
    let api = CliApi::new(ManifestOnlyBackend);
    let request = CliBuildRequest {
        snapshot: SampleSnapshotFactory::create()?,
        profile: BuildProfile::markdown_export(),
        theme_mode: None,
    };
    let output = api.handle(CliRequest::Build(request))?;

    assert!(matches!(output, CliOutput::Build { .. }));
    Ok(())
}

#[test]
fn export_entry_returns_artifact() -> Result<(), Box<dyn std::error::Error>> {
    let api = CliApi::new(ManifestOnlyBackend);
    let graph = BuildGraph::from_request(&BuildRequest {
        snapshot: SampleSnapshotFactory::create()?,
        profile: BuildProfile::markdown_export(),
        theme: KdvThemeSnapshot::katana_light(),
    });
    let request = CliExportRequest {
        graph,
        format: ExportFormat::Html,
        theme_mode: None,
    };
    let output = api.handle(CliRequest::Export(request))?;

    assert!(matches!(output, CliOutput::Export { .. }));
    Ok(())
}

#[test]
fn diagram_entry_returns_krr_input() -> Result<(), Box<dyn std::error::Error>> {
    let api = CliApi::new(ManifestOnlyBackend);
    let output = api.handle(CliRequest::Diagram {
        kind: DiagramKind::Mermaid,
        source: "graph TD; A-->B".to_string(),
        context: RenderContext::default(),
    })?;

    assert!(matches!(output, CliOutput::Diagram { .. }));
    Ok(())
}

#[test]
fn export_debug_entry_returns_all_formats() -> Result<(), Box<dyn std::error::Error>> {
    let api = CliApi::new(ManifestOnlyBackend);
    let graph = BuildGraph::from_request(&BuildRequest {
        snapshot: SampleSnapshotFactory::create()?,
        profile: BuildProfile::markdown_export(),
        theme: KdvThemeSnapshot::katana_light(),
    });
    let output = api.handle(CliRequest::ExportDebug(CliExportDebugRequest {
        graph,
        formats: vec![ExportFormat::Html, ExportFormat::Pdf],
        theme_mode: None,
    }))?;

    let output_count = match output {
        CliOutput::ExportDebug { outputs, .. } => outputs.len(),
        _ => 0,
    };
    assert_eq!(output_count, 2);
    Ok(())
}