Skip to main content

chartml_core/plugin/
mod.rs

1pub mod data_source;
2pub mod transform;
3pub mod renderer;
4pub mod resolver;
5
6pub use data_source::{DataSource, DataSpec, FetchOptions};
7pub use transform::{TransformMiddleware, TransformContext, TransformResult};
8pub use renderer::{ChartRenderer, ChartConfig};
9pub use resolver::{DatasourceResolver, ConnectionConfig};
10
11
12#[cfg(test)]
13mod tests {
14    #![allow(clippy::unwrap_used)]
15    use super::*;
16    use std::collections::HashMap;
17
18    #[test]
19    fn test_data_spec_creation() {
20        let spec = DataSpec {
21            provider: "inline".to_string(),
22            rows: Some(vec![serde_json::json!({"x": 1})]),
23            url: None,
24            endpoint: None,
25        };
26        assert_eq!(spec.provider, "inline");
27        assert!(spec.rows.is_some());
28        assert_eq!(spec.rows.unwrap().len(), 1);
29        assert!(spec.url.is_none());
30        assert!(spec.endpoint.is_none());
31    }
32
33    #[test]
34    fn test_chart_config_creation() {
35        use crate::spec::VisualizeSpec;
36
37        let visualize: VisualizeSpec = serde_yaml::from_str(
38            r#"
39            type: bar
40            columns: month
41            rows: revenue
42            "#,
43        )
44        .unwrap();
45
46        let config = ChartConfig {
47            visualize,
48            title: Some("Test Chart".to_string()),
49            width: 800.0,
50            height: 600.0,
51            colors: vec!["#ff0000".to_string(), "#00ff00".to_string()],
52            theme: crate::theme::Theme::default(),
53        };
54        assert_eq!(config.title, Some("Test Chart".to_string()));
55        assert_eq!(config.width, 800.0);
56        assert_eq!(config.height, 600.0);
57        assert_eq!(config.colors.len(), 2);
58    }
59
60    #[test]
61    fn test_transform_result_creation() {
62        use crate::data::DataTable;
63
64        let mut metadata = HashMap::new();
65        metadata.insert("row_count".to_string(), serde_json::json!(5));
66
67        let result = TransformResult {
68            data: DataTable::from_rows(&[]).unwrap(),
69            metadata,
70        };
71        assert!(result.data.is_empty());
72        assert_eq!(result.metadata.len(), 1);
73        assert_eq!(result.metadata["row_count"], serde_json::json!(5));
74    }
75
76    #[test]
77    fn test_fetch_options_default() {
78        let options = FetchOptions::default();
79        assert!(options.cache_ttl.is_none());
80    }
81}