diff options
Diffstat (limited to 'test_utils/managers/gr/conftest.py')
| -rw-r--r-- | test_utils/managers/gr/conftest.py | 197 |
1 files changed, 78 insertions, 119 deletions
diff --git a/test_utils/managers/gr/conftest.py b/test_utils/managers/gr/conftest.py index 3e3a4ad..37da164 100644 --- a/test_utils/managers/gr/conftest.py +++ b/test_utils/managers/gr/conftest.py @@ -1,151 +1,110 @@ from __future__ import annotations from typing import Callable -from uuid import uuid4 import pytest -from pydantic import PositiveInt -from pydantic_extra_types.phone_numbers import PhoneNumber +import redis.asyncio as redis_async +from pydantic import PostgresDsn +from redis import Redis -from generalresearch.managers.gr.authentication import GRUserManager +from generalresearch.config import GRLBaseSettings +from generalresearch.managers.gr.authentication import GRTokenManager, GRUserManager from generalresearch.managers.gr.business import ( BusinessAddressManager, BusinessBankAccountManager, BusinessManager, ) -from generalresearch.managers.gr.team import TeamManager -from generalresearch.models.custom_types import UUIDStr -from generalresearch.models.gr.authentication import GRUser -from generalresearch.models.gr.business import ( - Business, - BusinessAddress, - BusinessBankAccount, - BusinessType, - TransferMethod, -) -from generalresearch.models.gr.team import Team +from generalresearch.pg_helper import PostgresConfig +from generalresearch.redis_helper import RedisConfig + + +# === Msc === +@pytest.fixture(scope="session") +def gr_redis(settings: GRLBaseSettings) -> Redis: + assert "unittest" in str(settings.gr_redis) or "127.0.0.1" in str(settings.gr_redis) + return Redis.from_url( + url=str(settings.gr_redis), + decode_responses=True, + socket_timeout=settings.redis_timeout, + socket_connect_timeout=settings.redis_timeout, + ) @pytest.fixture -def gr_user_factory(gr_um: GRUserManager) -> Callable[..., GRUser]: +def gr_redis_async(settings: GRLBaseSettings) -> redis_async.Redis: + assert "unittest" in str(settings.gr_redis) or "127.0.0.1" in str(settings.gr_redis) - def _inner( - sub: str | None = None, - is_superuser: bool = False, - ) -> GRUser: - sub = sub or f"{uuid4().hex}-{uuid4().hex}" + return redis_async.Redis.from_url( + str(settings.gr_redis), + decode_responses=True, + socket_timeout=0.20, + socket_connect_timeout=0.20, + ) - return gr_um.create( - sub=sub, - is_superuser=is_superuser, - ) - return _inner +@pytest.fixture(scope="session") +def gr_redis_config(settings: GRLBaseSettings) -> RedisConfig: + assert "unittest" in str(settings.gr_redis) or "127.0.0.1" in str(settings.gr_redis) + return RedisConfig( + dsn=settings.gr_redis, + decode_responses=True, + socket_timeout=settings.redis_timeout, + socket_connect_timeout=settings.redis_timeout, + ) -@pytest.fixture -def gr_business_bank_account_factory( - gr_bbam: BusinessBankAccountManager, -) -> Callable[..., BusinessBankAccount]: - - def _inner( - business_id: PositiveInt, - uuid: UUIDStr | None = None, - transfer_method: TransferMethod | None = None, - account_number: str | None = None, - routing_number: str | None = None, - iban: str | None = None, - swift: str | None = None, - ): - from generalresearch.models.gr.business import TransferMethod - - return gr_bbam.create( - business_id=business_id, - uuid=uuid or uuid4().hex, - transfer_method=transfer_method or TransferMethod.ACH, - account_number=account_number or uuid4().hex[:6], - routing_number=routing_number or uuid4().hex[:6], - iban=iban or uuid4().hex[:6], - swift=swift or uuid4().hex[:6], - ) - - return _inner +@pytest.fixture(scope="session") +def gr_db(django_db_factory: Callable[..., PostgresDsn]) -> PostgresConfig: -@pytest.fixture -def gr_business_address_factory( - gr_bam: BusinessAddressManager, -) -> Callable[..., BusinessAddress]: - - def _inner( - business_id: PositiveInt, - uuid: UUIDStr | None = None, - line_1: str | None = None, - line_2: str | None = None, - city: str | None = None, - state: str | None = None, - postal_code: str | None = None, - phone_number: PhoneNumber | None = None, - country: str | None = None, - ): - uuid = uuid or uuid4().hex - line_1 = line_1 or "abc" - line_2 = line_2 or "bczx" - city = city or "Downingtown" - state = state or "CA" - postal_code = postal_code or "94041" - phone_number = None - country = country or "US" - - return gr_bam.create( - business_id=business_id, - uuid=uuid, - line_1=line_1, - line_2=line_2, - city=city, - state=state, - postal_code=postal_code, - phone_number=phone_number, - country=country, - ) - - return _inner + return PostgresConfig( + dsn=django_db_factory("gr_carer"), + connect_timeout=1, + statement_timeout=5, + ) -@pytest.fixture -def gr_business_factory( - gr_bm: BusinessManager, -) -> Callable[..., Business]: +# === Managers === - def _inner( - uuid: UUIDStr | None = None, - name: str | None = None, - team: Team | None = None, - kind: BusinessType | None = None, - tax_number: str | None = None, - ) -> Business: - from random import randint - uuid = uuid or uuid4().hex - name = name or "< Unknown >" - tax_number = tax_number or str(randint(1, 999_999_999)) +@pytest.fixture(scope="session") +def gr_user_manager( + gr_db: PostgresConfig, gr_redis_config: RedisConfig +) -> GRUserManager: + assert gr_db.dsn.path + assert "/unittest-" in gr_db.dsn.path - return gr_bm.create( - uuid=uuid, name=name, team=team, kind=kind, tax_number=tax_number - ) + from generalresearch.managers.gr.authentication import GRUserManager - return _inner + return GRUserManager(pg_config=gr_db, redis_config=gr_redis_config) -@pytest.fixture -def gr_team( - gr_tm: TeamManager, -) -> Callable[..., Team]: +@pytest.fixture(scope="session") +def gr_team_manager(gr_db: PostgresConfig) -> GRTokenManager: + assert gr_db.dsn.path + assert "/unittest-" in gr_db.dsn.path + + from generalresearch.managers.gr.authentication import GRTokenManager + + return GRTokenManager(pg_config=gr_db) + + +@pytest.fixture(scope="session") +def gr_business_manager( + gr_db: PostgresConfig, gr_redis_config: RedisConfig +) -> BusinessManager: + return BusinessManager(pg_config=gr_db, redis_config=gr_redis_config) + - def _inner(uuid: UUIDStr | None = None, name: str | None = None) -> Team: - uuid = uuid or uuid4().hex - name = name or f"name-{uuid4().hex[:12]}" +@pytest.fixture(scope="session") +def gr_business_bank_account_manager( + gr_db: PostgresConfig, +) -> BusinessBankAccountManager: + return BusinessBankAccountManager(pg_config=gr_db) - return gr_tm.create(uuid=uuid, name=name) - return _inner +@pytest.fixture(scope="session") +def gr_business_address_manager( + gr_db: PostgresConfig, +) -> BusinessAddressManager: + return BusinessAddressManager(pg_config=gr_db) |
