ralph-agent-loop 0.3.0

A Rust CLI for managing AI agent loops with a structured JSON task queue
Documentation
//! Init command tests.

use super::*;

#[test]
fn init_creates_agents_md() -> Result<()> {
    let dir = TempDir::new()?;
    let resolved = create_test_resolved(&dir);
    fs::create_dir_all(resolved.repo_root.join("src"))?;

    let output_path = resolved.repo_root.join("AGENTS.md");
    let report = run_context_init(
        &resolved,
        ContextInitOptions {
            force: false,
            project_type_hint: None,
            output_path: output_path.clone(),
            interactive: false,
        },
    )?;

    assert_eq!(report.status, FileInitStatus::Created);
    assert!(output_path.exists());

    let content = fs::read_to_string(&output_path)?;
    assert!(content.contains("# Repository Guidelines"));
    assert!(content.contains("Non-Negotiables"));
    assert!(content.contains("Repository Map"));

    Ok(())
}

#[test]
fn init_skips_existing_without_force() -> Result<()> {
    let dir = TempDir::new()?;
    let resolved = create_test_resolved(&dir);

    let output_path = resolved.repo_root.join("AGENTS.md");
    fs::write(&output_path, "existing content")?;

    let report = run_context_init(
        &resolved,
        ContextInitOptions {
            force: false,
            project_type_hint: None,
            output_path: output_path.clone(),
            interactive: false,
        },
    )?;

    assert_eq!(report.status, FileInitStatus::Valid);
    let content = fs::read_to_string(&output_path)?;
    assert_eq!(content, "existing content");

    Ok(())
}

#[test]
fn init_overwrites_with_force() -> Result<()> {
    let dir = TempDir::new()?;
    let resolved = create_test_resolved(&dir);

    let output_path = resolved.repo_root.join("AGENTS.md");
    fs::write(&output_path, "existing content")?;

    let report = run_context_init(
        &resolved,
        ContextInitOptions {
            force: true,
            project_type_hint: None,
            output_path: output_path.clone(),
            interactive: false,
        },
    )?;

    assert_eq!(report.status, FileInitStatus::Created);
    let content = fs::read_to_string(&output_path)?;
    assert!(content.contains("# Repository Guidelines"));

    Ok(())
}