ralph-workflow 0.7.18

PROMPT-driven multi-agent orchestrator for git repos
Documentation
use super::super::common::TestFixture;
use crate::reducer::boundary::MainEffectHandler;
use crate::reducer::event::{CommitEvent, PipelineEvent};
use git2::Repository;
use std::fs;
use tempfile::tempdir;

#[test]
fn check_residual_files_reports_clean_working_tree() {
    let repo_dir = tempdir().expect("create repo tempdir");
    Repository::init(repo_dir.path()).expect("init repo");

    let mut fixture = TestFixture::new();
    fixture.repo_root = repo_dir.path().to_path_buf();
    let ctx = fixture.ctx();

    let result = MainEffectHandler::check_residual_files(&ctx, 1)
        .expect("check residual files should succeed");

    assert!(matches!(
        result.event,
        PipelineEvent::Commit(CommitEvent::ResidualFilesNone)
    ));
    assert!(
        result.additional_events.is_empty(),
        "no extra events expected"
    );
}

#[test]
fn check_residual_files_detects_untracked_files() {
    let repo_dir = tempdir().expect("create repo tempdir");
    Repository::init(repo_dir.path()).expect("init repo");
    let leftover = repo_dir.path().join("leftover.rs");
    fs::write(&leftover, "todo").expect("write leftover file");

    let mut fixture = TestFixture::new();
    fixture.repo_root = repo_dir.path().to_path_buf();
    let ctx = fixture.ctx();

    let result = MainEffectHandler::check_residual_files(&ctx, 2)
        .expect("check residual files should succeed");

    assert!(matches!(
        result.event,
        PipelineEvent::Commit(CommitEvent::ResidualFilesFound { files, pass })
            if pass == 2 && files == vec!["leftover.rs".to_string()]
    ));
}