2026-02-27 13:54:46 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
from src.api.admin.providers.routes import (
|
|
|
|
|
_merge_claude_code_advanced_config,
|
2026-03-06 13:13:01 +08:00
|
|
|
_resolve_new_provider_priority,
|
2026-02-27 13:54:46 +08:00
|
|
|
_should_enable_format_conversion_by_default,
|
|
|
|
|
)
|
|
|
|
|
from src.core.exceptions import InvalidRequestException
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_claude_code_defaults_format_conversion_enabled() -> None:
|
|
|
|
|
assert _should_enable_format_conversion_by_default("claude_code") is True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_custom_defaults_format_conversion_disabled() -> None:
|
|
|
|
|
assert _should_enable_format_conversion_by_default("custom") is False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_merge_claude_code_advanced_clears_stale_config_for_non_claude_provider() -> None:
|
|
|
|
|
merged, changed = _merge_claude_code_advanced_config(
|
|
|
|
|
provider_type="custom",
|
|
|
|
|
provider_config={"foo": "bar", "claude_code_advanced": {"max_sessions": 9}},
|
|
|
|
|
claude_code_advanced=None,
|
|
|
|
|
claude_advanced_in_payload=False,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert merged == {"foo": "bar"}
|
|
|
|
|
assert changed is True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_merge_claude_code_advanced_rejects_non_claude_payload() -> None:
|
|
|
|
|
with pytest.raises(InvalidRequestException):
|
|
|
|
|
_merge_claude_code_advanced_config(
|
|
|
|
|
provider_type="custom",
|
|
|
|
|
provider_config={},
|
|
|
|
|
claude_code_advanced={"max_sessions": 9},
|
|
|
|
|
claude_advanced_in_payload=True,
|
|
|
|
|
)
|
2026-03-06 13:13:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_new_provider_priority_defaults_to_current_top() -> None:
|
|
|
|
|
priority, needs_shift = _resolve_new_provider_priority(
|
|
|
|
|
current_min_priority=3, requested_priority=None
|
|
|
|
|
)
|
|
|
|
|
assert priority == 2
|
|
|
|
|
assert needs_shift is False
|
|
|
|
|
|
|
|
|
|
|
2026-03-12 17:11:14 +08:00
|
|
|
def test_new_provider_priority_clamps_at_zero_when_already_topmost() -> None:
|
|
|
|
|
priority, needs_shift = _resolve_new_provider_priority(
|
|
|
|
|
current_min_priority=0, requested_priority=None
|
|
|
|
|
)
|
|
|
|
|
assert priority == 0
|
|
|
|
|
assert needs_shift is True
|
|
|
|
|
|
|
|
|
|
|
2026-03-06 13:13:01 +08:00
|
|
|
def test_new_provider_priority_defaults_to_100_when_empty() -> None:
|
|
|
|
|
priority, needs_shift = _resolve_new_provider_priority(
|
|
|
|
|
current_min_priority=None, requested_priority=None
|
|
|
|
|
)
|
|
|
|
|
assert priority == 100
|
|
|
|
|
assert needs_shift is False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_new_provider_priority_keeps_explicit_value() -> None:
|
|
|
|
|
priority, needs_shift = _resolve_new_provider_priority(
|
|
|
|
|
current_min_priority=3, requested_priority=8
|
|
|
|
|
)
|
|
|
|
|
assert priority == 8
|
|
|
|
|
assert needs_shift is True
|