Files
Grid_Trading/tests/test_repositories.py

106 lines
3.2 KiB
Python
Raw Normal View History

2026-07-08 17:23:24 +08:00
from datetime import date
from decimal import Decimal
from grid_trading.domain.models import Account, Instrument, StrategyTemplate, Trade, TradeGroup, TradeSide
from grid_trading.storage.repositories import Repository
def test_database_round_trips_account_instrument_template_and_trade(tmp_path):
db_path = tmp_path / "grid.db"
repo = Repository(db_path)
repo.initialize()
account = repo.save_account(Account(id=None, name="主账户", initial_cash=Decimal("100000"), notes="first"))
template = repo.save_strategy_template(
StrategyTemplate(
id=None,
name="默认模板",
grid_spacing_pct=Decimal("0.03"),
amount_per_grid=Decimal("5000"),
base_target_amount=Decimal("20000"),
max_position_amount=Decimal("80000"),
min_lot=100,
is_default=True,
)
)
instrument = repo.save_instrument(
Instrument(
id=None,
code="510300",
name="沪深300ETF",
market="ETF",
lot_size=100,
manual_price=Decimal("3.95"),
)
)
trade = repo.save_trade(
Trade(
id=None,
account_id=account.id,
instrument_id=instrument.id,
trade_date=date(2026, 7, 8),
side=TradeSide.BUY,
price=Decimal("3.90"),
quantity=1000,
commission=Decimal("5"),
transfer_fee=Decimal("0.04"),
trade_group=TradeGroup.GRID,
notes="first buy",
)
)
repo.close()
reopened = Repository(db_path)
reopened.initialize()
assert reopened.list_accounts() == [account]
assert reopened.get_default_strategy_template() == template
assert reopened.list_instruments() == [instrument]
assert reopened.list_trades(account_id=account.id) == [trade]
def test_trade_update_and_delete_are_persistent(tmp_path):
repo = Repository(tmp_path / "grid.db")
repo.initialize()
account = repo.save_account(Account(id=None, name="主账户", initial_cash=Decimal("50000")))
instrument = repo.save_instrument(Instrument(id=None, code="600000", name="浦发银行"))
trade = repo.save_trade(
Trade(
id=None,
account_id=account.id,
instrument_id=instrument.id,
trade_date=date(2026, 7, 7),
side=TradeSide.BUY,
price=Decimal("10"),
quantity=100,
commission=Decimal("5"),
trade_group=TradeGroup.BASE,
)
)
updated = repo.save_trade(
Trade(
id=trade.id,
account_id=account.id,
instrument_id=instrument.id,
trade_date=date(2026, 7, 7),
side=TradeSide.BUY,
price=Decimal("9.8"),
quantity=200,
commission=Decimal("5"),
trade_group=TradeGroup.BASE,
notes="corrected",
)
)
assert repo.get_trade(trade.id) == updated
repo.close()
reopened = Repository(tmp_path / "grid.db")
reopened.initialize()
assert reopened.get_trade(trade.id) == updated
reopened.delete_trade(trade.id)
assert reopened.get_trade(trade.id) is None
assert reopened.list_trades(account_id=account.id) == []