aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuppie2026-09-03 18:03:41 -0600
committerstuppie2026-09-03 18:03:41 -0600
commitc9e1fc6839d8fc3ce145f65ad3c3c628af67626b (patch)
tree127a099cbb581e995178c73c8840e8c58272568b
parenta06fa05a1ffce8f40ec40dec613cc1ac65b9e98a (diff)
downloadgeneralresearch-c9e1fc6839d8fc3ce145f65ad3c3c628af67626b.tar.gz
generalresearch-c9e1fc6839d8fc3ce145f65ad3c3c628af67626b.zip
working TestThlLedgerTxManager. working wall manager
-rw-r--r--test_utils/models/conftest.py5
-rw-r--r--test_utils/models/thl/conftest.py22
-rw-r--r--tests/managers/thl/test_ledger/test_thl_lm_tx.py108
-rw-r--r--tests/managers/thl/test_task_adjustment.py2
4 files changed, 39 insertions, 98 deletions
diff --git a/test_utils/models/conftest.py b/test_utils/models/conftest.py
index 43f18c1..ffce272 100644
--- a/test_utils/models/conftest.py
+++ b/test_utils/models/conftest.py
@@ -12,7 +12,6 @@ from generalresearch.models.thl.survey.model import Buyer, Survey
if TYPE_CHECKING:
from generalresearch.managers.thl.buyer import BuyerManager
- from generalresearch.managers.thl.product import ProductManager
from generalresearch.managers.thl.survey import SurveyManager
from generalresearch.models.thl.product import (
PayoutConfig,
@@ -47,7 +46,6 @@ def payout_config(request: Request) -> PayoutConfig:
def product_user_wallet_yes(
product_factory: Callable[..., Product],
payout_config: PayoutConfig,
- product_manager: ProductManager,
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
@@ -58,7 +56,7 @@ def product_user_wallet_yes(
@pytest.fixture
def product_user_wallet_no(
- product_factory: Callable[..., Product], product_manager: ProductManager
+ product_factory: Callable[..., Product],
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
@@ -68,7 +66,6 @@ def product_user_wallet_no(
@pytest.fixture
def product_amt_true(
product_factory: Callable[..., Product],
- product_manager: ProductManager,
payout_config: PayoutConfig,
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
diff --git a/test_utils/models/thl/conftest.py b/test_utils/models/thl/conftest.py
index 80a80e3..9cb68be 100644
--- a/test_utils/models/thl/conftest.py
+++ b/test_utils/models/thl/conftest.py
@@ -76,21 +76,12 @@ fake = faker.Faker()
# --- Wall ---
-# from generalresearch.models.thl.task_status import StatusCode1
-# # thl_session.append_wall_event(wall)
-# wall.finish(
-# finished=wall.started + timedelta(seconds=randint(a=60 * 2, b=60 * 10)),
-# status=Status.COMPLETE,
-# status_code_1=StatusCode1.COMPLETE,
-# )
-# return wall
-
-
@pytest.fixture
def wall_factory(
wall_manager: WallManager,
bare_session_factory: Callable[..., Session],
session_manager: SessionManager,
+ user_factory: Callable[..., User],
) -> Callable[..., Wall]:
def _inner(
@@ -98,7 +89,7 @@ def wall_factory(
save: bool = True,
session: Session | None = None,
session_id: PositiveInt | None = None,
- user_id: int | None = None,
+ user: User | None = None,
started: datetime | None = None,
source: Source | None = None,
req_survey_id: str | None = None,
@@ -107,9 +98,8 @@ def wall_factory(
uuid_id: str | None = None,
) -> Wall:
"""To be used in tests, where we don't care about certain fields"""
-
+ user = user or user_factory()
if save:
- user_id = user_id or fake.random_int(min=1, max=2_147_483_648)
_wall_started = started or fake.date_time_between(
start_date=datetime(year=1900, month=1, day=1, tzinfo=UTC),
end_date=datetime.now(tz=UTC),
@@ -138,7 +128,7 @@ def wall_factory(
session_manager.get_from_id(session_id=session_id)
if session_id
else None
- ) or bare_session_factory(save=True, user_id=user_id)
+ ) or bare_session_factory(save=True, user=user)
assert session, "Wall factory requires Session"
@@ -262,7 +252,7 @@ def session(
s = bare_session.model_copy()
wall: Wall = wall_factory(
session_id=s.id,
- user_id=s.user_id,
+ user=s.user,
started=s.started,
)
s.append_wall_event(w=wall)
@@ -308,7 +298,7 @@ def session_factory(
w = wall_factory(
session_id=s.id,
source=wall_source,
- user_id=s.user_id,
+ user=s.user,
started=wall_started,
req_cpi=wall_req_cpis[idx] if wall_req_cpis else wall_req_cpi,
)
diff --git a/tests/managers/thl/test_ledger/test_thl_lm_tx.py b/tests/managers/thl/test_ledger/test_thl_lm_tx.py
index cda88da..aa3b378 100644
--- a/tests/managers/thl/test_ledger/test_thl_lm_tx.py
+++ b/tests/managers/thl/test_ledger/test_thl_lm_tx.py
@@ -11,6 +11,9 @@ from uuid import uuid4
import pytest
from generalresearch.currency import USDCent
+from generalresearch.managers.thl.ledger_manager.exceptions import (
+ LedgerTransactionConditionFailedError,
+)
from generalresearch.managers.thl.ledger_manager.ledger import (
LedgerTransaction,
)
@@ -56,17 +59,19 @@ logger = logging.getLogger("LedgerManager")
class TestThlLedgerTxManager:
+ @pytest.fixture(autouse=True)
+ def setup(self, delete_ledger_db, create_main_accounts):
+ delete_ledger_db()
+ create_main_accounts()
def test_create_tx_task_complete(
self,
wall: Wall,
user: User,
account_revenue_task_complete: LedgerAccount,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
):
- create_main_accounts()
tx = thl_ledger_manager.create_tx_task_complete(wall=wall, user=user)
assert isinstance(tx, LedgerTransaction)
@@ -91,14 +96,11 @@ class TestThlLedgerTxManager:
self,
session_factory: Callable[..., Session],
user: User,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
session_manager: SessionManager,
):
- delete_ledger_db()
- create_main_accounts()
+
s1 = session_factory(user=user)
_, status_code_1 = s1.determine_session_status()
@@ -123,15 +125,12 @@ class TestThlLedgerTxManager:
session_factory: Callable[..., Session],
user_factory: Callable[..., User],
product_manager: ProductManager,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
session_manager: SessionManager,
product_factory: Callable[..., Product],
):
- delete_ledger_db()
- create_main_accounts()
+
product = product_factory(
payout_config=PayoutConfig(
payout_transformation=PayoutTransformation(
@@ -168,7 +167,6 @@ class TestThlLedgerTxManager:
self,
session_factory: Callable[..., Session],
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
session_manager: SessionManager,
@@ -196,9 +194,8 @@ class TestThlLedgerTxManager:
def test_create_tx_task_adjustment(
self,
wall_factory: Callable[..., Wall],
- session: Session,
+ bare_session: Session,
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
):
@@ -208,9 +205,8 @@ class TestThlLedgerTxManager:
the transaction comes back with balanced amounts, and that
the name of the Source is in the Tx description
"""
-
wall_status = Status.COMPLETE
- wall: Wall = wall_factory(session=session, wall_status=wall_status)
+ wall: Wall = wall_factory(session=bare_session, wall_status=wall_status)
tx = thl_ledger_manager.create_tx_task_adjustment(wall=wall, user=user)
assert isinstance(tx, LedgerTransaction)
@@ -232,12 +228,11 @@ class TestThlLedgerTxManager:
status, status_code_1 = session.determine_session_status()
thl_net, commission_amount, bp_pay, user_pay = session.determine_payments()
- # The default session fixture is just an unfinished wall event
assert len(session.wall_events) == 1
assert session.finished is None
- assert status == Status.TIMEOUT
+ assert status == Status.FAIL
assert status_code_1 in list(
- WALL_ALLOWED_STATUS_STATUS_CODE.get(Status.TIMEOUT, {})
+ WALL_ALLOWED_STATUS_STATUS_CODE.get(Status.FAIL, {})
)
assert thl_net == Decimal(0)
assert commission_amount == Decimal(0)
@@ -246,7 +241,9 @@ class TestThlLedgerTxManager:
# Update the finished timestamp, but nothing else. This means that
# there is no financial changes needed
- session.update(finished=datetime.now(tz=UTC) + timedelta(minutes=10))
+ session.update(
+ finished=datetime.now(tz=UTC) + timedelta(minutes=10), status=Status.FAIL
+ )
assert session.finished
with caplog.at_level(logging.INFO):
tx = thl_ledger_manager.create_tx_bp_adjustment(session=session)
@@ -295,8 +292,9 @@ class TestThlLedgerTxManager:
assert balance == int(rand_amount) * -1
# Test some basic assertions
- with caplog.at_level(logging.INFO), pytest.raises(
- expected_exception=ValueError
+ with (
+ caplog.at_level(logging.INFO),
+ pytest.raises(expected_exception=LedgerTransactionConditionFailedError),
):
thl_ledger_manager.create_tx_bp_payout(
product=product,
@@ -339,7 +337,6 @@ class TestThlLedgerTxManager:
def test_create_tx_plug_bp_wallet(
self,
product: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -369,7 +366,6 @@ class TestThlLedgerTxManager:
def test_create_tx_plug_bp_wallet_(
self,
product: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -478,11 +474,9 @@ class TestThlLedgerTxManager:
user: User,
product_user_wallet_yes: Product,
user_factory: Callable[..., User],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
):
- delete_ledger_db()
pe = UserPayoutEvent(
uuid=uuid4().hex,
@@ -508,14 +502,10 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
user: User = user_factory(product=product_user_wallet_yes)
user_account = thl_ledger_manager.get_account_or_create_user_wallet(user=user)
@@ -575,7 +565,6 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
):
@@ -626,7 +615,6 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -673,7 +661,6 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -715,7 +702,6 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -750,7 +736,6 @@ class TestThlLedgerTxManager:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -786,17 +771,18 @@ class TestThlLedgerTxManagerFlows:
examples
"""
+ @pytest.fixture(autouse=True)
+ def setup(self, delete_ledger_db, create_main_accounts):
+ delete_ledger_db()
+ create_main_accounts()
+
def test_create_tx_task_complete(
self,
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
- delete_ledger_db: Callable[..., None],
):
- delete_ledger_db()
- create_main_accounts()
wall1 = Wall(
user_id=1,
@@ -868,7 +854,6 @@ class TestThlLedgerTxManagerFlows:
def test_create_transaction_task_complete_1_cent(
self,
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -893,16 +878,12 @@ class TestThlLedgerTxManagerFlows:
def test_create_transaction_bp_payment(
self,
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
- delete_ledger_db: Callable[..., None],
session_factory: Callable[..., Session],
utc_hour_ago: datetime,
):
- delete_ledger_db()
- create_main_accounts()
s1: Session = session_factory(
user=user,
@@ -956,7 +937,6 @@ class TestThlLedgerTxManagerFlows:
self,
user_factory: Callable[..., User],
product_user_wallet_no: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -1000,15 +980,12 @@ class TestThlLedgerTxManagerFlows:
def test_create_transaction_bp_payment_round2(
self,
- delete_ledger_db: Callable[..., None],
user: User,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
+
# user must be no user wallet
# e.g. session 869b5bfa47f44b4f81cd095ed01df2ff this fails if you dont round properly
@@ -1044,7 +1021,6 @@ class TestThlLedgerTxManagerFlows:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
@@ -1086,8 +1062,6 @@ class TestThlLedgerTxManagerFlows:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
session_manager: SessionManager,
wall_manager: WallManager,
@@ -1096,8 +1070,6 @@ class TestThlLedgerTxManagerFlows:
currency: LedgerCurrency,
utc_hour_ago: datetime,
):
- delete_ledger_db()
- create_main_accounts()
user: User = user_factory(product=product_user_wallet_yes)
assert isinstance(user.product, Product)
@@ -1165,20 +1137,20 @@ class TestThlLedgerTxManagerFlows:
class TestThlLedgerManagerAdj:
+ @pytest.fixture(autouse=True)
+ def setup(self, delete_ledger_db, create_main_accounts):
+ delete_ledger_db()
+ create_main_accounts()
def test_create_tx_task_adjustment(
self,
user_factory: Callable[..., User],
product_user_wallet_no: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
utc_hour_ago: datetime,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
user: User = user_factory(product=product_user_wallet_no)
@@ -1272,7 +1244,6 @@ class TestThlLedgerManagerAdj:
self,
user: User,
product_user_wallet_no: Product,
- create_main_accounts: Callable[..., None],
caplog,
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
@@ -1281,10 +1252,7 @@ class TestThlLedgerManagerAdj:
wall_manager: WallManager,
session_factory: Callable[..., Session],
utc_hour_ago: datetime,
- delete_ledger_db: Callable[..., None],
):
- delete_ledger_db()
- create_main_accounts()
s1 = session_factory(
user=user,
@@ -1391,15 +1359,11 @@ class TestThlLedgerManagerAdj:
self,
user_factory: Callable[..., User],
product_user_wallet_no: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
utc_hour_ago: datetime,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
# This failed when I didn't check that `change_commission` > 0 in
# create_transaction_bp_adjustment
@@ -1447,9 +1411,7 @@ class TestThlLedgerManagerAdj:
self,
user_factory: Callable[..., User],
product_user_wallet_no: Product,
- delete_ledger_db: Callable[..., None],
session_factory: Callable[..., Session],
- create_main_accounts: Callable[..., None],
caplog,
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
@@ -1458,8 +1420,7 @@ class TestThlLedgerManagerAdj:
session_manager: SessionManager,
wall_manager: WallManager,
):
- delete_ledger_db()
- create_main_accounts()
+
user: User = user_factory(product=product_user_wallet_no)
s1: Session = session_factory(
user=user, final_status=Status.ABANDON, wall_req_cpi=Decimal(1)
@@ -1521,15 +1482,11 @@ class TestThlLedgerManagerAdj:
self,
user_factory: Callable[..., User],
product_user_wallet_yes: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
caplog,
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
now = datetime.now(UTC) - timedelta(days=1)
user: User = user_factory(product=product_user_wallet_yes)
@@ -1746,16 +1703,13 @@ class TestThlLedgerManagerAdj:
self,
user_factory: Callable[..., User],
product_user_wallet_no: Product,
- create_main_accounts: Callable[..., None],
- delete_ledger_db: Callable[..., None],
caplog,
thl_ledger_manager: ThlLedgerManager,
ledger_manager: LedgerManager,
utc_hour_ago: datetime,
currency: LedgerCurrency,
):
- delete_ledger_db()
- create_main_accounts()
+
user: User = user_factory(product=product_user_wallet_no)
wall1 = Wall(
diff --git a/tests/managers/thl/test_task_adjustment.py b/tests/managers/thl/test_task_adjustment.py
index 323d6db..11dbec4 100644
--- a/tests/managers/thl/test_task_adjustment.py
+++ b/tests/managers/thl/test_task_adjustment.py
@@ -56,7 +56,7 @@ def session_fail(
session = session_factory(started=datetime.now(UTC), user=user)
wall1 = wall_factory(
session_id=session.id,
- user_id=user.user_id,
+ user=user,
source=Source.DYNATA,
req_survey_id="72723",
req_cpi=Decimal("3.22"),