appcore-core 1.0.1-rc.8

Core runtime contracts and primitives for AppCore-Runtime.
Documentation
// =============================================================================
//        #######
//     ###       ###     F: command_tests.rs
//    ##   ## ##   ##    P: AppCore-Runtime
//         ## ##
//                       C: 2026/06/04 11:51:29 by dnettoRaw
//    ##   ## ##   ##    U: 2026/06/04 11:51:29 by dnettoRaw
//      ###########      S: 0.6.0
// =============================================================================

use super::CommandRegistry;
use crate::ids::CommandName;

#[test]
fn register_command() {
    let mut registry = CommandRegistry::new();
    let name = CommandName::new("runtime.start".to_string()).unwrap();

    let result = registry.register(name.clone());

    assert!(result.is_ok());
    assert!(registry.contains(&name));
    assert_eq!(registry.len(), 1);
    assert!(!registry.is_empty());
}

#[test]
fn reject_duplicate_command() {
    let mut registry = CommandRegistry::new();
    let name = CommandName::new("runtime.start".to_string()).unwrap();

    let first = registry.register(name.clone());
    let second = registry.register(name);

    assert!(first.is_ok());
    assert!(second.is_err());
    assert_eq!(registry.len(), 1);
}

#[test]
fn list_preserves_registration_order() {
    let mut registry = CommandRegistry::new();
    let first = CommandName::new("runtime.start".to_string()).unwrap();
    let second = CommandName::new("runtime.shutdown".to_string()).unwrap();

    assert!(registry.register(first.clone()).is_ok());
    assert!(registry.register(second.clone()).is_ok());

    assert_eq!(registry.list(), &[first, second]);
}