kmp_application/queries/
bundle_assembler.rs1use 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}