from __future__ import annotations import pytest from personal_mcp.registry.models.prompt import PromptArgumentEntry from personal_mcp.registry.models.registry import PromptRecord from personal_mcp.registry.models.registry import PromptSummaryPayload from personal_mcp.registry.models.registry import ReferenceRecord from personal_mcp.registry.models.registry import SkillPatternPayload from personal_mcp.registry.models.registry import SkillRecord from personal_mcp.registry.models.registry import SkillSummaryPayload pytestmark = pytest.mark.unit def _make_skill_record() -> SkillRecord: return SkillRecord( skill_id="demo-skill", name="demo-skill", description="demo skill", version="1.2.3", tags=("testing", "catalog"), capabilities=("resource://skills/demo-skill/document", "resource://catalog/skills_index"), document_uri="resource://skills/demo-skill/document", document_relpath="skills/demo-skill/SKILL.md", document_content="# demo", references={ "zeta": ReferenceRecord( ref_id="zeta", uri="resource://skills/demo-skill/references/zeta", relpath="skills/demo-skill/references/zeta.md", mime_type="text/markdown", title="Zeta", content="# zeta", ), "alpha": ReferenceRecord( ref_id="alpha", uri="resource://skills/demo-skill/references/alpha", relpath="skills/demo-skill/references/alpha.md", mime_type="text/markdown", title="Alpha", content="# alpha", ), }, ) def _make_prompt_record() -> PromptRecord: return PromptRecord( prompt_id="demo-prompt", name="demo-prompt", description="demo prompt", version="0.9.0", tags=("testing",), capabilities=("resource://prompts/demo-prompt/document",), arguments={ "topic": PromptArgumentEntry( title="Topic", required=True, description="topic to discuss", ) }, document_uri="resource://prompts/demo-prompt/document", document_relpath="prompts/demo-prompt/PROMPT.md", document_content="# demo", ) def test_skill_pattern_payload_from_record_shape() -> None: record = _make_skill_record() payload = SkillPatternPayload.from_record(record).model_dump() assert payload == { "id": "demo-skill", "name": "demo-skill", "version": "1.2.3", "description": "demo skill", "tags": ["testing", "catalog"], "capabilities": ["resource://skills/demo-skill/document", "resource://catalog/skills_index"], "resources": ["resource://skills/demo-skill/document", "resource://catalog/skills_index"], } def test_skill_summary_payload_from_record_shape() -> None: record = _make_skill_record() payload = SkillSummaryPayload.from_record(record).model_dump() assert payload == { "id": "demo-skill", "name": "demo-skill", "description": "demo skill", "tags": ["testing", "catalog"], "capabilities": ["resource://skills/demo-skill/document", "resource://catalog/skills_index"], "version": "1.2.3", "document_uri": "resource://skills/demo-skill/document", "detail_uri": "resource://catalog/skills/demo-skill", "resources": { "document": "resource://skills/demo-skill/document", "references": [ "resource://skills/demo-skill/references/alpha", "resource://skills/demo-skill/references/zeta", ], }, } def test_prompt_summary_payload_from_record_shape() -> None: record = _make_prompt_record() payload = PromptSummaryPayload.from_record(record).model_dump() assert payload == { "id": "demo-prompt", "name": "demo-prompt", "description": "demo prompt", "tags": ["testing"], "capabilities": ["resource://prompts/demo-prompt/document"], "version": "0.9.0", "document_uri": "resource://prompts/demo-prompt/document", "detail_uri": "resource://catalog/prompts/demo-prompt", }