chartml_core/plugin/
mod.rs1pub 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 theme: crate::theme::Theme::default(),
52 };
53 assert_eq!(config.title, Some("Test Chart".to_string()));
54 assert_eq!(config.width, 800.0);
55 assert_eq!(config.height, 600.0);
56 assert_eq!(config.colors.len(), 2);
57 }
58
59 #[test]
60 fn test_transform_result_creation() {
61 use crate::data::DataTable;
62
63 let mut metadata = HashMap::new();
64 metadata.insert("row_count".to_string(), serde_json::json!(5));
65
66 let result = TransformResult {
67 data: DataTable::from_rows(&[]).unwrap(),
68 metadata,
69 };
70 assert!(result.data.is_empty());
71 assert_eq!(result.metadata.len(), 1);
72 assert_eq!(result.metadata["row_count"], serde_json::json!(5));
73 }
74
75 #[test]
76 fn test_fetch_options_default() {
77 let options = FetchOptions::default();
78 assert!(options.cache_ttl.is_none());
79 }
80}