mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
feat: Codex account_name 透传并优化池列表 OAuth 标识与额度重置倒计时展示
(cherry picked from commit 1b9176fc4a)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
import jwt
|
||||
import pytest
|
||||
@@ -17,18 +18,28 @@ def test_codex_provider_behavior_has_no_runtime_envelope_or_variants() -> None:
|
||||
assert behavior.cross_format_variant is None
|
||||
|
||||
|
||||
def test_openai_cli_normalizer_request_from_internal_codex_variant_preserves_store() -> None:
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import OpenAICliNormalizer
|
||||
def test_openai_cli_normalizer_request_from_internal_codex_variant_preserves_store() -> (
|
||||
None
|
||||
):
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import (
|
||||
OpenAICliNormalizer,
|
||||
)
|
||||
|
||||
normalizer = OpenAICliNormalizer()
|
||||
internal = normalizer.request_to_internal({"model": "gpt-test", "input": [], "store": True})
|
||||
internal = normalizer.request_to_internal(
|
||||
{"model": "gpt-test", "input": [], "store": True}
|
||||
)
|
||||
out = normalizer.request_from_internal(internal, target_variant="codex")
|
||||
|
||||
assert out["store"] is True
|
||||
|
||||
|
||||
def test_openai_cli_normalizer_request_from_internal_codex_variant_does_not_inject_store() -> None:
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import OpenAICliNormalizer
|
||||
def test_openai_cli_normalizer_request_from_internal_codex_variant_does_not_inject_store() -> (
|
||||
None
|
||||
):
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import (
|
||||
OpenAICliNormalizer,
|
||||
)
|
||||
|
||||
normalizer = OpenAICliNormalizer()
|
||||
internal = normalizer.request_to_internal({"model": "gpt-test", "input": []})
|
||||
@@ -37,9 +48,13 @@ def test_openai_cli_normalizer_request_from_internal_codex_variant_does_not_inje
|
||||
assert "store" not in out
|
||||
|
||||
|
||||
def test_openai_cli_normalizer_codex_variant_keeps_instructions_missing_for_default_rule() -> None:
|
||||
def test_openai_cli_normalizer_codex_variant_keeps_instructions_missing_for_default_rule() -> (
|
||||
None
|
||||
):
|
||||
from src.api.handlers.base.request_builder import apply_body_rules
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import OpenAICliNormalizer
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import (
|
||||
OpenAICliNormalizer,
|
||||
)
|
||||
from src.core.api_format.metadata import CODEX_DEFAULT_BODY_RULES
|
||||
|
||||
normalizer = OpenAICliNormalizer()
|
||||
@@ -53,7 +68,9 @@ def test_openai_cli_normalizer_codex_variant_keeps_instructions_missing_for_defa
|
||||
|
||||
|
||||
def test_openai_cli_normalizer_patch_for_codex_is_noop() -> None:
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import OpenAICliNormalizer
|
||||
from src.core.api_format.conversion.normalizers.openai_cli import (
|
||||
OpenAICliNormalizer,
|
||||
)
|
||||
|
||||
normalizer = OpenAICliNormalizer()
|
||||
out = normalizer.patch_for_variant(
|
||||
@@ -73,7 +90,9 @@ def test_openai_cli_normalizer_patch_for_codex_is_noop() -> None:
|
||||
|
||||
def test_codex_passthrough_builder_preserves_real_codex_headers() -> None:
|
||||
builder = PassthroughRequestBuilder()
|
||||
endpoint = SimpleNamespace(api_family="openai", endpoint_kind="cli", header_rules=None)
|
||||
endpoint = SimpleNamespace(
|
||||
api_family="openai", endpoint_kind="cli", header_rules=None
|
||||
)
|
||||
key = SimpleNamespace(api_key="unused")
|
||||
|
||||
headers = builder.build_headers(
|
||||
@@ -139,7 +158,9 @@ def _encode_unsigned_jwt(payload: dict[str, object]) -> str:
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_enrich_codex_uses_access_token_when_id_token_missing() -> None:
|
||||
async def test_enrich_codex_uses_access_token_when_id_token_missing(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
from src.services.provider.adapters.codex.plugin import enrich_codex
|
||||
|
||||
access_token = _encode_unsigned_jwt(
|
||||
@@ -154,6 +175,10 @@ async def test_enrich_codex_uses_access_token_when_id_token_missing() -> None:
|
||||
)
|
||||
|
||||
auth_config: dict[str, object] = {}
|
||||
monkeypatch.setattr(
|
||||
"src.core.provider_oauth_utils.fetch_openai_account_name",
|
||||
AsyncMock(return_value="Workspace Alpha"),
|
||||
)
|
||||
out = await enrich_codex(
|
||||
auth_config=auth_config,
|
||||
token_response={"access_token": access_token},
|
||||
@@ -163,5 +188,6 @@ async def test_enrich_codex_uses_access_token_when_id_token_missing() -> None:
|
||||
|
||||
assert out["email"] == "u@example.com"
|
||||
assert out["account_id"] == "acc-access"
|
||||
assert out["account_name"] == "Workspace Alpha"
|
||||
assert out["plan_type"] == "team"
|
||||
assert out["user_id"] == "user-access"
|
||||
|
||||
Reference in New Issue
Block a user