forjar 1.4.2

Rust-native Infrastructure as Code — bare-metal first, BLAKE3 state, provenance tracing
Documentation
//! Tests: FJ-1434 preservation checking.

#![allow(unused_imports)]
use super::preservation_check::*;
use std::path::Path;

#[cfg(test)]
mod tests {
    use super::*;

    fn write_config(dir: &Path, yaml: &str) -> std::path::PathBuf {
        let p = dir.join("forjar.yaml");
        std::fs::write(&p, yaml).unwrap();
        p
    }

    #[test]
    fn test_preservation_no_conflict() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  a:
    type: file
    machine: local
    path: /tmp/a
    content: "a"
  b:
    type: file
    machine: local
    path: /tmp/b
    content: "b"
"#);
        let result = cmd_preservation(&p, true);
        assert!(result.is_ok());
    }

    #[test]
    fn test_preservation_path_conflict() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  a:
    type: file
    machine: local
    path: /tmp/same
    content: "version-a"
  b:
    type: file
    machine: local
    path: /tmp/same
    content: "version-b"
"#);
        let result = cmd_preservation(&p, true);
        assert!(result.is_err());
    }

    #[test]
    fn test_preservation_single_resource() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  only:
    type: package
    machine: local
    provider: apt
    packages: [curl]
"#);
        let result = cmd_preservation(&p, false);
        assert!(result.is_ok());
    }

    #[test]
    fn test_preservation_pair_serde() {
        let pair = PreservationPair {
            resource_a: "a".to_string(),
            resource_b: "b".to_string(),
            preserved: true,
            reason: "ok".to_string(),
        };
        let json = serde_json::to_string(&pair).unwrap();
        assert!(json.contains("\"preserved\":true"));
    }

    #[test]
    fn test_preservation_service_name_conflict() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  web-a:
    type: service
    machine: local
    name: nginx
  web-b:
    type: service
    machine: local
    name: nginx
"#);
        let result = cmd_preservation(&p, false);
        assert!(result.is_err());
    }

    #[test]
    fn test_preservation_json_output() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  a:
    type: file
    machine: local
    path: /tmp/a
  b:
    type: file
    machine: local
    path: /tmp/b
  c:
    type: package
    machine: local
    provider: apt
    packages: [curl]
"#);
        let result = cmd_preservation(&p, true);
        assert!(result.is_ok());
    }

    #[test]
    fn test_preservation_text_with_conflict() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  a:
    type: file
    machine: local
    path: /tmp/x
  b:
    type: file
    machine: local
    path: /tmp/x
"#);
        let result = cmd_preservation(&p, false);
        assert!(result.is_err());
    }

    #[test]
    fn test_preservation_package_conflict() {
        let dir = tempfile::tempdir().unwrap();
        let p = write_config(dir.path(), r#"
version: "1.0"
name: test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  a:
    type: package
    machine: local
    provider: apt
    packages: [curl, wget]
  b:
    type: package
    machine: local
    provider: apt
    packages: [curl, vim]
"#);
        let result = cmd_preservation(&p, true);
        assert!(result.is_err());
    }
}