"""Unit tests for get_process MCP tool.
Tests the get_process tool implementation per mcp-tools.json contract.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pathlib import Path
class TestGetProcessImpl:
"""Tests for get_process_impl function (T009)."""
def test_get_process_impl_success(self, temp_dir: Path) -> None:
"""Test successful process retrieval."""
from sso_mcp_server.processes.service import ProcessService
from sso_mcp_server.tools.get_process import get_process_impl
(temp_dir / "code-review.md").write_text(
"""---
name: Code Review Process
description: Standard procedure for code reviews
---
# Code Review Process
## Steps
1. Create PR
2. Review
"""
)
service = ProcessService(temp_dir)
result = get_process_impl("code-review", service)
assert "error" not in result
assert result["name"] == "Code Review Process"
assert result["description"] == "Standard procedure for code reviews"
assert "# Code Review Process" in result["content"]
def test_get_process_impl_not_found(self, temp_dir: Path) -> None:
"""Test process not found returns error with available list (FR-015)."""
from sso_mcp_server.processes.service import ProcessService
from sso_mcp_server.tools.get_process import get_process_impl
(temp_dir / "existing.md").write_text(
"""---
name: Existing Process
---
Content.
"""
)
service = ProcessService(temp_dir)
result = get_process_impl("nonexistent", service)
assert result["error"] == "PROCESS_NOT_FOUND"
assert "nonexistent" in result["message"]
assert "available" in result
assert "Existing Process" in result["available"]
def test_get_process_impl_case_insensitive(self, temp_dir: Path) -> None:
"""Test case-insensitive process retrieval."""
from sso_mcp_server.processes.service import ProcessService
from sso_mcp_server.tools.get_process import get_process_impl
(temp_dir / "deployment.md").write_text(
"""---
name: Deployment Guide
---
Deploy content.
"""
)
service = ProcessService(temp_dir)
# Should work regardless of case
result = get_process_impl("DEPLOYMENT GUIDE", service)
assert "error" not in result
assert result["name"] == "Deployment Guide"
def test_get_process_impl_empty_directory(self, temp_dir: Path) -> None:
"""Test get_process with empty directory returns error."""
from sso_mcp_server.processes.service import ProcessService
from sso_mcp_server.tools.get_process import get_process_impl
empty_dir = temp_dir / "empty"
empty_dir.mkdir()
service = ProcessService(empty_dir)
result = get_process_impl("any", service)
assert result["error"] == "PROCESS_NOT_FOUND"
assert result["available"] == []