kittynode_core/application/
add_capability.rs

1use crate::infra::config::ConfigStore;
2use eyre::Result;
3
4/// Adds a capability to the config if it doesn't already exist.
5pub fn add_capability(capability: &str) -> Result<()> {
6    let mut config = ConfigStore::load()?;
7    add_to_capabilities(&mut config.capabilities, capability);
8    ConfigStore::save_normalized(&mut config)?;
9    Ok(())
10}
11
12/// Helper function to add a capability to the list, ensuring no duplicates.
13fn add_to_capabilities(capabilities: &mut Vec<String>, capability: &str) {
14    if !capabilities.contains(&capability.to_string()) {
15        capabilities.push(capability.to_string());
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn doesnt_add_duplicate() {
25        let mut capabilities = vec!["cap1".to_string(), "cap2".to_string()];
26        add_to_capabilities(&mut capabilities, "cap1");
27        assert_eq!(capabilities, vec!["cap1".to_string(), "cap2".to_string()]);
28    }
29
30    #[test]
31    fn adds_new_capability() {
32        let mut capabilities = vec!["cap1".to_string(), "cap2".to_string()];
33        add_to_capabilities(&mut capabilities, "cap3");
34        assert_eq!(
35            capabilities,
36            vec!["cap1".to_string(), "cap2".to_string(), "cap3".to_string()]
37        );
38    }
39}