KeiSeiKit-1.0/_primitives/_rust/kei-agent-runtime/tests/simulated_merge_smoke.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

65 lines
2.2 KiB
Rust

//! Simulated-merge smoke test — initialize a tempdir git repo, create a
//! feature branch with a file change, run the simulated-merge flow, assert
//! the temp worktree contains the agent's change on top of main.
use kei_agent_runtime::simulated_merge::{glob_match, run_simulated_merge};
use std::path::Path;
use std::process::Command;
use tempfile::TempDir;
fn sh(dir: &Path, args: &[&str]) {
let out = Command::new("git").args(args).current_dir(dir).output().unwrap();
assert!(
out.status.success(),
"git {}: {}",
args.join(" "),
String::from_utf8_lossy(&out.stderr)
);
}
#[test]
fn simulated_merge_applies_agent_diff() {
let tmp = TempDir::new().unwrap();
let repo = tmp.path();
sh(repo, &["init", "-q", "-b", "main"]);
sh(repo, &["config", "user.email", "t@t"]);
sh(repo, &["config", "user.name", "t"]);
std::fs::write(repo.join("README.md"), "seed\n").unwrap();
sh(repo, &["add", "."]);
sh(repo, &["commit", "-q", "-m", "seed"]);
// Agent makes a change on a feature branch
sh(repo, &["checkout", "-q", "-b", "agent/x"]);
std::fs::write(repo.join("new.txt"), "agent wrote this\n").unwrap();
sh(repo, &["add", "."]);
sh(repo, &["commit", "-q", "-m", "agent change"]);
let merged = run_simulated_merge("test123", repo, repo).expect("simulated merge");
let content = std::fs::read_to_string(merged.join("new.txt"))
.expect("agent diff applied in merged worktree");
assert_eq!(content, "agent wrote this\n");
// Cleanup
let _ = Command::new("git")
.args(["worktree", "remove", "--force", merged.to_str().unwrap()])
.current_dir(repo)
.output();
}
#[test]
fn glob_match_handles_double_star() {
assert!(glob_match("_primitives/_rust/kei-forge/**", "_primitives/_rust/kei-forge/src/lib.rs"));
assert!(!glob_match("_primitives/_rust/kei-forge/**", "hooks/foo.sh"));
}
#[test]
fn glob_match_single_star_path_component() {
assert!(glob_match("src/*.rs", "src/main.rs"));
assert!(!glob_match("src/*.rs", "src/mod/main.rs"));
}
#[test]
fn glob_match_exact_path() {
assert!(glob_match("Cargo.toml", "Cargo.toml"));
assert!(!glob_match("Cargo.toml", "src/Cargo.toml"));
}