Files
hermes-agent/tests/test_skill_manager_error_context.py
Hermes Agent ff2ce95ade
Some checks failed
Tests / e2e (pull_request) Successful in 1m39s
Tests / test (pull_request) Failing after 1h7m45s
Docker Build and Publish / build-and-push (pull_request) Has been skipped
Contributor Attribution Check / check-attribution (pull_request) Successful in 24s
Supply Chain Audit / Scan PR for supply chain risks (pull_request) Successful in 28s
feat(research): Allegro worker deliverables — fleet research reports + skill manager test
Research reports:
- Vector DB research
- Workflow orchestration research
- Fleet knowledge graph SOTA research
- LLM inference optimization
- Local model crisis quality
- Memory systems SOTA
- Multi-agent coordination
- R5 vs E2E gap analysis
- Text-to-music-video

Test:
- test_skill_manager_error_context.py

[Allegro] Forge workers — 2026-04-16
2026-04-16 15:04:28 +00:00

112 lines
4.1 KiB
Python

"""
Tests for improved error messages in skill_manager_tool (issue #624).
Verifies that error messages include file paths, context, and suggestions.
"""
import pytest
from pathlib import Path
from unittest.mock import patch, MagicMock
from tools.skill_manager_tool import _format_error, _edit_skill, _patch_skill
class TestFormatError:
"""Test the _format_error helper function."""
def test_basic_error(self):
"""Test basic error formatting."""
result = _format_error("Something went wrong")
assert result["success"] is False
assert "Something went wrong" in result["error"]
assert result["skill_name"] is None
assert result["file_path"] is None
def test_with_skill_name(self):
"""Test error with skill name."""
result = _format_error("Failed", skill_name="test-skill")
assert "test-skill" in result["error"]
assert result["skill_name"] == "test-skill"
def test_with_file_path(self):
"""Test error with file path."""
result = _format_error("Failed", file_path="/path/to/SKILL.md")
assert "/path/to/SKILL.md" in result["error"]
assert result["file_path"] == "/path/to/SKILL.md"
def test_with_suggestion(self):
"""Test error with suggestion."""
result = _format_error("Failed", suggestion="Try again")
assert "Suggestion: Try again" in result["error"]
assert result["suggestion"] == "Try again"
def test_with_context(self):
"""Test error with context dict."""
result = _format_error("Failed", context={"line": 5, "found": "x"})
assert "line: 5" in result["error"]
assert "found: x" in result["error"]
def test_all_fields(self):
"""Test error with all fields."""
result = _format_error(
"Pattern match failed",
skill_name="my-skill",
file_path="/skills/my-skill/SKILL.md",
suggestion="Check whitespace",
context={"expected": "foo", "found": "bar"}
)
assert "Pattern match failed" in result["error"]
assert "Skill: my-skill" in result["error"]
assert "File: /skills/my-skill/SKILL.md" in result["error"]
assert "Suggestion: Check whitespace" in result["error"]
assert "expected: foo" in result["error"]
class TestEditSkillErrors:
"""Test improved error messages in _edit_skill."""
@patch('tools.skill_manager_tool._find_skill')
def test_skill_not_found(self, mock_find):
"""Test skill not found error includes suggestion."""
mock_find.return_value = None
# Provide valid content with frontmatter so it passes validation
valid_content = """---
name: test
description: Test skill
---
Body content here.
"""
result = _edit_skill("nonexistent", valid_content)
assert result["success"] is False
assert "nonexistent" in result["error"]
assert "skills_list()" in result.get("suggestion", "")
class TestPatchSkillErrors:
"""Test improved error messages in _patch_skill."""
def test_old_string_required(self):
"""Test old_string required error includes suggestion."""
result = _patch_skill("test-skill", None, "new")
assert result["success"] is False
assert "old_string is required" in result["error"]
assert "suggestion" in result
def test_new_string_required(self):
"""Test new_string required error includes suggestion."""
result = _patch_skill("test-skill", "old", None)
assert result["success"] is False
assert "new_string is required" in result["error"]
assert "suggestion" in result
@patch('tools.skill_manager_tool._find_skill')
def test_skill_not_found(self, mock_find):
"""Test skill not found error includes suggestion."""
mock_find.return_value = None
result = _patch_skill("nonexistent", "old", "new")
assert result["success"] is False
assert "nonexistent" in result["error"]
assert "skills_list()" in result.get("suggestion", "")
if __name__ == "__main__":
pytest.main([__file__, "-v"])