aboutsummaryrefslogtreecommitdiff
path: root/test_utils/managers/conftest.py
diff options
context:
space:
mode:
authorMax Nanis2026-03-06 16:49:46 -0500
committerMax Nanis2026-03-06 16:49:46 -0500
commit91d040211a4ed6e4157896256a762d3854777b5e (patch)
treecd95922ea4257dc8d3f4e4cbe8534474709a20dc /test_utils/managers/conftest.py
downloadgeneralresearch-91d040211a4ed6e4157896256a762d3854777b5e.tar.gz
generalresearch-91d040211a4ed6e4157896256a762d3854777b5e.zip
Initial commitv3.3.4
Diffstat (limited to 'test_utils/managers/conftest.py')
-rw-r--r--test_utils/managers/conftest.py701
1 files changed, 701 insertions, 0 deletions
diff --git a/test_utils/managers/conftest.py b/test_utils/managers/conftest.py
new file mode 100644
index 0000000..3a237d1
--- /dev/null
+++ b/test_utils/managers/conftest.py
@@ -0,0 +1,701 @@
+from typing import Callable, TYPE_CHECKING
+
+import pymysql
+import pytest
+
+from generalresearch.managers.base import Permission
+from generalresearch.models import Source
+from test_utils.managers.cashout_methods import (
+ EXAMPLE_TANGO_CASHOUT_METHODS,
+ AMT_ASSIGNMENT_CASHOUT_METHOD,
+ AMT_BONUS_CASHOUT_METHOD,
+)
+
+if TYPE_CHECKING:
+ from generalresearch.grliq.managers.forensic_data import (
+ GrlIqDataManager,
+ )
+ from generalresearch.grliq.managers.forensic_events import (
+ GrlIqEventManager,
+ )
+ from generalresearch.grliq.managers.forensic_results import (
+ GrlIqCategoryResultsReader,
+ )
+ from generalresearch.managers.thl.userhealth import AuditLogManager
+ from generalresearch.managers.thl.payout import (
+ BusinessPayoutEventManager,
+ )
+ from generalresearch.managers.thl.maxmind.basic import (
+ MaxmindBasicManager,
+ )
+
+ from generalresearch.managers.gr.authentication import (
+ GRUserManager,
+ GRTokenManager,
+ )
+ from generalresearch.managers.gr.business import (
+ BusinessManager,
+ BusinessAddressManager,
+ BusinessBankAccountManager,
+ )
+ from generalresearch.managers.gr.team import (
+ TeamManager,
+ MembershipManager,
+ )
+ from generalresearch.managers.thl.contest_manager import ContestManager
+ from generalresearch.managers.thl.ipinfo import (
+ GeoIpInfoManager,
+ IPGeonameManager,
+ IPInformationManager,
+ )
+ from generalresearch.managers.thl.ledger_manager.ledger import (
+ LedgerTransactionManager,
+ LedgerManager,
+ LedgerAccountManager,
+ )
+ from generalresearch.managers.thl.ledger_manager.thl_ledger import (
+ ThlLedgerManager,
+ )
+ from generalresearch.managers.thl.maxmind import MaxmindManager
+ from generalresearch.managers.thl.payout import PayoutEventManager
+ from generalresearch.managers.thl.payout import (
+ PayoutEventManager,
+ UserPayoutEventManager,
+ BrokerageProductPayoutEventManager,
+ )
+ from generalresearch.managers.thl.product import ProductManager
+ from generalresearch.managers.thl.session import SessionManager
+ from generalresearch.managers.thl.user_manager.user_manager import (
+ UserManager,
+ )
+ from generalresearch.managers.thl.user_manager.user_metadata_manager import (
+ UserMetadataManager,
+ )
+ from generalresearch.managers.thl.userhealth import (
+ AuditLogManager,
+ IPRecordManager,
+ UserIpHistoryManager,
+ IPGeonameManager,
+ IPInformationManager,
+ IPRecordManager,
+ )
+ from generalresearch.managers.thl.wall import (
+ WallManager,
+ WallCacheManager,
+ )
+ from generalresearch.managers.thl.task_adjustment import (
+ TaskAdjustmentManager,
+ )
+
+
+# === THL ===
+
+
+@pytest.fixture(scope="session")
+def ltxm(thl_web_rw, thl_redis_config) -> "LedgerTransactionManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ledger_manager.ledger import (
+ LedgerTransactionManager,
+ )
+
+ return LedgerTransactionManager(
+ sql_helper=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ testing=True,
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def lam(thl_web_rw, thl_redis_config) -> "LedgerAccountManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ledger_manager.ledger import (
+ LedgerAccountManager,
+ )
+
+ return LedgerAccountManager(
+ pg_config=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ testing=True,
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def lm(thl_web_rw, thl_redis_config) -> "LedgerManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ledger_manager.ledger import (
+ LedgerManager,
+ )
+
+ return LedgerManager(
+ pg_config=thl_web_rw,
+ permissions=[
+ Permission.CREATE,
+ Permission.READ,
+ Permission.UPDATE,
+ Permission.DELETE,
+ ],
+ testing=True,
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def thl_lm(thl_web_rw, thl_redis_config) -> "ThlLedgerManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ledger_manager.thl_ledger import (
+ ThlLedgerManager,
+ )
+
+ return ThlLedgerManager(
+ pg_config=thl_web_rw,
+ permissions=[
+ Permission.CREATE,
+ Permission.READ,
+ Permission.UPDATE,
+ Permission.DELETE,
+ ],
+ testing=True,
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def payout_event_manager(thl_web_rw, thl_redis_config) -> "PayoutEventManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.payout import PayoutEventManager
+
+ return PayoutEventManager(
+ pg_config=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def user_payout_event_manager(thl_web_rw, thl_redis_config) -> "UserPayoutEventManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.payout import UserPayoutEventManager
+
+ return UserPayoutEventManager(
+ pg_config=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def brokerage_product_payout_event_manager(
+ thl_web_rw, thl_redis_config
+) -> "BrokerageProductPayoutEventManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.payout import (
+ BrokerageProductPayoutEventManager,
+ )
+
+ return BrokerageProductPayoutEventManager(
+ pg_config=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def business_payout_event_manager(
+ thl_web_rw, thl_redis_config
+) -> "BusinessPayoutEventManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.payout import (
+ BusinessPayoutEventManager,
+ )
+
+ return BusinessPayoutEventManager(
+ pg_config=thl_web_rw,
+ permissions=[Permission.CREATE, Permission.READ],
+ redis_config=thl_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def product_manager(thl_web_rw) -> "ProductManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.product import ProductManager
+
+ return ProductManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def user_manager(settings, thl_web_rw, thl_web_rr) -> "UserManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+ assert "/unittest-" in thl_web_rr.dsn.path
+
+ from generalresearch.managers.thl.user_manager.user_manager import (
+ UserManager,
+ )
+
+ return UserManager(
+ pg_config=thl_web_rw,
+ pg_config_rr=thl_web_rr,
+ redis=settings.redis,
+ )
+
+
+@pytest.fixture(scope="session")
+def user_metadata_manager(thl_web_rw) -> "UserMetadataManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.user_manager.user_metadata_manager import (
+ UserMetadataManager,
+ )
+
+ return UserMetadataManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def session_manager(thl_web_rw) -> "SessionManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.session import SessionManager
+
+ return SessionManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def wall_manager(thl_web_rw) -> "WallManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.wall import WallManager
+
+ return WallManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def wall_cache_manager(thl_web_rw, thl_redis_config) -> "WallCacheManager":
+ # assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.wall import WallCacheManager
+
+ return WallCacheManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def task_adjustment_manager(thl_web_rw) -> "TaskAdjustmentManager":
+ # assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.task_adjustment import (
+ TaskAdjustmentManager,
+ )
+
+ return TaskAdjustmentManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def contest_manager(thl_web_rw) -> "ContestManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.contest_manager import ContestManager
+
+ return ContestManager(
+ pg_config=thl_web_rw,
+ permissions=[
+ Permission.CREATE,
+ Permission.READ,
+ Permission.UPDATE,
+ Permission.DELETE,
+ ],
+ )
+
+
+@pytest.fixture(scope="session")
+def category_manager(thl_web_rw):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.category import CategoryManager
+
+ return CategoryManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def buyer_manager(thl_web_rw):
+ # assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.buyer import BuyerManager
+
+ return BuyerManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def survey_manager(thl_web_rw):
+ # assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.survey import SurveyManager
+
+ return SurveyManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def surveystat_manager(thl_web_rw):
+ # assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.survey import SurveyStatManager
+
+ return SurveyStatManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def surveypenalty_manager(thl_redis_config):
+ from generalresearch.managers.thl.survey_penalty import SurveyPenaltyManager
+
+ return SurveyPenaltyManager(redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def upk_schema_manager(thl_web_rw):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.profiling.schema import (
+ UpkSchemaManager,
+ )
+
+ return UpkSchemaManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def user_upk_manager(thl_web_rw, thl_redis_config):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.profiling.user_upk import (
+ UserUpkManager,
+ )
+
+ return UserUpkManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def question_manager(thl_web_rw, thl_redis_config):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.profiling.question import (
+ QuestionManager,
+ )
+
+ return QuestionManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def uqa_manager(thl_web_rw, thl_redis_config):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.profiling.uqa import UQAManager
+
+ return UQAManager(redis_config=thl_redis_config, pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="function")
+def uqa_manager_clear_cache(uqa_manager, user):
+ # On successive py-test/jenkins runs, the cache may contain
+ # the previous run's info (keyed under the same user_id)
+ uqa_manager.clear_cache(user)
+ yield
+ uqa_manager.clear_cache(user)
+
+
+@pytest.fixture(scope="session")
+def audit_log_manager(thl_web_rw) -> "AuditLogManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.userhealth import AuditLogManager
+
+ return AuditLogManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def ip_geoname_manager(thl_web_rw) -> "IPGeonameManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ipinfo import IPGeonameManager
+
+ return IPGeonameManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def ip_information_manager(thl_web_rw) -> "IPInformationManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ipinfo import IPInformationManager
+
+ return IPInformationManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def ip_record_manager(thl_web_rw, thl_redis_config) -> "IPRecordManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.userhealth import IPRecordManager
+
+ return IPRecordManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def user_iphistory_manager(thl_web_rw, thl_redis_config) -> "UserIpHistoryManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.userhealth import (
+ UserIpHistoryManager,
+ )
+
+ return UserIpHistoryManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="function")
+def user_iphistory_manager_clear_cache(user_iphistory_manager, user):
+ # On successive py-test/jenkins runs, the cache may contain
+ # the previous run's info (keyed under the same user_id)
+ user_iphistory_manager.delete_user_ip_history_cache(user_id=user.user_id)
+ yield
+ user_iphistory_manager.delete_user_ip_history_cache(user_id=user.user_id)
+
+
+@pytest.fixture(scope="session")
+def geoipinfo_manager(thl_web_rw, thl_redis_config) -> "GeoIpInfoManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.ipinfo import GeoIpInfoManager
+
+ return GeoIpInfoManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def maxmind_basic_manager() -> "MaxmindBasicManager":
+ from generalresearch.managers.thl.maxmind.basic import (
+ MaxmindBasicManager,
+ )
+
+ return MaxmindBasicManager(data_dir="/tmp/")
+
+
+@pytest.fixture(scope="session")
+def maxmind_manager(thl_web_rw, thl_redis_config) -> "MaxmindManager":
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ from generalresearch.managers.thl.maxmind import MaxmindManager
+
+ return MaxmindManager(pg_config=thl_web_rw, redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def cashout_method_manager(thl_web_rw):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.cashout_method import (
+ CashoutMethodManager,
+ )
+
+ return CashoutMethodManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def event_manager(thl_redis_config):
+ from generalresearch.managers.events import EventManager
+
+ return EventManager(redis_config=thl_redis_config)
+
+
+@pytest.fixture(scope="session")
+def user_streak_manager(thl_web_rw):
+ assert "/unittest-" in thl_web_rw.dsn.path
+ from generalresearch.managers.thl.user_streak import (
+ UserStreakManager,
+ )
+
+ return UserStreakManager(pg_config=thl_web_rw)
+
+
+@pytest.fixture(scope="session")
+def uqa_db_index(thl_web_rw):
+ # There were some custom indices created not through django.
+ # Make sure the index used in the index hint exists
+ assert "/unittest-" in thl_web_rw.dsn.path
+
+ # query = f"""create index idx_user_id
+ # on `{thl_web_rw.db}`.marketplace_userquestionanswer (user_id);"""
+ # try:
+ # thl_web_rw.execute_sql_query(query, commit=True)
+ # except pymysql.OperationalError as e:
+ # if "Duplicate key name 'idx_user_id'" not in str(e):
+ # raise
+ return None
+
+
+@pytest.fixture(scope="session")
+def delete_cashoutmethod_db(thl_web_rw) -> Callable:
+ def _delete_cashoutmethod_db():
+ thl_web_rw.execute_write(
+ query="DELETE FROM accounting_cashoutmethod;",
+ )
+
+ return _delete_cashoutmethod_db
+
+
+@pytest.fixture(scope="session")
+def setup_cashoutmethod_db(cashout_method_manager, delete_cashoutmethod_db):
+ delete_cashoutmethod_db()
+ for x in EXAMPLE_TANGO_CASHOUT_METHODS:
+ cashout_method_manager.create(x)
+ cashout_method_manager.create(AMT_ASSIGNMENT_CASHOUT_METHOD)
+ cashout_method_manager.create(AMT_BONUS_CASHOUT_METHOD)
+ return None
+
+
+# === THL: Marketplaces ===
+
+
+@pytest.fixture(scope="session")
+def spectrum_manager(spectrum_rw):
+ from generalresearch.managers.spectrum.survey import (
+ SpectrumSurveyManager,
+ )
+
+ return SpectrumSurveyManager(sql_helper=spectrum_rw)
+
+
+# === GR ===
+@pytest.fixture(scope="session")
+def business_manager(gr_db, gr_redis_config) -> "BusinessManager":
+ from generalresearch.redis_helper import RedisConfig
+
+ assert "/unittest-" in gr_db.dsn.path
+ assert isinstance(gr_redis_config, RedisConfig)
+
+ from generalresearch.managers.gr.business import BusinessManager
+
+ return BusinessManager(
+ pg_config=gr_db,
+ redis_config=gr_redis_config,
+ )
+
+
+@pytest.fixture(scope="session")
+def business_address_manager(gr_db) -> "BusinessAddressManager":
+ assert "/unittest-" in gr_db.dsn.path
+
+ from generalresearch.managers.gr.business import BusinessAddressManager
+
+ return BusinessAddressManager(pg_config=gr_db)
+
+
+@pytest.fixture(scope="session")
+def business_bank_account_manager(gr_db) -> "BusinessBankAccountManager":
+ assert "/unittest-" in gr_db.dsn.path
+
+ from generalresearch.managers.gr.business import (
+ BusinessBankAccountManager,
+ )
+
+ return BusinessBankAccountManager(pg_config=gr_db)
+
+
+@pytest.fixture(scope="session")
+def team_manager(gr_db, gr_redis_config) -> "TeamManager":
+ assert "/unittest-" in gr_db.dsn.path
+
+ from generalresearch.managers.gr.team import TeamManager
+
+ return TeamManager(pg_config=gr_db, redis_config=gr_redis_config)
+
+
+@pytest.fixture(scope="session")
+def gr_um(gr_db, gr_redis_config) -> "GRUserManager":
+ assert "/unittest-" in gr_db.dsn.path
+
+ from generalresearch.managers.gr.authentication import GRUserManager
+
+ return GRUserManager(pg_config=gr_db, redis_config=gr_redis_config)
+
+
+@pytest.fixture(scope="session")
+def gr_tm(gr_db) -> "GRTokenManager":
+ 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 membership_manager(gr_db) -> "MembershipManager":
+ assert "/unittest-" in gr_db.dsn.path
+
+ from generalresearch.managers.gr.team import MembershipManager
+
+ return MembershipManager(pg_config=gr_db)
+
+
+# === GRL IQ ===
+
+
+@pytest.fixture(scope="session")
+def grliq_dm(grliq_db) -> "GrlIqDataManager":
+ assert "/unittest-" in grliq_db.dsn.path
+
+ from generalresearch.grliq.managers.forensic_data import (
+ GrlIqDataManager,
+ )
+
+ return GrlIqDataManager(postgres_config=grliq_db)
+
+
+@pytest.fixture(scope="session")
+def grliq_em(grliq_db) -> "GrlIqEventManager":
+ assert "/unittest-" in grliq_db.dsn.path
+
+ from generalresearch.grliq.managers.forensic_events import (
+ GrlIqEventManager,
+ )
+
+ return GrlIqEventManager(postgres_config=grliq_db)
+
+
+@pytest.fixture(scope="session")
+def grliq_crr(grliq_db) -> "GrlIqCategoryResultsReader":
+ assert "/unittest-" in grliq_db.dsn.path
+
+ from generalresearch.grliq.managers.forensic_results import (
+ GrlIqCategoryResultsReader,
+ )
+
+ return GrlIqCategoryResultsReader(postgres_config=grliq_db)
+
+
+@pytest.fixture(scope="session")
+def delete_buyers_surveys(thl_web_rw, buyer_manager):
+ # assert "/unittest-" in thl_web_rw.dsn.path
+ thl_web_rw.execute_write(
+ """
+ DELETE FROM marketplace_surveystat
+ WHERE survey_id IN (
+ SELECT id
+ FROM marketplace_survey
+ WHERE source = %(source)s
+ );""",
+ params={"source": Source.TESTING.value},
+ )
+ thl_web_rw.execute_write(
+ """
+ DELETE FROM marketplace_survey
+ WHERE buyer_id IN (
+ SELECT id
+ FROM marketplace_buyer
+ WHERE source = %(source)s
+ );""",
+ params={"source": Source.TESTING.value},
+ )
+ thl_web_rw.execute_write(
+ """
+ DELETE from marketplace_buyer
+ WHERE source=%(source)s;
+ """,
+ params={"source": Source.TESTING.value},
+ )
+ buyer_manager.populate_caches()