fix(CORE-002C): align historical units with workspace weight
This commit is contained in:
@@ -9,9 +9,11 @@ from app.domain.backtesting_math import (
|
||||
PricePerAsset,
|
||||
asset_quantity_from_floats,
|
||||
asset_quantity_from_money,
|
||||
asset_quantity_from_workspace_config,
|
||||
materialize_backtest_portfolio_state,
|
||||
)
|
||||
from app.domain.units import BaseCurrency, Money
|
||||
from app.models.portfolio import PortfolioConfig
|
||||
from app.services.backtesting.comparison import EventComparisonService
|
||||
from app.services.backtesting.historical_provider import SyntheticHistoricalProvider
|
||||
from app.services.event_comparison_ui import EventComparisonFixtureHistoricalPriceSource
|
||||
@@ -47,6 +49,20 @@ def test_asset_quantity_from_floats_matches_workspace_backtest_conversion() -> N
|
||||
assert asset_quantity_from_floats(968000.0, 100.0, "GLD") == 9680.0
|
||||
|
||||
|
||||
def test_asset_quantity_from_workspace_config_uses_instrument_weight_conversion_for_gld() -> None:
|
||||
config = PortfolioConfig(
|
||||
gold_ounces=220.0,
|
||||
entry_price=4400.0,
|
||||
entry_basis_mode="weight",
|
||||
loan_amount=222000.0,
|
||||
margin_threshold=0.80,
|
||||
)
|
||||
|
||||
quantity = asset_quantity_from_workspace_config(config, entry_spot=100.0, symbol="GLD")
|
||||
|
||||
assert quantity == 2200.0
|
||||
|
||||
|
||||
def test_materialize_backtest_portfolio_state_uses_typed_asset_boundary() -> None:
|
||||
portfolio = materialize_backtest_portfolio_state(
|
||||
symbol="GLD",
|
||||
|
||||
@@ -119,20 +119,20 @@ def test_homepage_and_options_page_render() -> None:
|
||||
page.screenshot(path=str(ARTIFACTS / "settings.png"), full_page=True)
|
||||
|
||||
page.goto(f"{workspace_url}/backtests", wait_until="networkidle", timeout=30000)
|
||||
expect(page.get_by_label("Underlying units")).to_have_value("9680")
|
||||
expect(page.get_by_label("Underlying units")).to_have_value("2200")
|
||||
expect(page.get_by_label("Loan amount")).to_have_value("222000")
|
||||
expect(page.get_by_label("Margin call LTV")).to_have_value("0.8")
|
||||
backtests_workspace_text = page.locator("body").inner_text(timeout=15000)
|
||||
assert "Scenario Summary" in backtests_workspace_text
|
||||
assert "$968,000" in backtests_workspace_text
|
||||
assert "$220,000" in backtests_workspace_text
|
||||
|
||||
page.goto(f"{workspace_url}/event-comparison", wait_until="networkidle", timeout=30000)
|
||||
expect(page.get_by_label("Underlying units")).to_have_value("9680")
|
||||
expect(page.get_by_label("Underlying units")).to_have_value("2200")
|
||||
expect(page.get_by_label("Loan amount")).to_have_value("222000")
|
||||
expect(page.get_by_label("Margin call LTV")).to_have_value("0.8")
|
||||
event_workspace_text = page.locator("body").inner_text(timeout=15000)
|
||||
assert "$222,000" in event_workspace_text
|
||||
assert "9,680" in event_workspace_text
|
||||
assert "2,200" in event_workspace_text
|
||||
assert "80.0%" in event_workspace_text
|
||||
|
||||
page.goto(workspace_url, wait_until="domcontentloaded", timeout=30000)
|
||||
|
||||
@@ -224,7 +224,7 @@ def test_workspace_routes_seed_page_defaults_from_workspace_portfolio_config(tmp
|
||||
|
||||
assert backtests_response.status_code == 200
|
||||
assert "Workspace defaults seed underlying units, loan amount, and margin threshold." in backtests_response.text
|
||||
assert "9680" in backtests_response.text or "9,680" in backtests_response.text
|
||||
assert "2200" in backtests_response.text or "2,200" in backtests_response.text
|
||||
assert "222000" in backtests_response.text or "222,000" in backtests_response.text
|
||||
assert "0.8" in backtests_response.text or "80.0%" in backtests_response.text
|
||||
|
||||
@@ -233,8 +233,8 @@ def test_workspace_routes_seed_page_defaults_from_workspace_portfolio_config(tmp
|
||||
assert "Underlying units" in event_response.text
|
||||
assert "Loan amount" in event_response.text
|
||||
assert "222,000" in event_response.text or "222000" in event_response.text
|
||||
assert "9,680" in event_response.text or "9680" in event_response.text
|
||||
assert "80.0%" in event_response.text
|
||||
assert "2,200" in event_response.text or "2200" in event_response.text
|
||||
assert "80.0%" in event_response.text or "0.8" in event_response.text
|
||||
|
||||
|
||||
def test_hedge_page_upgrades_cached_gld_quote_and_uses_converted_spot(tmp_path, monkeypatch) -> None:
|
||||
|
||||
Reference in New Issue
Block a user