diff --git a/tests/agent/test_skill_utils.py b/tests/agent/test_skill_utils.py new file mode 100644 index 0000000000..206cc5f4b1 --- /dev/null +++ b/tests/agent/test_skill_utils.py @@ -0,0 +1,58 @@ +"""Tests for agent/skill_utils.py — extract_skill_conditions metadata handling.""" + +from agent.skill_utils import extract_skill_conditions + + +def test_metadata_as_dict_with_hermes(): + """Normal case: metadata is a dict containing hermes keys.""" + frontmatter = { + "metadata": { + "hermes": { + "fallback_for_toolsets": ["toolset_a"], + "requires_toolsets": ["toolset_b"], + "fallback_for_tools": ["tool_x"], + "requires_tools": ["tool_y"], + } + } + } + result = extract_skill_conditions(frontmatter) + assert result["fallback_for_toolsets"] == ["toolset_a"] + assert result["requires_toolsets"] == ["toolset_b"] + assert result["fallback_for_tools"] == ["tool_x"] + assert result["requires_tools"] == ["tool_y"] + + +def test_metadata_as_string_does_not_crash(): + """Bug case: metadata is a non-dict truthy value (e.g. a YAML string).""" + frontmatter = {"metadata": "some text"} + result = extract_skill_conditions(frontmatter) + assert result == { + "fallback_for_toolsets": [], + "requires_toolsets": [], + "fallback_for_tools": [], + "requires_tools": [], + } + + +def test_metadata_as_none(): + """metadata key is present but set to null/None.""" + frontmatter = {"metadata": None} + result = extract_skill_conditions(frontmatter) + assert result == { + "fallback_for_toolsets": [], + "requires_toolsets": [], + "fallback_for_tools": [], + "requires_tools": [], + } + + +def test_metadata_missing_entirely(): + """metadata key is absent from frontmatter.""" + frontmatter = {"name": "my-skill", "description": "Does stuff."} + result = extract_skill_conditions(frontmatter) + assert result == { + "fallback_for_toolsets": [], + "requires_toolsets": [], + "fallback_for_tools": [], + "requires_tools": [], + }