mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-09-15 04:32:23 +02:00
95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
"""Cycle-8 regressions for bearer provider-auth session repair."""
|
|
|
|
import json
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
import core.database as cdb
|
|
|
|
|
|
_CODEX_BASE = "https://chatgpt.com/backend-api/codex"
|
|
|
|
|
|
def _provider_db(monkeypatch):
|
|
from routes import chat_helpers
|
|
from src import chatgpt_subscription
|
|
|
|
engine = create_engine("sqlite:///:memory:")
|
|
cdb.Base.metadata.create_all(bind=engine)
|
|
test_session_local = sessionmaker(bind=engine, autoflush=False)
|
|
monkeypatch.setattr(chat_helpers, "SessionLocal", test_session_local)
|
|
monkeypatch.setattr(
|
|
chatgpt_subscription,
|
|
"_database_handles",
|
|
lambda: (cdb.ProviderAuthSession, test_session_local, cdb.utcnow_naive),
|
|
)
|
|
|
|
db = test_session_local()
|
|
db.add(cdb.ProviderAuthSession(
|
|
id="auth-1",
|
|
provider="chatgpt-subscription",
|
|
owner="alice",
|
|
base_url=_CODEX_BASE,
|
|
access_token="cached-access-token",
|
|
refresh_token="refresh-token",
|
|
auth_mode="chatgpt",
|
|
))
|
|
db.add(cdb.ModelEndpoint(
|
|
id="endpoint-1",
|
|
name="ChatGPT Subscription",
|
|
base_url=_CODEX_BASE,
|
|
api_key=None,
|
|
provider_auth_id="auth-1",
|
|
owner="alice",
|
|
is_enabled=True,
|
|
endpoint_kind="api",
|
|
cached_models=json.dumps(["gpt-5.5"]),
|
|
pinned_models=json.dumps(["gpt-5.5"]),
|
|
))
|
|
db.commit()
|
|
db.close()
|
|
return test_session_local
|
|
|
|
|
|
def _registered_session():
|
|
return SimpleNamespace(
|
|
endpoint_url=f"{_CODEX_BASE}/responses",
|
|
model="gpt-5.5",
|
|
model_endpoint_id="endpoint-1",
|
|
endpoint_provenance="registered",
|
|
headers={"Authorization": "Bearer stale-token"},
|
|
)
|
|
|
|
|
|
def test_bearer_validator_uses_owner_cached_provider_auth_without_refresh(monkeypatch):
|
|
from routes.chat_helpers import _validate_bearer_session_model
|
|
from src import chatgpt_subscription
|
|
|
|
_provider_db(monkeypatch)
|
|
monkeypatch.setattr(chatgpt_subscription, "access_token_is_expiring", lambda token: False)
|
|
monkeypatch.setattr(
|
|
chatgpt_subscription,
|
|
"refresh_oauth_tokens",
|
|
lambda *args, **kwargs: pytest.fail("bearer validation refreshed provider credentials"),
|
|
)
|
|
|
|
session = _registered_session()
|
|
assert _validate_bearer_session_model(session, owner="alice") == "gpt-5.5"
|
|
assert session.headers["Authorization"] == "Bearer cached-access-token"
|
|
|
|
|
|
def test_bearer_validator_rejects_provider_auth_when_cache_is_unusable(monkeypatch):
|
|
from routes.chat_helpers import _validate_bearer_session_model
|
|
from src import chatgpt_subscription
|
|
|
|
_provider_db(monkeypatch)
|
|
monkeypatch.setattr(chatgpt_subscription, "access_token_is_expiring", lambda token: True)
|
|
|
|
with pytest.raises(HTTPException) as exc:
|
|
_validate_bearer_session_model(_registered_session(), owner="alice")
|
|
assert exc.value.status_code == 401
|