Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/tests/test_ai_skill_parser.py
2026-06-14 00:37:58 +00:00

50 lines
1.6 KiB
Python

"""Unit tests for AI skill parser (agentskills.io subset)."""
from __future__ import annotations
import io
import zipfile
import pytest
from app.services.ai.ai_skill_parser import (
compose_skill_md,
extract_skill_from_zip,
parse_skill_md,
validate_skill_slug,
)
def test_validate_skill_slug():
assert validate_skill_slug("debt-analysis") is None
assert validate_skill_slug("PDF") == "SKILL_SLUG_FORMAT_INVALID"
assert validate_skill_slug("-bad") == "SKILL_SLUG_FORMAT_INVALID"
def test_parse_skill_md_minimal():
md = compose_skill_md(
skill_slug="sales-report",
description="Weekly sales summary. Use when user asks about weekly sales.",
skill_body="## Steps\n1. Run get_sales_report",
allowed_tool_names=["get_sales_report"],
)
parsed = parse_skill_md(md)
assert parsed.skill_slug == "sales-report"
assert "weekly sales" in parsed.description.lower()
assert parsed.allowed_tool_names == ["get_sales_report"]
assert "get_sales_report" in parsed.skill_body
def test_extract_skill_from_zip():
buf = io.BytesIO()
skill_md = compose_skill_md(
skill_slug="zip-test",
description="Test zip import skill for unit tests.",
skill_body="# Hello",
)
with zipfile.ZipFile(buf, "w") as zf:
zf.writestr("zip-test/SKILL.md", skill_md)
zf.writestr("zip-test/references/extra.md", "more info")
parsed = extract_skill_from_zip(buf.getvalue())
assert parsed.skill_slug == "zip-test"
assert parsed.has_references
assert "references/extra.md" in parsed.bundle_files