fix(CORE-002C): align historical units with workspace weight

This commit is contained in:
Bu5hm4nn
2026-03-25 21:37:55 +01:00
parent aae67dfd9b
commit 87900b01bf
6 changed files with 54 additions and 20 deletions

View File

@@ -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",

View File

@@ -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)

View File

@@ -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: