Files
Aether/tests/services/test_admin_provider_defaults.py
fawney19 e9678ea899 fix(admin): 优先级脏检查、base_url 校验、usage detail 延迟加载及导入数据验证
- 前端优先级管理: 保存时对比原始快照,仅提交实际变更的 provider/key 优先级,
  并限制并发请求数(SAVE_CONCURRENCY=6),避免无效 API 调用
- handler_adapter_base: _normalize_test_base_url 改为 _validate_test_base_url,
  移除对 dict 类型 base_url 的兼容,严格要求字符串输入
- provider_query: 新增 _require_test_endpoint_base_url,在测试链路提前校验
  endpoint.base_url 类型和非空
- system.py: 导入 endpoint 时通过 ProviderEndpointCreate 模型校验数据,
  拒绝非法 base_url 类型(如 dict)
- usage detail: 使用 defer() 延迟加载 body 列,通过 SQL CASE 表达式在
  数据库端计算 has_*_body 标记,减少不必要的大字段传输
- provider routes: 新建 provider 时 priority=0 边界处理,clamp 并 shift
2026-03-12 17:11:14 +08:00

73 lines
2.3 KiB
Python

from __future__ import annotations
import pytest
from src.api.admin.providers.routes import (
_merge_claude_code_advanced_config,
_resolve_new_provider_priority,
_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,
)
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
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
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