ralph_workflow/prompts/
template_context.rs1use super::template_registry::TemplateRegistry;
8use std::path::PathBuf;
9
10#[derive(Debug, Clone)]
26pub struct TemplateContext {
27 pub(crate) registry: TemplateRegistry,
29}
30
31impl TemplateContext {
32 #[must_use]
34 pub const fn new(registry: TemplateRegistry) -> Self {
35 Self { registry }
36 }
37
38 #[must_use]
43 pub const fn from_user_templates_dir(user_templates_dir: Option<PathBuf>) -> Self {
44 Self::new(TemplateRegistry::new(user_templates_dir))
45 }
46
47 #[must_use]
49 pub const fn registry(&self) -> &TemplateRegistry {
50 &self.registry
51 }
52}
53
54impl Default for TemplateContext {
55 fn default() -> Self {
56 Self::new(TemplateRegistry::default())
57 }
58}
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63
64 #[test]
65 fn test_template_context_creation() {
66 let context = TemplateContext::new(TemplateRegistry::new(None));
67 assert!(!context.registry().has_user_template("developer_iteration"));
69 }
70
71 #[test]
72 fn test_template_context_default() {
73 let context = TemplateContext::default();
74 assert!(context.registry().template_exists("developer_iteration"));
76 }
77
78 #[test]
79 fn test_template_context_from_user_templates_dir() {
80 let custom_dir = PathBuf::from("/custom/templates");
81 let context = TemplateContext::from_user_templates_dir(Some(custom_dir));
82 assert!(!context.registry().has_user_template("developer_iteration"));
84 }
85
86 #[test]
87 fn test_template_context_from_user_templates_dir_none() {
88 let context = TemplateContext::from_user_templates_dir(None);
89 assert!(!context.registry().has_user_template("developer_iteration"));
91 }
92
93 #[test]
94 fn test_template_context_registry_access() {
95 let context = TemplateContext::default();
96 let _registry = context.registry();
97 assert!(!TemplateRegistry::all_template_names().is_empty());
99 }
100
101 #[test]
102 fn test_template_context_clone() {
103 let context = TemplateContext::default();
104 let _cloned = context.clone();
105 assert!(context.registry().template_exists("developer_iteration"));
107 }
108
109 #[test]
110 fn test_template_context_get_template() {
111 let context = TemplateContext::default();
112 let result = context.registry().get_template("developer_iteration");
114 assert!(result.is_ok());
115 }
116
117 #[test]
118 fn test_template_context_template_source() {
119 let context = TemplateContext::default();
120 assert_eq!(
122 context.registry().template_source("developer_iteration"),
123 "embedded"
124 );
125 }
126
127 #[test]
128 fn test_template_context_all_templates() {
129 let _context = TemplateContext::default();
130 let names = TemplateRegistry::all_template_names();
132 assert!(names.len() > 10);
133 assert!(names.contains(&"developer_iteration".to_string()));
134 }
135
136 #[test]
137 fn test_template_context_all_templates_not_empty() {
138 let _context = TemplateContext::default();
139 let names = TemplateRegistry::all_template_names();
140 assert!(!names.is_empty());
141 }
142}