generated from john/python-template
claude-sonnet-5 review: Phase 5 (final) implemented by gpt-5.3-codex
Quality Gate / gate (push) Failing after 37s
Quality Gate / gate (push) Failing after 37s
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import cast
|
||||
|
||||
import pytest
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from transcription.config import Settings
|
||||
from transcription.services.base import ServiceBase
|
||||
@@ -28,14 +31,22 @@ def _settings() -> Settings:
|
||||
return Settings(_env_file=None, openrouter_api_key="test-key")
|
||||
|
||||
|
||||
def _session_factory_stub() -> async_sessionmaker[AsyncSession]:
|
||||
return cast(async_sessionmaker[AsyncSession], object())
|
||||
|
||||
|
||||
def _session_stub() -> AsyncSession:
|
||||
return cast(AsyncSession, object())
|
||||
|
||||
|
||||
def test_initializes_with_defaults(monkeypatch):
|
||||
settings = _settings()
|
||||
session_factory = object()
|
||||
session_factory = _session_factory_stub()
|
||||
|
||||
monkeypatch.setattr("transcription.services.base.get_settings", lambda: settings)
|
||||
monkeypatch.setattr(
|
||||
"transcription.services.base.resolve_session_factory",
|
||||
lambda **kwargs: session_factory,
|
||||
lambda **_kwargs: session_factory,
|
||||
)
|
||||
|
||||
service = ServiceBase()
|
||||
@@ -46,7 +57,7 @@ def test_initializes_with_defaults(monkeypatch):
|
||||
|
||||
def test_initializes_with_custom_session_factory():
|
||||
settings = _settings()
|
||||
session_factory = object()
|
||||
session_factory = _session_factory_stub()
|
||||
|
||||
service = ServiceBase(settings=settings, session_factory=session_factory)
|
||||
|
||||
@@ -57,9 +68,9 @@ def test_initializes_with_custom_session_factory():
|
||||
@pytest.mark.asyncio
|
||||
async def test_session_scope_reuses_provided_session(monkeypatch):
|
||||
captured: dict[str, object | None] = {}
|
||||
provided_session = object()
|
||||
yielded = object()
|
||||
service = ServiceBase(settings=_settings(), session_factory=object())
|
||||
provided_session = _session_stub()
|
||||
yielded = _session_stub()
|
||||
service = ServiceBase(settings=_settings(), session_factory=_session_factory_stub())
|
||||
|
||||
@asynccontextmanager
|
||||
async def _fake_session_scope(*, session_factory=None, session=None):
|
||||
@@ -78,8 +89,8 @@ async def test_session_scope_reuses_provided_session(monkeypatch):
|
||||
@pytest.mark.asyncio
|
||||
async def test_session_scope_creates_owned_session_when_none_provided(monkeypatch):
|
||||
captured: dict[str, object | None] = {}
|
||||
owned_session = object()
|
||||
service = ServiceBase(settings=_settings(), session_factory=object())
|
||||
owned_session = _session_stub()
|
||||
service = ServiceBase(settings=_settings(), session_factory=_session_factory_stub())
|
||||
|
||||
@asynccontextmanager
|
||||
async def _fake_session_scope(*, session_factory=None, session=None):
|
||||
@@ -97,12 +108,12 @@ async def test_session_scope_creates_owned_session_when_none_provided(monkeypatc
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_session_scope_propagates_exceptions(monkeypatch):
|
||||
service = ServiceBase(settings=_settings(), session_factory=object())
|
||||
service = ServiceBase(settings=_settings(), session_factory=_session_factory_stub())
|
||||
|
||||
@asynccontextmanager
|
||||
async def _fake_session_scope(*, session_factory=None, session=None):
|
||||
_ = (session_factory, session)
|
||||
yield object()
|
||||
yield _session_stub()
|
||||
|
||||
monkeypatch.setattr("transcription.services.base.session_scope", _fake_session_scope)
|
||||
|
||||
@@ -113,11 +124,15 @@ async def test_session_scope_propagates_exceptions(monkeypatch):
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_finalize_commits_for_service_owned_session():
|
||||
service = ServiceBase(settings=_settings(), session_factory=object())
|
||||
service = ServiceBase(settings=_settings(), session_factory=_session_factory_stub())
|
||||
session = _TrackingSession()
|
||||
refreshed = object()
|
||||
|
||||
await service._finalize(session=session, caller_session=None, refresh=(refreshed,))
|
||||
await service._finalize(
|
||||
session=cast(AsyncSession, session),
|
||||
caller_session=None,
|
||||
refresh=(refreshed,),
|
||||
)
|
||||
|
||||
assert session.commits == 1
|
||||
assert session.flushes == 0
|
||||
@@ -126,11 +141,15 @@ async def test_finalize_commits_for_service_owned_session():
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_finalize_flushes_for_caller_owned_session():
|
||||
service = ServiceBase(settings=_settings(), session_factory=object())
|
||||
service = ServiceBase(settings=_settings(), session_factory=_session_factory_stub())
|
||||
session = _TrackingSession()
|
||||
refreshed = object()
|
||||
|
||||
await service._finalize(session=session, caller_session=object(), refresh=(refreshed,))
|
||||
await service._finalize(
|
||||
session=cast(AsyncSession, session),
|
||||
caller_session=_session_stub(),
|
||||
refresh=(refreshed,),
|
||||
)
|
||||
|
||||
assert session.commits == 0
|
||||
assert session.flushes == 1
|
||||
|
||||
Reference in New Issue
Block a user