
    WXjF                        d dl mZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZmZ ddZd ZddZddZ ddZ!ddZ"ddZ#ddZ$y)    )annotations)Decimal)data)page_00_command_centerpage_03_equities_etfspage_17_position_add) add_manual_position_from_catalogcreate_manual_catalog_entryensure_standard_broker_accounts)upsert_fx_rate)calculate_cash_balances)MockEquityPriceProviderstore_market_price)connect_memory)apply_migrations)FakeStreamlitsetup_multi_wallet_crypto_connc                    g }| j                   D ]D  \  }}}|j                  d |D               |j                  d |j                         D               F dj                  |      S )Nc              3  2   K   | ]  }t        |        y wNstr).0args     ,tests/unit/test_dashboard_mvp_regressions.py	<genexpr>z _visible_text.<locals>.<genexpr>   s     .#SX.   c              3  2   K   | ]  }t        |        y wr   r   )r   values     r   r   z _visible_text.<locals>.<genexpr>   s     =ESZ=r   
)callsextendvaluesjoin)stparts_nameargskwargss        r   _visible_textr*      s\    E!xx >tV...=V]]_==> 99U    c                     t               } t        |        t        |        | j                  d      j	                         d   }t        | ddddddd	dd

      }| ||fS )Nz;SELECT account_id FROM accounts ORDER BY account_id LIMIT 1
account_idstockzSynthetic Valued AGUSDUS0000000001SYNVNASDAQfmpz*synthetic catalog entry for MVP regression)	asset_classnamecurrencyisintickerexchangeproviderprovider_symbolnote)r   r   r   executefetchoner
   )connr-   
catalog_ids      r   setup_equity_connrA      so    DT#D)[\eeghtuJ,"9J Z''r+   c                 H   t               \  } }}t        | dddt        d      dd       | j                          t	        | ||dd	ddd
ddd      }| j                  d|j                  f      j                         }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ y )Nr/   CHF
2026-01-15z0.91mockclosebase_currencyquote_currency	rate_daterater:   	rate_typeinitial_snapshot2100okz!synthetic position with cached FXT)
catalog_entry_idr-   position_typequantity_text
trade_dater6   cost_basis_original_text	fx_statusr<   confirmzfSELECT fx_rate_to_chf, fx_source, fx_status, gross_amount_chf FROM transactions WHERE transaction_id=?fx_rate_to_chf	fx_sourcez
cache:mockrV   gross_amount_chfz91.0000)rA   r   r   commitr	   r=   transaction_idr>   )r?   r-   r@   resulttxs        r   Btest_manual_position_uses_cached_historical_fx_without_manual_rater_   ,   s    #4#6 D*j4uUlahioap  |B  NU  VKKM-#(!&0F 
~  BH  BW  BW  AY  
Z  
c  
c  
eB6)))k?l***k?d""" !Y...r+   c            	     t   t               \  } }}| j                  d|f      j                         }||d   |d   |d   |d   dddd	}t        d
|gg ddddd      }|gg d|j                  d<   d|j                  d<   t        j                  ||        t        |      }d|vsJ dD ]  }||vrJ  d|v sJ y )NzASELECT * FROM instrument_catalog_entries WHERE catalog_entry_id=?r5   r7   r8   r9   r/   localu
   Bestätigt)rQ   r5   r7   r8   r9   r6   data_sourcetrust_statusAktie)resultswarningsr   z$Automatisch aus Cache/Provider holen)position_add_asset_choiceposition_add_search_resultsposition_add_selected_indexposition_add_pos_currencyposition_add_fx_handling)inputsrh   ri   z	FX-Status)
not_neededmanual_override_requiredmanual_override)rA   r=   r>   r   session_stater   renderr*   )r?   _account_idr@   search_resultselectedr%   textinternals           r   Ptest_position_add_user_mode_hides_internal_fx_status_values_for_foreign_currencyrw   F   s
   $5$7!D+zLL!dgqfst}}M&f%f%)!*-$	H 
)08@zr+R+,).(N

B DL*Z\6]B2367B23D)Dd"""Q $t###$1T999r+   c                 8   t               } t        |        t        |        t        dhdddddddd	
      }t	        j
                  ||        t        |      }d|v sJ d|v sJ t        |       }t        d |j                  j                         D              sJ y )NzCash speichernCashu(   Anderes Konto · Manual Portfolio · CHFrC   123.45z
2026-01-31zsynthetic cash balanceT)rg   position_add_cash_accountposition_add_cash_currencyposition_add_cash_amountposition_add_cash_dateposition_add_cash_noteposition_add_cash_confirm)button_pressesrl   zCash erfassenzCash gespeichertc              3  n   K   | ]-  }|j                   t        d       k(  xr |j                  dk(   / yw)rz   rC   N)amount_originalr   r6   )r   balances     r   r   zXtest_cash_asset_choice_renders_cash_entry_and_writes_audited_snapshot.<locals>.<genexpr>   s;       E^ew&&'(*;;Y@P@PTY@YY  Es   35)r   r   r   r   r   rq   r*   r   anybalancesr#   )r?   r%   ru   r   s       r   Etest_cash_asset_choice_renders_cash_entry_and_writes_audited_snapshotr   h   s    DT#D)	())/)S*/(0&2&>)-

