mirror of
https://github.com/langgenius/dify.git
synced 2026-07-22 03:08:33 +08:00
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
"""Shared database fixtures for provider tests.
|
|
|
|
Provider tests live outside ``tests/unit_tests`` and therefore cannot use that
|
|
suite's SQLite fixtures. Keep this fixture scoped to ``providers`` so each
|
|
provider package can exercise real SQLAlchemy queries without a service
|
|
database or mocked sessions.
|
|
"""
|
|
|
|
from collections.abc import Iterator
|
|
|
|
import pytest
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import Session
|
|
|
|
from models.base import TypeBase
|
|
|
|
|
|
@pytest.fixture
|
|
def sqlite3_session(request: pytest.FixtureRequest) -> Iterator[Session]:
|
|
"""Yield an isolated SQLite session with the parametrized model tables.
|
|
|
|
Pass the required ORM classes through indirect parametrization. The engine
|
|
is per-test so committed rows and identity-map state cannot leak between
|
|
provider packages.
|
|
"""
|
|
|
|
models: tuple[type[TypeBase], ...] = request.param
|
|
engine = create_engine("sqlite:///:memory:")
|
|
tables = [model.metadata.tables[model.__tablename__] for model in models]
|
|
TypeBase.metadata.create_all(engine, tables=tables)
|
|
try:
|
|
with Session(engine, expire_on_commit=False) as session:
|
|
yield session
|
|
finally:
|
|
engine.dispose()
|