aboutsummaryrefslogtreecommitdiff
path: root/test_utils/models/ledger
diff options
context:
space:
mode:
authorstuppie2026-09-07 11:47:43 -0600
committerstuppie2026-09-07 11:47:43 -0600
commit092960233652cce1f4dc7841856034a6635e9cd9 (patch)
tree46e5fcd4d1e1b7ed0b987980c6c67ffa6e6b45c7 /test_utils/models/ledger
parent80fd8aab4c7271ddb619b0de18741d7ac77b490b (diff)
parent242579a44855873d5e054e375440e9d3492cd682 (diff)
downloadgeneralresearch-092960233652cce1f4dc7841856034a6635e9cd9.tar.gz
generalresearch-092960233652cce1f4dc7841856034a6635e9cd9.zip
Merge branch 'master' into dev-greg
Diffstat (limited to 'test_utils/models/ledger')
-rw-r--r--test_utils/models/ledger/conftest.py274
1 files changed, 141 insertions, 133 deletions
diff --git a/test_utils/models/ledger/conftest.py b/test_utils/models/ledger/conftest.py
index 5bef113..9ee0df2 100644
--- a/test_utils/models/ledger/conftest.py
+++ b/test_utils/models/ledger/conftest.py
@@ -1,43 +1,39 @@
from __future__ import annotations
+from collections.abc import Callable
from datetime import datetime
from decimal import Decimal
from random import randint
-from typing import TYPE_CHECKING, Callable
+from typing import TYPE_CHECKING
from uuid import uuid4
import pytest
-from fastapi import Request
+from pytest import FixtureRequest as Request
from generalresearch.currency import USDCent
-from generalresearch.managers.base import PostgresManager
-from test_utils.models.conftest import (
- payout_config,
- product_amt_true,
- product_user_wallet_no,
- product_user_wallet_yes,
- session,
- session_factory,
- user_factory,
- wall,
- wall_factory,
-)
-
-_ = (
- user_factory,
- product_user_wallet_no,
- wall,
- product_amt_true,
- product_user_wallet_yes,
- session_factory,
- session,
- wall_factory,
- payout_config,
-)
-if TYPE_CHECKING:
+# from test_utils.models.conftest import (
+# payout_config,
+# product_amt_true,
+# product_user_wallet_no,
+# product_user_wallet_yes,
+# )
+
+# _ = (
+# user_factory,
+# product_user_wallet_no,
+# wall,
+# product_amt_true,
+# product_user_wallet_yes,
+# session_factory,
+# session,
+# wall_factory,
+# payout_config,
+# )
+if TYPE_CHECKING:
from generalresearch.currency import LedgerCurrency
+ from generalresearch.managers.base import PostgresManager
from generalresearch.managers.thl.ledger_manager.ledger import LedgerManager
from generalresearch.managers.thl.ledger_manager.thl_ledger import (
ThlLedgerManager,
@@ -62,7 +58,7 @@ if TYPE_CHECKING:
@pytest.fixture
def ledger_account(
- request: Request, lm: LedgerManager, currency: LedgerCurrency
+ request: Request, ledger_manager: LedgerManager, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
@@ -84,14 +80,14 @@ def ledger_account(
account_type=account_type,
normal_balance=direction,
)
- return lm.create_account(account=acct_model)
+ return ledger_manager.create_account(account=acct_model)
@pytest.fixture
def ledger_account_factory(
request: Request,
- thl_lm: ThlLedgerManager,
- lm: LedgerManager,
+ thl_ledger_manager: ThlLedgerManager,
+ ledger_manager: LedgerManager,
currency: LedgerCurrency,
) -> Callable[..., LedgerAccount]:
@@ -106,7 +102,7 @@ def ledger_account_factory(
account_type: AccountType = AccountType.CASH,
direction: Direction = Direction.CREDIT,
) -> LedgerAccount:
- thl_lm.get_account_or_create_bp_wallet(product=product)
+ thl_ledger_manager.get_account_or_create_bp_wallet(product=product)
acct_uuid = uuid4().hex
qn = f"{currency}:{account_type}:{acct_uuid}"
@@ -118,14 +114,14 @@ def ledger_account_factory(
account_type=account_type,
normal_balance=direction,
)
- return lm.create_account(account=acct_model)
+ return ledger_manager.create_account(account=acct_model)
return _inner
@pytest.fixture
def ledger_account_credit(
- request: Request, lm: LedgerManager, currency: LedgerCurrency
+ request: Request, ledger_manager: LedgerManager, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import AccountType, Direction
@@ -143,12 +139,12 @@ def ledger_account_credit(
account_type=account_type,
normal_balance=Direction.CREDIT,
)
- return lm.create_account(account=acct_model)
+ return ledger_manager.create_account(account=acct_model)
@pytest.fixture
def ledger_account_debit(
- request: Request, lm: LedgerManager, currency: LedgerCurrency
+ request: Request, ledger_manager: LedgerManager, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import AccountType, Direction
@@ -166,11 +162,11 @@ def ledger_account_debit(
account_type=account_type,
normal_balance=Direction.DEBIT,
)
- return lm.create_account(account=acct_model)
+ return ledger_manager.create_account(account=acct_model)
@pytest.fixture
-def tag(request: Request, lm: LedgerManager) -> str:
+def tag(request: Request) -> str:
from generalresearch.currency import LedgerCurrency
return (
@@ -190,23 +186,24 @@ def usd_cent(request: Request) -> USDCent:
def bp_payout_event(
product: Product,
usd_cent: USDCent,
- business_payout_event_manager: BusinessPayoutEventManager,
- thl_lm: ThlLedgerManager,
+ brokerage_product_payout_event_manager: BrokerageProductPayoutEvent,
+ thl_ledger_manager: ThlLedgerManager,
) -> BrokerageProductPayoutEvent:
- return business_payout_event_manager.create_bp_payout_event(
- thl_ledger_manager=thl_lm,
+ _ext_ref_id = f"tx-{uuid4().hex[:7]}"
+
+ return brokerage_product_payout_event_manager.create_bp_payout_event(
+ thl_ledger_manager=thl_ledger_manager,
+ ext_ref_id=_ext_ref_id,
product=product,
amount=usd_cent,
- skip_wallet_balance_check=True,
- skip_one_per_day_check=True,
)
@pytest.fixture
def bp_payout_event_factory(
brokerage_product_payout_event_manager: BrokerageProductPayoutEventManager,
- thl_lm: ThlLedgerManager,
+ thl_ledger_manager: ThlLedgerManager,
) -> Callable[..., BrokerageProductPayoutEvent]:
def _inner(
@@ -214,7 +211,7 @@ def bp_payout_event_factory(
) -> BrokerageProductPayoutEvent:
return brokerage_product_payout_event_manager.create_bp_payout_event(
- thl_ledger_manager=thl_lm,
+ thl_ledger_manager=thl_ledger_manager,
product=product,
amount=usd_cent,
ext_ref_id=ext_ref_id,
@@ -226,10 +223,12 @@ def bp_payout_event_factory(
@pytest.fixture
-def currency(lm: LedgerManager) -> LedgerCurrency:
+def currency(ledger_manager: LedgerManager) -> LedgerCurrency:
# return request.param if hasattr(request, "currency") else LedgerCurrency.TEST
- assert lm.currency, "LedgerManager must have a currency specified for these tests"
- return lm.currency
+ assert (
+ ledger_manager.currency
+ ), "LedgerManager must have a currency specified for these tests"
+ return ledger_manager.currency
@pytest.fixture
@@ -249,7 +248,7 @@ def ledger_tx(
tag: str,
currency: LedgerCurrency,
tx_metadata: dict[str, str] | None,
- lm: LedgerManager,
+ ledger_manager: LedgerManager,
) -> LedgerTransaction:
from generalresearch.models.thl.ledger import Direction, LedgerEntry
@@ -268,12 +267,12 @@ def ledger_tx(
),
]
- return lm.create_tx(entries=entries, tag=tag, metadata=tx_metadata)
+ return ledger_manager.create_tx(entries=entries, tag=tag, metadata=tx_metadata)
@pytest.fixture
def create_main_accounts(
- lm: LedgerManager, currency: LedgerCurrency
+ ledger_manager: LedgerManager, currency: LedgerCurrency
) -> Callable[..., None]:
def _inner() -> None:
@@ -288,9 +287,9 @@ def create_main_accounts(
qualified_name=f"{currency.value}:revenue:task_complete",
normal_balance=Direction.CREDIT,
account_type=AccountType.REVENUE,
- currency=lm.currency,
+ currency=ledger_manager.currency,
)
- lm.get_account_or_create(account=account)
+ ledger_manager.get_account_or_create(account=account)
account = LedgerAccount(
display_name="Operating Cash Account",
@@ -300,7 +299,7 @@ def create_main_accounts(
currency=currency,
)
- lm.get_account_or_create(account=account)
+ ledger_manager.get_account_or_create(account=account)
return _inner
@@ -324,7 +323,7 @@ def delete_ledger_db(thl_web_rw: PostgresManager) -> Callable[..., None]:
@pytest.fixture
def wipe_main_accounts(
- thl_web_rw: PostgresManager, lm: LedgerManager, currency: LedgerCurrency
+ thl_web_rw: PostgresManager, ledger_manager: LedgerManager, currency: LedgerCurrency
) -> Callable[..., None]:
def _inner() -> None:
@@ -394,7 +393,9 @@ def wipe_main_accounts(
@pytest.fixture
-def account_cash(lm: LedgerManager, currency: LedgerCurrency) -> LedgerAccount:
+def account_cash(
+ ledger_manager: LedgerManager, currency: LedgerCurrency
+) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
Direction,
@@ -408,12 +409,12 @@ def account_cash(lm: LedgerManager, currency: LedgerCurrency) -> LedgerAccount:
account_type=AccountType.CASH,
currency=currency,
)
- return lm.get_account_or_create(account=account)
+ return ledger_manager.get_account_or_create(account=account)
@pytest.fixture
def account_revenue_task_complete(
- lm: LedgerManager, currency: LedgerCurrency
+ ledger_manager: LedgerManager, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
@@ -428,11 +429,13 @@ def account_revenue_task_complete(
account_type=AccountType.REVENUE,
currency=currency,
)
- return lm.get_account_or_create(account=account)
+ return ledger_manager.get_account_or_create(account=account)
@pytest.fixture
-def account_expense_tango(lm: LedgerManager, currency: LedgerCurrency) -> LedgerAccount:
+def account_expense_tango(
+ ledger_manager: LedgerManager, currency: LedgerCurrency
+) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
Direction,
@@ -446,12 +449,12 @@ def account_expense_tango(lm: LedgerManager, currency: LedgerCurrency) -> Ledger
account_type=AccountType.EXPENSE,
currency=currency,
)
- return lm.get_account_or_create(account=account)
+ return ledger_manager.get_account_or_create(account=account)
@pytest.fixture
def user_account_user_wallet(
- lm: LedgerManager, user: User, currency: LedgerCurrency
+ ledger_manager: LedgerManager, user: User, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
@@ -468,12 +471,12 @@ def user_account_user_wallet(
reference_uuid=user.uuid,
currency=currency,
)
- return lm.get_account_or_create(account=account)
+ return ledger_manager.get_account_or_create(account=account)
@pytest.fixture
def product_account_bp_wallet(
- lm: LedgerManager, product: Product, currency: LedgerCurrency
+ ledger_manager: LedgerManager, product: Product, currency: LedgerCurrency
) -> LedgerAccount:
from generalresearch.models.thl.ledger import (
AccountType,
@@ -492,83 +495,86 @@ def product_account_bp_wallet(
"currency": currency,
}
)
- return lm.get_account_or_create(account=account)
+ return ledger_manager.get_account_or_create(account=account)
@pytest.fixture
def setup_accounts(
product_factory: Callable[..., Product],
- lm: LedgerManager,
+ ledger_manager: LedgerManager,
user: User,
currency: LedgerCurrency,
-) -> None:
+) -> Callable[..., None]:
from generalresearch.models.thl.ledger import (
AccountType,
Direction,
LedgerAccount,
)
- # BP's wallet and a revenue from their commissions account.
- p1 = product_factory()
+ def _inner():
+ # BP's wallet and a revenue from their commissions account.
+ p1 = product_factory()
- account = LedgerAccount(
- display_name=f"Revenue from {p1.name} commission",
- qualified_name=f"{currency.value}:revenue:bp_commission:{p1.uuid}",
- normal_balance=Direction.CREDIT,
- account_type=AccountType.REVENUE,
- reference_type="bp",
- reference_uuid=p1.uuid,
- currency=currency,
- )
- lm.get_account_or_create(account=account)
+ account = LedgerAccount(
+ display_name=f"Revenue from {p1.name} commission",
+ qualified_name=f"{currency.value}:revenue:bp_commission:{p1.uuid}",
+ normal_balance=Direction.CREDIT,
+ account_type=AccountType.REVENUE,
+ reference_type="bp",
+ reference_uuid=p1.uuid,
+ currency=currency,
+ )
+ ledger_manager.get_account_or_create(account=account)
+
+ account = LedgerAccount.model_validate(
+ {
+ "display_name": f"{p1.name} Wallet",
+ "qualified_name": f"{currency.value}:bp_wallet:{p1.uuid}",
+ "normal_balance": Direction.CREDIT,
+ "account_type": AccountType.BP_WALLET,
+ "reference_type": "bp",
+ "reference_uuid": p1.uuid,
+ "currency": currency,
+ }
+ )
+ ledger_manager.get_account_or_create(account=account)
- account = LedgerAccount.model_validate(
- {
- "display_name": f"{p1.name} Wallet",
- "qualified_name": f"{currency.value}:bp_wallet:{p1.uuid}",
- "normal_balance": Direction.CREDIT,
- "account_type": AccountType.BP_WALLET,
- "reference_type": "bp",
- "reference_uuid": p1.uuid,
- "currency": currency,
- }
- )
- lm.get_account_or_create(account=account)
+ # BP's wallet, user's wallet, and a revenue from their commissions account.
+ p2 = product_factory()
+ account = LedgerAccount(
+ display_name=f"Revenue from {p2.name} commission",
+ qualified_name=f"{currency.value}:revenue:bp_commission:{p2.uuid}",
+ normal_balance=Direction.CREDIT,
+ account_type=AccountType.REVENUE,
+ reference_type="bp",
+ reference_uuid=p2.uuid,
+ currency=currency,
+ )
+ ledger_manager.get_account_or_create(account)
- # BP's wallet, user's wallet, and a revenue from their commissions account.
- p2 = product_factory()
- account = LedgerAccount(
- display_name=f"Revenue from {p2.name} commission",
- qualified_name=f"{currency.value}:revenue:bp_commission:{p2.uuid}",
- normal_balance=Direction.CREDIT,
- account_type=AccountType.REVENUE,
- reference_type="bp",
- reference_uuid=p2.uuid,
- currency=currency,
- )
- lm.get_account_or_create(account)
+ account = LedgerAccount(
+ display_name=f"{p2.name} Wallet",
+ qualified_name=f"{currency.value}:bp_wallet:{p2.uuid}",
+ normal_balance=Direction.CREDIT,
+ account_type=AccountType.BP_WALLET,
+ reference_type="bp",
+ reference_uuid=p2.uuid,
+ currency=currency,
+ )
+ ledger_manager.get_account_or_create(account)
- account = LedgerAccount(
- display_name=f"{p2.name} Wallet",
- qualified_name=f"{currency.value}:bp_wallet:{p2.uuid}",
- normal_balance=Direction.CREDIT,
- account_type=AccountType.BP_WALLET,
- reference_type="bp",
- reference_uuid=p2.uuid,
- currency=currency,
- )
- lm.get_account_or_create(account)
+ account = LedgerAccount(
+ display_name=f"{user.uuid} Wallet",
+ qualified_name=f"{currency.value}:user_wallet:{user.uuid}",
+ normal_balance=Direction.CREDIT,
+ account_type=AccountType.USER_WALLET,
+ reference_type="user",
+ reference_uuid=user.uuid,
+ currency="test",
+ )
+ ledger_manager.get_account_or_create(account=account)
- account = LedgerAccount(
- display_name=f"{user.uuid} Wallet",
- qualified_name=f"{currency.value}:user_wallet:{user.uuid}",
- normal_balance=Direction.CREDIT,
- account_type=AccountType.USER_WALLET,
- reference_type="user",
- reference_uuid=user.uuid,
- currency="test",
- )
- lm.get_account_or_create(account=account)
+ return _inner
@pytest.fixture
@@ -577,7 +583,7 @@ def session_with_tx_factory(
session_manager: SessionManager,
wall_manager: WallManager,
utc_hour_ago: datetime,
- thl_lm: ThlLedgerManager,
+ thl_ledger_manager: ThlLedgerManager,
) -> Callable[..., Session]:
from generalresearch.models.thl.session import (
@@ -618,14 +624,16 @@ def session_with_tx_factory(
status_code_1=status_code_1,
)
- thl_lm.create_tx_task_complete(
+ thl_ledger_manager.create_tx_task_complete(
wall=last_wall,
user=user,
created=last_wall.finished,
force=True,
)
- thl_lm.create_tx_bp_payment(session=s, created=last_wall.finished, force=True)
+ thl_ledger_manager.create_tx_bp_payment(
+ session=s, created=last_wall.finished, force=True
+ )
return s
@@ -636,7 +644,7 @@ def session_with_tx_factory(
def adj_to_fail_with_tx_factory(
session_manager: SessionManager,
wall_manager: WallManager,
- thl_lm: ThlLedgerManager,
+ thl_ledger_manager: ThlLedgerManager,
) -> Callable[..., None]:
from datetime import timedelta
@@ -669,7 +677,7 @@ def adj_to_fail_with_tx_factory(
adjusted_timestamp=created,
)
- thl_lm.create_tx_task_adjustment(
+ thl_ledger_manager.create_tx_task_adjustment(
wall=w1,
user=session.user,
created=created + timedelta(milliseconds=1),
@@ -678,7 +686,7 @@ def adj_to_fail_with_tx_factory(
session.wall_events = wall_manager.get_wall_events(session_id=session.id)
session_manager.adjust_status(session=session)
- thl_lm.create_tx_bp_adjustment(
+ thl_ledger_manager.create_tx_bp_adjustment(
session=session, created=created + timedelta(milliseconds=2)
)
@@ -689,7 +697,7 @@ def adj_to_fail_with_tx_factory(
def adj_to_complete_with_tx_factory(
session_manager: SessionManager,
wall_manager: WallManager,
- thl_lm: ThlLedgerManager,
+ thl_ledger_manager: ThlLedgerManager,
) -> Callable[..., None]:
from datetime import timedelta
@@ -708,7 +716,7 @@ def adj_to_complete_with_tx_factory(
adjusted_timestamp=created,
)
- thl_lm.create_tx_task_adjustment(
+ thl_ledger_manager.create_tx_task_adjustment(
wall=w1,
user=session.user,
created=created + timedelta(milliseconds=1),
@@ -717,7 +725,7 @@ def adj_to_complete_with_tx_factory(
session.wall_events = wall_manager.get_wall_events(session_id=session.id)
session_manager.adjust_status(session=session)
- thl_lm.create_tx_bp_adjustment(
+ thl_ledger_manager.create_tx_bp_adjustment(
session=session, created=created + timedelta(milliseconds=2)
)