mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-04-28 11:30:03 +00:00
91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from messaging.rendering.telegram_markdown import (
|
|
escape_md_v2,
|
|
escape_md_v2_code,
|
|
mdv2_bold,
|
|
mdv2_code_inline,
|
|
render_markdown_to_mdv2,
|
|
)
|
|
from messaging.transcript import RenderCtx, TranscriptBuffer
|
|
|
|
|
|
@pytest.fixture
|
|
def handler():
|
|
platform = MagicMock()
|
|
cli = MagicMock()
|
|
store = MagicMock()
|
|
return (platform, cli, store)
|
|
|
|
|
|
def _ctx() -> RenderCtx:
|
|
return RenderCtx(
|
|
bold=mdv2_bold,
|
|
code_inline=mdv2_code_inline,
|
|
escape_code=escape_md_v2_code,
|
|
escape_text=escape_md_v2,
|
|
render_markdown=render_markdown_to_mdv2,
|
|
)
|
|
|
|
|
|
def test_truncation_closes_code_blocks(handler):
|
|
"""Verify that truncation correctly closes open code blocks."""
|
|
t = TranscriptBuffer()
|
|
t.apply(
|
|
{
|
|
"type": "thinking_chunk",
|
|
"text": "Starting some long thinking process that will definitely cause truncation later on...",
|
|
}
|
|
)
|
|
t.apply(
|
|
{
|
|
"type": "text_chunk",
|
|
"text": "```python\ndef very_long_function():\n # " + ("A" * 4000),
|
|
}
|
|
)
|
|
|
|
msg = t.render(_ctx(), limit_chars=3900, status="✅ *Complete*")
|
|
|
|
# The backtick count must be even to be a valid block.
|
|
assert msg.count("```") % 2 == 0
|
|
assert msg.endswith("```") or "✅ *Complete*" in msg.split("```")[-1]
|
|
|
|
|
|
def test_truncation_preserves_status(handler):
|
|
"""Verify that status is still appended after truncation."""
|
|
status = "READY_STATUS"
|
|
t = TranscriptBuffer()
|
|
t.apply({"type": "thinking_chunk", "text": "Thinking..."})
|
|
t.apply({"type": "text_chunk", "text": "A" * 5000})
|
|
msg = t.render(_ctx(), limit_chars=3900, status=status)
|
|
|
|
assert status in msg
|
|
|
|
|
|
def test_empty_components_with_status(handler):
|
|
"""Verify message building with just a status."""
|
|
status = "Simple Status"
|
|
t = TranscriptBuffer()
|
|
msg = t.render(_ctx(), limit_chars=3900, status=status)
|
|
assert msg == "\n\nSimple Status"
|
|
|
|
|
|
def test_render_markdown_unclosed_markdown():
|
|
"""Malformed markdown (e.g. unclosed *) does not crash and produces acceptable output."""
|
|
from messaging.rendering.telegram_markdown import render_markdown_to_mdv2
|
|
|
|
md = "*bold without close"
|
|
out = render_markdown_to_mdv2(md)
|
|
assert out is not None
|
|
assert "bold" in out
|
|
|
|
|
|
def test_escape_md_v2_unicode_emoji():
|
|
"""Unicode and emoji pass through correctly (no special char escaping needed)."""
|
|
from messaging.rendering.telegram_markdown import escape_md_v2, escape_md_v2_code
|
|
|
|
text = "Hello 世界 🎉 café"
|
|
assert escape_md_v2(text) == text
|
|
assert escape_md_v2_code(text) == text
|