Add Postgres table adapter with TableRepositoryInterface.
PR Title Check / check-title (pull_request) Successful in 7s
Code Quality Pipeline / code-quality (pull_request) Failing after 19s
Test Python Package / unit-tests (pull_request) Successful in 47s
Test Python Package / integration-tests (pull_request) Successful in 44s
Test Python Package / coverage-report (pull_request) Successful in 11s
PR Title Check / check-title (pull_request) Successful in 7s
Code Quality Pipeline / code-quality (pull_request) Failing after 19s
Test Python Package / unit-tests (pull_request) Successful in 47s
Test Python Package / integration-tests (pull_request) Successful in 44s
Test Python Package / coverage-report (pull_request) Successful in 11s
Introduce PostgresAdapter for dict-based row CRUD via psycopg3, including config, lazy exports, unit/integration tests with testcontainers, and an example UserTableRepository. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
co-authored by
Cursor
parent
f28d3c4844
commit
dc6f8a3e89
@@ -6,12 +6,15 @@ import os
|
||||
import random
|
||||
|
||||
from minio import Minio
|
||||
import psycopg
|
||||
import pytest
|
||||
|
||||
from python_repositories.examples.artifact_object_repository import (
|
||||
ArtifactObjectRepository,
|
||||
)
|
||||
from python_repositories.examples.user_json_repository import UserJsonRepository
|
||||
from python_repositories.examples.user_table_repository import UserTableRepository
|
||||
from tests.integration.postgres._containers import TEST_TABLE
|
||||
|
||||
pytestmark = [
|
||||
pytest.mark.integration,
|
||||
@@ -36,6 +39,24 @@ def set_example_env(
|
||||
_ = os.environ.pop(key, default=None)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def set_postgres_example_env(
|
||||
postgres_container: str,
|
||||
raw_postgres_client: psycopg.Connection,
|
||||
) -> Generator[None, None, None]:
|
||||
"""Set Postgres env vars for example repositories using from_env() defaults."""
|
||||
env_vars = {
|
||||
"POSTGRES_URI": postgres_container,
|
||||
"POSTGRES_TABLE": TEST_TABLE,
|
||||
"POSTGRES_PRIMARY_KEY": "id",
|
||||
}
|
||||
for key, value in env_vars.items():
|
||||
os.environ[key] = value
|
||||
yield
|
||||
for key in env_vars:
|
||||
_ = os.environ.pop(key, default=None)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def user_data() -> Generator[dict[str, str], None, None]:
|
||||
"""Provide sample user data for tests."""
|
||||
@@ -77,3 +98,27 @@ def test_artifact_object_repository_store_and_get(
|
||||
assert received is not None
|
||||
artifact_data.seek(0)
|
||||
assert received.read() == artifact_data.read()
|
||||
|
||||
|
||||
@pytest.mark.needs_postgres
|
||||
def test_user_table_repository_save_and_get(
|
||||
user_data: dict[str, str],
|
||||
) -> None:
|
||||
"""Test that UserTableRepository can save and retrieve a user."""
|
||||
with UserTableRepository() as repo:
|
||||
repo.save_user("alice", user_data)
|
||||
user = repo.get_user("alice")
|
||||
assert user is not None
|
||||
assert user["name"] == user_data["name"]
|
||||
assert user["email"] == user_data["email"]
|
||||
|
||||
|
||||
@pytest.mark.needs_postgres
|
||||
def test_user_table_repository_delete(
|
||||
user_data: dict[str, str],
|
||||
) -> None:
|
||||
"""Test that UserTableRepository can delete a user."""
|
||||
with UserTableRepository() as repo:
|
||||
repo.save_user("alice", user_data)
|
||||
repo.delete_user("alice")
|
||||
assert repo.get_user("alice") is None
|
||||
|
||||
Reference in New Issue
Block a user