git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
299 lines
6.2 KiB
Rust
299 lines
6.2 KiB
Rust
//! Unit tests for the hooks CLI commands
|
|
|
|
use assert_cmd::Command;
|
|
use predicates::prelude::*;
|
|
use std::fs;
|
|
use tempfile::TempDir;
|
|
|
|
/// Helper to get the ruvector binary command
|
|
fn ruvector_cmd() -> Command {
|
|
Command::cargo_bin("ruvector").unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_help() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("--help")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Self-learning intelligence hooks"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_stats() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("stats")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Q-learning patterns"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_session_start() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("session-start")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Intelligence Layer Active"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_session_end() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("session-end")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Session ended"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_pre_edit() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("pre-edit")
|
|
.arg("src/main.rs")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Intelligence Analysis"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_post_edit_success() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("post-edit")
|
|
.arg("--success")
|
|
.arg("src/lib.rs")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Learning recorded"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_pre_command() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("pre-command")
|
|
.arg("cargo build")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Command"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_post_command() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("post-command")
|
|
.arg("--success")
|
|
.arg("cargo")
|
|
.arg("test")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("recorded"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_remember() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("remember")
|
|
.arg("--memory-type")
|
|
.arg("test")
|
|
.arg("test content for memory")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("success"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_recall() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("recall")
|
|
.arg("test content")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_learn() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("learn")
|
|
.arg("test-state")
|
|
.arg("test-action")
|
|
.arg("--reward")
|
|
.arg("0.8")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("success"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_suggest() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("suggest")
|
|
.arg("edit-rs")
|
|
.arg("--actions")
|
|
.arg("coder,reviewer,tester")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("action"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_route() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("route")
|
|
.arg("implement feature")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("recommended"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_should_test() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("should-test")
|
|
.arg("src/lib.rs")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("cargo test"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_suggest_next() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("suggest-next")
|
|
.arg("src/main.rs")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_record_error() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("record-error")
|
|
.arg("cargo build")
|
|
.arg("error[E0308]: mismatched types")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("E0308"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_suggest_fix() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("suggest-fix")
|
|
.arg("E0308")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_register() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-register")
|
|
.arg("test-agent-1")
|
|
.arg("rust-developer")
|
|
.arg("--capabilities")
|
|
.arg("rust,testing")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("success"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_coordinate() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-coordinate")
|
|
.arg("agent-1")
|
|
.arg("agent-2")
|
|
.arg("--weight")
|
|
.arg("0.8")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("success"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_optimize() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-optimize")
|
|
.arg("task1,task2,task3")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("assignments"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_recommend() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-recommend")
|
|
.arg("rust development")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_heal() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-heal")
|
|
.arg("failed-agent")
|
|
.assert()
|
|
.success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_swarm_stats() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("swarm-stats")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("agents"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_pre_compact() {
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("pre-compact")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Pre-compact"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_init_creates_config() {
|
|
// Just test that init command runs successfully
|
|
// The actual config is created in ~/.ruvector/ not the current directory
|
|
ruvector_cmd().arg("hooks").arg("init").assert().success();
|
|
}
|
|
|
|
#[test]
|
|
fn test_hooks_install_runs() {
|
|
// Just test that install command runs successfully
|
|
ruvector_cmd()
|
|
.arg("hooks")
|
|
.arg("install")
|
|
.assert()
|
|
.success();
|
|
}
|