Files
my-pal-mcp-server/tests/test_clink_claude_parser.py
Fahad 9ffca53ce5 feat! Claude Code as a CLI agent now supported. Mix and match: spawn claude code from within claude code, or claude code from within codex.
Stay in codex, plan review and fix complicated bugs, then ask it to spawn claude code and implement the plan.

This uses your current subscription instead of API tokens.
2025-10-08 11:14:22 +04:00

46 lines
1.4 KiB
Python

"""Tests for the Claude CLI JSON parser."""
import pytest
from clink.parsers.base import ParserError
from clink.parsers.claude import ClaudeJSONParser
def _build_success_payload() -> str:
return (
'{"type":"result","subtype":"success","is_error":false,"duration_ms":1234,'
'"duration_api_ms":1200,"num_turns":1,"result":"42","session_id":"abc","total_cost_usd":0.12,'
'"usage":{"input_tokens":10,"output_tokens":5},'
'"modelUsage":{"claude-sonnet-4-5-20250929":{"inputTokens":10,"outputTokens":5}}}'
)
def test_claude_parser_extracts_result_and_metadata():
parser = ClaudeJSONParser()
stdout = _build_success_payload()
parsed = parser.parse(stdout=stdout, stderr="")
assert parsed.content == "42"
assert parsed.metadata["model_used"] == "claude-sonnet-4-5-20250929"
assert parsed.metadata["usage"]["output_tokens"] == 5
assert parsed.metadata["is_error"] is False
def test_claude_parser_falls_back_to_message():
parser = ClaudeJSONParser()
stdout = '{"type":"result","is_error":true,"message":"API error message"}'
parsed = parser.parse(stdout=stdout, stderr="warning")
assert parsed.content == "API error message"
assert parsed.metadata["is_error"] is True
assert parsed.metadata["stderr"] == "warning"
def test_claude_parser_requires_output():
parser = ClaudeJSONParser()
with pytest.raises(ParserError):
parser.parse(stdout="", stderr="")