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