Define split JSON and object repository ABCs, promote adapter methods to public CRUD, add example domain repositories, modernize interface stubs, and make the package installable for tests. Co-authored-by: Cursor <[email protected]>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""Integration tests for example domain repositories."""
|
|
|
|
from collections.abc import Generator
|
|
from io import BytesIO
|
|
import random
|
|
|
|
import pytest
|
|
from python_repositories.examples.artifact_object_repository import (
|
|
ArtifactObjectRepository,
|
|
)
|
|
from python_repositories.examples.user_json_repository import UserJsonRepository
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def user_data() -> Generator[dict[str, str]]:
|
|
"""Provide sample user data for tests."""
|
|
yield {"name": "Alice", "email": "[email protected]"}
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def artifact_data() -> Generator[BytesIO]:
|
|
"""Provide sample artifact data for tests."""
|
|
yield BytesIO(random.randbytes(2**20))
|
|
|
|
|
|
def test_user_json_repository_save_and_get(
|
|
redis_container: str,
|
|
user_data: dict[str, str],
|
|
) -> None:
|
|
"""Test that UserJsonRepository can save and retrieve a user."""
|
|
with UserJsonRepository() as repo:
|
|
repo.save_user("alice", user_data)
|
|
assert repo.get_user("alice") == user_data
|
|
|
|
|
|
def test_user_json_repository_delete(
|
|
redis_container: str,
|
|
user_data: dict[str, str],
|
|
) -> None:
|
|
"""Test that UserJsonRepository can delete a user."""
|
|
with UserJsonRepository() as repo:
|
|
repo.save_user("alice", user_data)
|
|
repo.delete_user("alice")
|
|
assert repo.get_user("alice") is None
|
|
|
|
|
|
def test_artifact_object_repository_store_and_get(
|
|
minio_container: dict[str, str],
|
|
artifact_data: BytesIO,
|
|
) -> None:
|
|
"""Test that ArtifactObjectRepository can store and retrieve an artifact."""
|
|
with ArtifactObjectRepository() as repo:
|
|
repo.store_artifact("report-1", artifact_data)
|
|
received = repo.get_artifact("report-1")
|
|
assert received is not None
|
|
artifact_data.seek(0)
|
|
assert received.read() == artifact_data.read()
|