From adaee2c72c3ec85129b6b1cac8c7c6e791dd94e5 Mon Sep 17 00:00:00 2001 From: sprmn24 Date: Mon, 27 Apr 2026 16:56:44 +0300 Subject: [PATCH] test(skill_utils): add regression tests for non-dict metadata in extract_skill_conditions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The fix for this bug (isinstance guard) was merged via commit 3ff9e010, but test coverage was not included. Adding 4 tests: - dict metadata with hermes keys (normal case) - string metadata (bug case — previously caused AttributeError) - None metadata - missing metadata key --- tests/agent/test_skill_utils.py | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/agent/test_skill_utils.py 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": [], + }