refactor: 平台改为代码内置 provider 架构,一次性迁移现有数据 - 新增 app/providers:BalanceProvider 基类 + DeepSeek 适配器 + 注册表 - platforms 表去除 method/url/headers/body/balance_path,新增 provider_id - 现有数据库已一次性迁移(备份 data/monitor.db.bak-v1),不保留迁移工具 - 平台 UI 改为选择内置提供方;fetcher/monitor 走 provider 构建请求与解析 - 表达式引擎(运算符/函数)随架构保留,供 provider 内部使用 - 测试更新至 provider 模式,共 92 个
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""内置平台适配器测试。"""
|
||||
|
||||
import pytest
|
||||
|
||||
from app.expr import ExprError
|
||||
from app.providers import get_provider, list_providers
|
||||
from app.providers.deepseek import DeepSeekProvider
|
||||
|
||||
DEEPSEEK_RESPONSE = {
|
||||
"is_available": True,
|
||||
"balance_infos": [
|
||||
{
|
||||
"currency": "CNY",
|
||||
"total_balance": "1.34",
|
||||
"granted_balance": "0.00",
|
||||
"topped_up_balance": "1.34",
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
class TestDeepSeek:
|
||||
def test_build_request(self):
|
||||
prov = DeepSeekProvider()
|
||||
url, headers, body = prov.build_request("sk-abc")
|
||||
assert url == "https://api.deepseek.com/user/balance"
|
||||
assert headers["Authorization"] == "Bearer sk-abc"
|
||||
assert body is None
|
||||
assert prov.method == "GET"
|
||||
|
||||
def test_extract_balance(self):
|
||||
assert DeepSeekProvider().extract_balance(DEEPSEEK_RESPONSE) == 1.34
|
||||
|
||||
def test_extract_missing(self):
|
||||
with pytest.raises(ExprError):
|
||||
DeepSeekProvider().extract_balance({"is_available": False})
|
||||
|
||||
|
||||
class TestRegistry:
|
||||
def test_get_provider(self):
|
||||
prov = get_provider("deepseek")
|
||||
assert isinstance(prov, DeepSeekProvider)
|
||||
|
||||
def test_unknown_provider_none(self):
|
||||
assert get_provider("nope") is None
|
||||
|
||||
def test_list_providers(self):
|
||||
provs = list_providers()
|
||||
ids = [p["id"] for p in provs]
|
||||
assert "deepseek" in ids
|
||||
dp = next(p for p in provs if p["id"] == "deepseek")
|
||||
assert dp["name"] == "DeepSeek" and dp["currency"] == "CNY" and dp["icon"] == "DeepSeek"
|
||||
Reference in New Issue
Block a user