diff options
| author | stuppie | 2026-09-03 18:03:41 -0600 |
|---|---|---|
| committer | stuppie | 2026-09-03 18:03:41 -0600 |
| commit | c9e1fc6839d8fc3ce145f65ad3c3c628af67626b (patch) | |
| tree | 127a099cbb581e995178c73c8840e8c58272568b | |
| parent | a06fa05a1ffce8f40ec40dec613cc1ac65b9e98a (diff) | |
| download | generalresearch-c9e1fc6839d8fc3ce145f65ad3c3c628af67626b.tar.gz generalresearch-c9e1fc6839d8fc3ce145f65ad3c3c628af67626b.zip | |
working TestThlLedgerTxManager. working wall manager
| -rw-r--r-- | test_utils/models/conftest.py | 5 | ||||
| -rw-r--r-- | test_utils/models/thl/conftest.py | 22 | ||||
| -rw-r--r-- | tests/managers/thl/test_ledger/test_thl_lm_tx.py | 108 | ||||
| -rw-r--r-- | tests/managers/thl/test_task_adjustment.py | 2 |
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"), |
