mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-04-28 11:30:03 +00:00
229 lines
7.9 KiB
Python
229 lines
7.9 KiB
Python
"""Tests for api/optimization_handlers.py."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
from api.models.anthropic import ContentBlockText, Message, MessagesRequest
|
|
from api.optimization_handlers import (
|
|
try_filepath_mock,
|
|
try_optimizations,
|
|
try_prefix_detection,
|
|
try_quota_mock,
|
|
try_suggestion_skip,
|
|
try_title_skip,
|
|
)
|
|
from config.settings import Settings
|
|
|
|
|
|
def _make_request(
|
|
messages_content: str, max_tokens: int | None = None
|
|
) -> MessagesRequest:
|
|
"""Create a MessagesRequest with a single user message."""
|
|
return MessagesRequest(
|
|
model="claude-3-sonnet",
|
|
max_tokens=max_tokens if max_tokens is not None else 100,
|
|
messages=[Message(role="user", content=messages_content)],
|
|
)
|
|
|
|
|
|
class TestTryPrefixDetection:
|
|
def test_disabled_returns_none(self):
|
|
settings = Settings()
|
|
settings.fast_prefix_detection = False
|
|
req = _make_request("x")
|
|
with patch(
|
|
"api.optimization_handlers.is_prefix_detection_request",
|
|
return_value=(True, "/ask"),
|
|
):
|
|
assert try_prefix_detection(req, settings) is None
|
|
|
|
def test_enabled_and_match_returns_response(self):
|
|
settings = Settings()
|
|
settings.fast_prefix_detection = True
|
|
req = _make_request("x")
|
|
with (
|
|
patch(
|
|
"api.optimization_handlers.is_prefix_detection_request",
|
|
return_value=(True, "/ask"),
|
|
),
|
|
patch(
|
|
"api.optimization_handlers.extract_command_prefix",
|
|
return_value="/ask",
|
|
),
|
|
patch("api.optimization_handlers.logger.info") as mock_log_info,
|
|
):
|
|
result = try_prefix_detection(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert block.text == "/ask"
|
|
mock_log_info.assert_called_once_with(
|
|
"Optimization: Fast prefix detection request"
|
|
)
|
|
|
|
def test_enabled_but_no_match_returns_none(self):
|
|
settings = Settings()
|
|
settings.fast_prefix_detection = True
|
|
req = _make_request("x")
|
|
with patch(
|
|
"api.optimization_handlers.is_prefix_detection_request",
|
|
return_value=(False, ""),
|
|
):
|
|
assert try_prefix_detection(req, settings) is None
|
|
|
|
|
|
class TestTryQuotaMock:
|
|
def test_disabled_returns_none(self):
|
|
settings = Settings()
|
|
settings.enable_network_probe_mock = False
|
|
req = _make_request("quota", max_tokens=1)
|
|
with patch(
|
|
"api.optimization_handlers.is_quota_check_request",
|
|
return_value=True,
|
|
):
|
|
assert try_quota_mock(req, settings) is None
|
|
|
|
def test_enabled_and_match_returns_response(self):
|
|
settings = Settings()
|
|
settings.enable_network_probe_mock = True
|
|
req = _make_request("quota", max_tokens=1)
|
|
with patch(
|
|
"api.optimization_handlers.is_quota_check_request",
|
|
return_value=True,
|
|
):
|
|
result = try_quota_mock(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert "Quota check passed" in block.text
|
|
|
|
|
|
class TestTryTitleSkip:
|
|
def test_disabled_returns_none(self):
|
|
settings = Settings()
|
|
settings.enable_title_generation_skip = False
|
|
req = _make_request("write a 5-10 word title")
|
|
with patch(
|
|
"api.optimization_handlers.is_title_generation_request",
|
|
return_value=True,
|
|
):
|
|
assert try_title_skip(req, settings) is None
|
|
|
|
def test_enabled_and_match_returns_response(self):
|
|
settings = Settings()
|
|
settings.enable_title_generation_skip = True
|
|
req = _make_request("x")
|
|
with patch(
|
|
"api.optimization_handlers.is_title_generation_request",
|
|
return_value=True,
|
|
):
|
|
result = try_title_skip(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert block.text == "Conversation"
|
|
|
|
|
|
class TestTrySuggestionSkip:
|
|
def test_disabled_returns_none(self):
|
|
settings = Settings()
|
|
settings.enable_suggestion_mode_skip = False
|
|
req = _make_request("[SUGGESTION MODE: x]")
|
|
with patch(
|
|
"api.optimization_handlers.is_suggestion_mode_request",
|
|
return_value=True,
|
|
):
|
|
assert try_suggestion_skip(req, settings) is None
|
|
|
|
def test_enabled_and_match_returns_response(self):
|
|
settings = Settings()
|
|
settings.enable_suggestion_mode_skip = True
|
|
req = _make_request("x")
|
|
with patch(
|
|
"api.optimization_handlers.is_suggestion_mode_request",
|
|
return_value=True,
|
|
):
|
|
result = try_suggestion_skip(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert block.text == ""
|
|
|
|
|
|
class TestTryFilepathMock:
|
|
def test_disabled_returns_none(self):
|
|
settings = Settings()
|
|
settings.enable_filepath_extraction_mock = False
|
|
req = _make_request("Command:\nls\nOutput:\nfilepaths")
|
|
with patch(
|
|
"api.optimization_handlers.is_filepath_extraction_request",
|
|
return_value=(True, "ls", "out"),
|
|
):
|
|
assert try_filepath_mock(req, settings) is None
|
|
|
|
def test_enabled_and_match_returns_response(self):
|
|
settings = Settings()
|
|
settings.enable_filepath_extraction_mock = True
|
|
req = _make_request("x")
|
|
with (
|
|
patch(
|
|
"api.optimization_handlers.is_filepath_extraction_request",
|
|
return_value=(True, "ls", "a.txt b.txt"),
|
|
),
|
|
patch(
|
|
"api.optimization_handlers.extract_filepaths_from_command",
|
|
return_value="a.txt\nb.txt",
|
|
),
|
|
):
|
|
result = try_filepath_mock(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert block.text == "a.txt\nb.txt"
|
|
|
|
def test_extract_filepaths_empty_list_still_returns_response(self):
|
|
settings = Settings()
|
|
settings.enable_filepath_extraction_mock = True
|
|
req = _make_request("x")
|
|
with (
|
|
patch(
|
|
"api.optimization_handlers.is_filepath_extraction_request",
|
|
return_value=(True, "ls", "out"),
|
|
),
|
|
patch(
|
|
"api.optimization_handlers.extract_filepaths_from_command",
|
|
return_value="",
|
|
),
|
|
):
|
|
result = try_filepath_mock(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert block.text == ""
|
|
|
|
|
|
class TestTryOptimizations:
|
|
def test_first_match_wins(self):
|
|
"""Quota mock is first in OPTIMIZATION_HANDLERS; it should win over prefix."""
|
|
settings = Settings()
|
|
settings.enable_network_probe_mock = True
|
|
settings.fast_prefix_detection = True
|
|
req = _make_request("quota", max_tokens=1)
|
|
with patch(
|
|
"api.optimization_handlers.is_quota_check_request",
|
|
return_value=True,
|
|
):
|
|
result = try_optimizations(req, settings)
|
|
assert result is not None
|
|
block = result.content[0]
|
|
assert isinstance(block, ContentBlockText)
|
|
assert "Quota check passed" in block.text
|
|
|
|
def test_no_match_returns_none(self):
|
|
settings = Settings()
|
|
settings.fast_prefix_detection = False
|
|
settings.enable_network_probe_mock = False
|
|
settings.enable_title_generation_skip = False
|
|
settings.enable_suggestion_mode_skip = False
|
|
settings.enable_filepath_extraction_mock = False
|
|
req = _make_request("random user message")
|
|
assert try_optimizations(req, settings) is None
|