B D)Dd"""%%%&t,H  Eiqiziz  jB  jB  jD  E  E  E  Er+   c                r   t               \  }}}t        |dddt        d      dd       t        |||dd	ddd
dd
       | j	                  t
        dd        t        dh      }t        j                  ||       t        |      }d|v sJ d|v sJ |j                  d      j                         d   dk(  sJ y )Nr/   rC   rD   0.90rE   rF   rG   rM   rN   rO   zsynthetic unvalued positionT	rQ   r-   rR   rS   rT   r6   rU   r<   rW   equity_price_provider_by_namec                     t        ddid      S )Nr1   50r/   r6   r   r'   s    r   <lambda>zKtest_equity_page_refreshes_valuation_from_mapped_provider.<locals>.<lambda>   s&    ^uw}  @D  wE  PU  _V r+   zBewertung aktualisierenr   zBewertung aktualisiertz8SELECT COUNT(*) AS c FROM market_prices WHERE close='50'c   )rA   r   r   r	   setattrr   r   rq   r*   r=   r>   )monkeypatchr?   r-   r@   r%   ru   s         r   9test_equity_page_refreshes_valuation_from_mapped_providerr      s    #4#6 D*j4uUlahioap  |B  NU  V$#(!&* -/N  QV  W	'@&A	BB  T*D$,,,#t+++<<RS\\^_bcghhhhr+   c                   t               \  }}}t        |dddt        d      dd       t        |||dd	ddd
dd
       | j	                  t
        dd        | j	                  t
        dd        t        dh      }t        j                  ||       dt        |      v sJ |j                  d      j                         d   dk(  sJ y )Nr/   rC   rD   r   rE   rF   rG   rM   1rO   zsynthetic cc positionTr   CoinGeckoClientc                 .     t        dddddi             S )NProvider get_crypto_pricesc                    i S r   r   )selfidsr6   s      r   r   z_test_command_center_price_refresh_updates_crypto_and_equity.<locals>.<lambda>.<locals>.<lambda>   s      ce r+   )rC   )type)_kwargss    r   r   zMtest_command_center_price_refresh_updates_crypto_and_equity.<locals>.<lambda>   s3      VgUYZdfhk~  Ae  kf  Vg  Vi r+   r   c                     t        ddid      S )Nr1   42r/   r   r   r   s    r   r   zMtest_command_center_price_refresh_updates_crypto_and_equity.<locals>.<lambda>   s&    _vx~  AE  xF  QV  `W r+   zPreise aktualisierenr   z
Aktien/ETFz8SELECT COUNT(*) AS c FROM market_prices WHERE close='42'r   r   )rA   r   r   r	   r   r   r   rq   r*   r=   r>   )r   r?   r-   r@   r%   s        r   ;test_command_center_price_refresh_updates_crypto_and_equityr      s    #4#6 D*j4uUlahioap  |B  NU  V$#(!&$ .0A  Di  j.0O  RW  X	'=&>	?B!!"d+=,,,,<<RS\\^_bcghhhhr+   c                     t               } t        d t        j                  |       D              }t        j                  | |d   d      }|d   dk(  sJ |d   dk(  sJ d	|vsJ d
|vsJ y )Nc              3  2   K   | ]  }|d    dk(  s|  yw)symbolETHNr   )r   rows     r   r   zXtest_crypto_detail_exposes_cache_source_and_timestamp_without_raw_ids.<locals>.<genexpr>   s     escRZm_dNdses   	_asset_idiɚ;)price_max_age_secondspreisquellezsynthetic-cachecache_statuszlokaler Cacheasset_idcoingecko_id)r   nextdashboard_dataget_crypto_coin_summaryget_crypto_coin_detail)r?   ethdetails      r   Etest_crypto_detail_exposes_cache_source_and_timestamp_without_raw_idsr      s    )+D
enDDTJe
eC224[9IajkF- $5555.!_444V###'''r+   N)r%   r   returnr   )r   None)%
__future__r   decimalr   jarvis_finance.dashboardr   r   jarvis_finance.dashboard.viewsr   r   r   jarvis_finance.equity.manager	   r
   r   jarvis_finance.fx.ratesr   jarvis_finance.ledger.cashr   !jarvis_finance.market_data.pricesr   r   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   test_dashboard_ux_sprint2r   r   r*   rA   r_   rw   r   r   r   r   r   r+   r   <module>r      s^    "  ; n n H  H 2 > Y : > S((/4:DE4i4i2	(r+   