Skip to main content

kmp_application/queries/
bundle_assembler.rs

1use std::collections::BTreeMap;
2
3use kmp_domain::{BundleMetadata, BundleNode, CaseId, KmpBundle, Role};
4
5use crate::ApplicationError;
6
7pub struct BundleAssembler;
8
9impl BundleAssembler {
10    pub fn placeholder(
11        root_node_id: &str,
12        role: &str,
13        generator_version: &str,
14    ) -> Result<KmpBundle, ApplicationError> {
15        let root_node_id = CaseId::new(root_node_id)?;
16        let role = Role::new(role)?;
17        let summary = format!(
18            "bundle for node {} role {}",
19            root_node_id.as_str(),
20            role.as_str()
21        );
22
23        KmpBundle::new(
24            root_node_id.clone(),
25            role,
26            BundleNode::new(
27                root_node_id.as_str(),
28                "placeholder",
29                format!("Node {}", root_node_id.as_str()),
30                summary,
31                "UNKNOWN",
32                vec!["placeholder".to_string()],
33                BTreeMap::new(),
34            ),
35            Vec::new(),
36            Vec::new(),
37            Vec::new(),
38            BundleMetadata::initial(generator_version),
39        )
40        .map_err(Into::into)
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::BundleAssembler;
47
48    #[test]
49    fn placeholder_builds_graph_native_bundle() {
50        let bundle = BundleAssembler::placeholder("case-123", "developer", "0.1.0")
51            .expect("placeholder bundle should build");
52
53        assert_eq!(bundle.root_node_id().as_str(), "case-123");
54        assert_eq!(bundle.root_node().node_kind(), "placeholder");
55        assert_eq!(bundle.stats().selected_nodes(), 1);
56    }
57}