diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-11 16:13:17 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-11 16:13:17 +0300 |
| commit | 55cdf2e8f8af2dd3feebb4bb7d44c9cb7e23b384 (patch) | |
| tree | 91feb43a39812d63e19fc5068f95dbe0c896e118 /tests/cli_wrapper.rs | |
| parent | e201a647635905a5141bfce335619b0e232b396d (diff) | |
fix: stabilize integration agent state reports
Diffstat (limited to 'tests/cli_wrapper.rs')
| -rw-r--r-- | tests/cli_wrapper.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/cli_wrapper.rs b/tests/cli_wrapper.rs index de0d141f..473a6934 100644 --- a/tests/cli_wrapper.rs +++ b/tests/cli_wrapper.rs @@ -454,6 +454,7 @@ fn claude_hook_reports_subagent_working_and_blocked() { run_claude_hook("working", subagent_input).expect("subagent working should report working"); assert_eq!(working["method"], "pane.report_agent"); assert_eq!(working["params"]["state"], "working"); + assert!(working["params"]["seq"].as_u64().is_some()); let blocked = run_claude_hook("blocked", subagent_input).expect("subagent blocked should report blocked"); @@ -833,6 +834,17 @@ fn integration_commands_run_locally_when_server_is_missing() { "integration install should write local files without a server" ); + let integration_status = Command::new(env!("CARGO_BIN_EXE_herdr")) + .args(["integration", "status"]) + .env("HERDR_SOCKET_PATH", &missing_socket) + .env("HOME", &home_dir) + .output() + .unwrap(); + assert_eq!(integration_status.status.code(), Some(0)); + let status_stdout = String::from_utf8_lossy(&integration_status.stdout); + assert!(status_stdout.contains("pi: current (v1)")); + assert!(status_stdout.contains("claude: not installed")); + let integration_uninstall = Command::new(env!("CARGO_BIN_EXE_herdr")) .args(["integration", "uninstall", "pi"]) .env("HERDR_SOCKET_PATH", &missing_socket) @@ -849,6 +861,61 @@ fn integration_commands_run_locally_when_server_is_missing() { } #[test] +fn integration_status_outdated_only_prints_action_for_legacy_install() { + let base = unique_test_dir(); + let home_dir = base.join("home"); + let extensions_dir = home_dir.join(".pi/agent/extensions"); + fs::create_dir_all(&extensions_dir).unwrap(); + fs::write( + extensions_dir.join("herdr-agent-state.ts"), + "// legacy herdr integration\n", + ) + .unwrap(); + + let runtime_dir = base.join("runtime"); + fs::create_dir_all(&runtime_dir).unwrap(); + register_runtime_dir(&runtime_dir); + let missing_socket = runtime_dir.join("missing.sock"); + + let output = Command::new(env!("CARGO_BIN_EXE_herdr")) + .args(["integration", "status", "--outdated-only"]) + .env("HERDR_SOCKET_PATH", &missing_socket) + .env("HOME", &home_dir) + .output() + .unwrap(); + + assert_eq!(output.status.code(), Some(0)); + assert!(output.stdout.is_empty()); + let stderr = String::from_utf8_lossy(&output.stderr); + assert!(stderr.contains("installed herdr integrations need updating")); + assert!(stderr.contains("herdr integration install pi")); + + cleanup_test_base(&base); +} + +#[test] +fn integration_status_rejects_unknown_flags() { + let base = unique_test_dir(); + let home_dir = base.join("home"); + fs::create_dir_all(&home_dir).unwrap(); + let runtime_dir = base.join("runtime"); + fs::create_dir_all(&runtime_dir).unwrap(); + register_runtime_dir(&runtime_dir); + let missing_socket = runtime_dir.join("missing.sock"); + + let output = Command::new(env!("CARGO_BIN_EXE_herdr")) + .args(["integration", "status", "--wat"]) + .env("HERDR_SOCKET_PATH", &missing_socket) + .env("HOME", &home_dir) + .output() + .unwrap(); + + assert_eq!(output.status.code(), Some(2)); + + cleanup_test_base(&base); +} + +#[test] fn status_commands_report_client_and_server_versions() { let base = unique_test_dir(); let config_home = base.join("config"); |
