lenso-module-management 0.1.5

Shared management kernel for Lenso Module lifecycle clients.
Documentation
use lenso_module_management::*;
use std::fs;

fn temp_root(name: &str) -> std::path::PathBuf {
    let root = std::env::temp_dir().join(format!(
        "lenso-management-snapshot-{name}-{}-{}",
        std::process::id(),
        chrono::Utc::now().timestamp_nanos_opt().unwrap()
    ));
    fs::create_dir_all(&root).unwrap();
    root
}

#[test]
fn missing_planning_context_is_an_explicit_unconfigured_snapshot() {
    let root = temp_root("unconfigured");
    let snapshot = WorkspaceModuleManagement::new(&root).snapshot().unwrap();

    assert_eq!(snapshot.protocol, MODULE_MANAGEMENT_SNAPSHOT_PROTOCOL);
    assert_eq!(
        snapshot.status,
        ModuleManagementSnapshotStatus::Unconfigured
    );
    assert!(!snapshot.planning_available);
    assert!(snapshot.issues.is_empty());
    fs::remove_dir_all(root).unwrap();
}

#[test]
fn malformed_target_owned_contract_is_reported_without_guessing_state() {
    let root = temp_root("invalid");
    fs::write(root.join("lenso.modules.json"), b"{not-json").unwrap();
    let snapshot = WorkspaceModuleManagement::new(&root).snapshot().unwrap();

    assert_eq!(snapshot.status, ModuleManagementSnapshotStatus::Invalid);
    assert_eq!(snapshot.issues, vec!["desired_composition_invalid"]);
    assert!(snapshot.desired.is_none());
    fs::remove_dir_all(root).unwrap();
}