Skip to content

Commit 81981c8

Browse files
committed
Move db_session and test_client fixtures into conftest.py
1 parent be2ba55 commit 81981c8

File tree

3 files changed

+45
-67
lines changed

3 files changed

+45
-67
lines changed

tests/conftest.py

+37
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,52 @@
11
import uuid
22
from datetime import datetime, UTC
3+
from typing import Generator
34

45
import pytest
6+
import sqlalchemy
7+
from fastapi.testclient import TestClient
58

9+
from dor.adapters.catalog import _custom_json_serializer, Base
10+
from dor.config import config
611
from dor.domain.models import Bin
12+
from dor.entrypoints.api.dependencies import get_db_session
13+
from dor.entrypoints.api.main import app
714
from dor.providers.models import (
815
Agent, AlternateIdentifier, FileMetadata, FileReference, PackageResource,
916
PreservationEvent, StructMap, StructMapItem, StructMapType
1017
)
1118

1219

20+
@pytest.fixture
21+
def db_session() -> Generator[sqlalchemy.orm.Session, None, None]:
22+
engine_url = config.get_test_database_engine_url()
23+
engine = sqlalchemy.create_engine(
24+
engine_url, echo=True, json_serializer=_custom_json_serializer
25+
)
26+
27+
Base.metadata.drop_all(engine)
28+
Base.metadata.create_all(engine)
29+
30+
connection = engine.connect()
31+
session = sqlalchemy.orm.Session(bind=connection)
32+
33+
yield session
34+
35+
session.close()
36+
connection.close()
37+
38+
39+
@pytest.fixture
40+
def test_client(db_session) -> Generator[TestClient, None, None]:
41+
def get_db_session_override():
42+
return db_session
43+
44+
app.dependency_overrides[get_db_session] = get_db_session_override
45+
test_client = TestClient(app)
46+
yield test_client
47+
app.dependency_overrides.clear()
48+
49+
1350
@pytest.fixture
1451
def sample_bin() -> Bin:
1552
return Bin(

tests/e2e/test_catalog_api.py

+3-40
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,11 @@
1-
from typing import Generator
2-
31
import pytest
4-
import sqlalchemy
52
from pydantic_core import to_jsonable_python
6-
from fastapi.testclient import TestClient
73

8-
from dor.adapters.catalog import Base, SqlalchemyCatalog, _custom_json_serializer
9-
from dor.config import config
4+
from dor.adapters.catalog import SqlalchemyCatalog
105
from dor.domain.models import Bin
11-
from dor.entrypoints.api.dependencies import get_db_session
12-
from dor.entrypoints.api.main import app
13-
14-
15-
@pytest.fixture
16-
def db_session() -> Generator[sqlalchemy.orm.Session, None, None]:
17-
engine_url = config.get_test_database_engine_url()
18-
engine = sqlalchemy.create_engine(
19-
engine_url, echo=True, json_serializer=_custom_json_serializer
20-
)
21-
22-
Base.metadata.drop_all(engine)
23-
Base.metadata.create_all(engine)
24-
25-
connection = engine.connect()
26-
session = sqlalchemy.orm.Session(bind=connection)
27-
28-
yield session
29-
30-
session.close()
31-
connection.close()
32-
33-
34-
@pytest.fixture
35-
def test_client(db_session) -> Generator[TestClient, None, None]:
36-
def get_db_session_override():
37-
return db_session
38-
39-
app.dependency_overrides[get_db_session] = get_db_session_override
40-
test_client = TestClient(app)
41-
yield test_client
42-
app.dependency_overrides.clear()
436

447

45-
@pytest.mark.usefixtures("sample_bin")
8+
@pytest.mark.usefixtures("sample_bin", "db_session", "test_client")
469
def test_catalog_api_returns_200_and_summary(
4710
sample_bin: Bin, db_session, test_client
4811
) -> None:
@@ -62,7 +25,7 @@ def test_catalog_api_returns_200_and_summary(
6225
assert response.json() == expected_summary
6326

6427

65-
@pytest.mark.usefixtures("sample_bin")
28+
@pytest.mark.usefixtures("sample_bin", "db_session", "test_client")
6629
def test_catalog_api_returns_200_and_file_sets(
6730
sample_bin: Bin, db_session, test_client
6831
) -> None:

tests/test_catalog.py

+5-27
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,10 @@
1-
from typing import Generator
2-
31
import pytest
42
import sqlalchemy
53

6-
from dor.adapters.catalog import Base, SqlalchemyCatalog, _custom_json_serializer
7-
from dor.config import config
8-
9-
10-
@pytest.fixture
11-
def db_session() -> Generator[sqlalchemy.orm.Session, None, None]:
12-
engine_url = config.get_test_database_engine_url()
13-
engine = sqlalchemy.create_engine(
14-
engine_url, echo=True, json_serializer=_custom_json_serializer
15-
)
16-
17-
Base.metadata.drop_all(engine)
18-
Base.metadata.create_all(engine)
19-
20-
connection = engine.connect()
21-
session = sqlalchemy.orm.Session(bind=connection)
22-
23-
yield session
24-
25-
session.close()
26-
connection.close()
4+
from dor.adapters.catalog import SqlalchemyCatalog
275

286

29-
@pytest.mark.usefixtures("sample_bin")
7+
@pytest.mark.usefixtures("db_session", "sample_bin")
308
def test_catalog_adds_bin(db_session, sample_bin) -> None:
319
catalog = SqlalchemyCatalog(db_session)
3210
with db_session.begin():
@@ -44,7 +22,7 @@ def test_catalog_adds_bin(db_session, sample_bin) -> None:
4422
assert str(rows[0].identifier) == "00000000-0000-0000-0000-000000000001"
4523

4624

47-
@pytest.mark.usefixtures("sample_bin")
25+
@pytest.mark.usefixtures("db_session", "sample_bin")
4826
def test_catalog_gets_bin(db_session, sample_bin) -> None:
4927
catalog = SqlalchemyCatalog(db_session)
5028
with db_session.begin():
@@ -55,7 +33,7 @@ def test_catalog_gets_bin(db_session, sample_bin) -> None:
5533
assert bin == sample_bin
5634

5735

58-
@pytest.mark.usefixtures("sample_bin")
36+
@pytest.mark.usefixtures("db_session", "sample_bin")
5937
def test_catalog_gets_by_alternate_identifier(db_session, sample_bin) -> None:
6038
catalog = SqlalchemyCatalog(db_session)
6139
with db_session.begin():
@@ -66,7 +44,7 @@ def test_catalog_gets_by_alternate_identifier(db_session, sample_bin) -> None:
6644
assert bin == sample_bin
6745

6846

69-
@pytest.mark.usefixtures("sample_bin")
47+
@pytest.mark.usefixtures("db_session", "sample_bin")
7048
def test_catalog_returns_none_when_no_alternate_identifier_matches(db_session, sample_bin) -> None:
7149
catalog = SqlalchemyCatalog(db_session)
7250
with db_session.begin():

0 commit comments

Comments
 (0)