mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from unittest.mock import AsyncMock, patch
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from src.services.model.upstream_fetcher import UpstreamModelsFetchContext, fetch_models_for_key
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_fetch_models_for_key_antigravity_parses_quota() -> None:
|
||
|
|
mock_resp = {
|
||
|
|
"models": {
|
||
|
|
"claude-sonnet-4": {
|
||
|
|
"displayName": "Claude Sonnet 4",
|
||
|
|
"quotaInfo": {"remainingFraction": 0.75, "resetTime": "2024-01-15T12:00:00Z"},
|
||
|
|
},
|
||
|
|
"gemini-2.5-pro": {
|
||
|
|
"displayName": "Gemini 2.5 Pro",
|
||
|
|
"quotaInfo": {"remainingFraction": 0.0},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ctx = UpstreamModelsFetchContext(
|
||
|
|
provider_type="antigravity",
|
||
|
|
api_key_value="tok",
|
||
|
|
format_to_endpoint={},
|
||
|
|
proxy_config=None,
|
||
|
|
auth_config={"project_id": "project-1"},
|
||
|
|
)
|
||
|
|
|
||
|
|
with patch(
|
||
|
|
"src.services.provider.adapters.antigravity.client.fetch_available_models",
|
||
|
|
AsyncMock(return_value=mock_resp),
|
||
|
|
):
|
||
|
|
models, errors, ok, meta = await fetch_models_for_key(ctx, timeout_seconds=1.0)
|
||
|
|
|
||
|
|
assert ok is True
|
||
|
|
assert errors == []
|
||
|
|
|
||
|
|
ids = {m.get("id") for m in models}
|
||
|
|
assert "claude-sonnet-4" in ids
|
||
|
|
assert "gemini-2.5-pro" in ids
|
||
|
|
|
||
|
|
assert isinstance(meta, dict)
|
||
|
|
quota = meta["antigravity"]["quota_by_model"]
|
||
|
|
assert quota["claude-sonnet-4"]["remaining_fraction"] == 0.75
|
||
|
|
assert quota["claude-sonnet-4"]["used_percent"] == 25.0
|
||
|
|
assert quota["claude-sonnet-4"]["reset_time"] == "2024-01-15T12:00:00Z"
|
||
|
|
assert quota["gemini-2.5-pro"]["used_percent"] == 100.0
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_fetch_models_for_key_antigravity_requires_project_id() -> None:
|
||
|
|
ctx = UpstreamModelsFetchContext(
|
||
|
|
provider_type="antigravity",
|
||
|
|
api_key_value="tok",
|
||
|
|
format_to_endpoint={},
|
||
|
|
proxy_config=None,
|
||
|
|
auth_config={},
|
||
|
|
)
|
||
|
|
|
||
|
|
models, errors, ok, meta = await fetch_models_for_key(ctx, timeout_seconds=1.0)
|
||
|
|
|
||
|
|
assert ok is False
|
||
|
|
assert models == []
|
||
|
|
assert meta is None
|
||
|
|
assert any("project_id" in e for e in errors)
|