forjar 1.4.1

Rust-native Infrastructure as Code — bare-metal first, BLAKE3 state, provenance tracing
Documentation
use super::tests_helpers::make_base_resource;
use super::*;

#[test]
fn test_fj004_describe_action() {
    let mut r = make_base_resource(ResourceType::Package);
    r.provider = Some("apt".to_string());
    r.packages = vec!["curl".to_string(), "wget".to_string()];
    let desc = describe_action("test-pkg", &r, &PlanAction::Create);
    assert!(desc.contains("curl, wget"));
}

#[test]
fn test_fj004_describe_action_file() {
    let mut r = make_base_resource(ResourceType::File);
    r.path = Some("/etc/conf".to_string());
    assert!(describe_action("f", &r, &PlanAction::Create).contains("/etc/conf"));
    assert!(describe_action("f", &r, &PlanAction::Update).contains("update"));
    assert!(describe_action("f", &r, &PlanAction::Destroy).contains("destroy"));
    assert!(describe_action("f", &r, &PlanAction::NoOp).contains("no changes"));
}

#[test]
fn test_fj004_describe_action_service() {
    let mut r = make_base_resource(ResourceType::Service);
    r.name = Some("nginx".to_string());
    let desc = describe_action("svc", &r, &PlanAction::Create);
    assert!(
        desc.contains("start nginx"),
        "default state should say 'start', got: {desc}"
    );
}

#[test]
fn test_fj004_describe_action_service_stopped() {
    let mut r = make_base_resource(ResourceType::Service);
    r.name = Some("nginx".to_string());
    r.state = Some("stopped".to_string());
    let desc = describe_action("svc", &r, &PlanAction::Create);
    assert!(
        desc.contains("stop nginx"),
        "state=stopped should say 'stop', got: {desc}"
    );
}

#[test]
fn test_fj004_describe_action_mount() {
    let mut r = make_base_resource(ResourceType::Mount);
    r.path = Some("/mnt/data".to_string());
    assert!(describe_action("mnt", &r, &PlanAction::Create).contains("/mnt/data"));
}

#[test]
fn test_fj004_describe_action_file_no_path() {
    let r = make_base_resource(ResourceType::File);
    let desc = describe_action("f", &r, &PlanAction::Create);
    assert!(desc.contains("?"), "missing path should show ?");
}

#[test]
fn test_fj004_describe_action_service_no_name() {
    let r = make_base_resource(ResourceType::Service);
    let desc = describe_action("svc", &r, &PlanAction::Create);
    assert!(desc.contains("?"), "missing name should show ?");
}

#[test]
fn test_fj004_describe_action_docker_type() {
    let r = make_base_resource(ResourceType::Docker);
    let desc = describe_action("dock", &r, &PlanAction::Create);
    assert!(desc.contains("create"), "Docker create should say create");
}

#[test]
fn test_fj132_describe_action_user_type() {
    let r = make_base_resource(ResourceType::User);
    let desc = describe_action("myuser", &r, &PlanAction::Create);
    assert_eq!(desc, "myuser: create");
}

#[test]
fn test_fj132_describe_action_cron_type() {
    let r = make_base_resource(ResourceType::Cron);
    let desc = describe_action("backup-job", &r, &PlanAction::Create);
    assert_eq!(desc, "backup-job: create");
}

#[test]
fn test_fj132_describe_action_network_type() {
    let r = make_base_resource(ResourceType::Network);
    let desc = describe_action("fw-rule", &r, &PlanAction::Create);
    assert_eq!(desc, "fw-rule: create");
}