
    LrdjF                        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$dS )    )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_connstr   returnstrc                    g }| j         D ]V\  }}}|                    d |D                        |                    d |                                D                        Wd                    |          S )Nc              3  4   K   | ]}t          |          V  d S Nr   ).0args     ,tests/unit/test_dashboard_mvp_regressions.py	<genexpr>z _visible_text.<locals>.<genexpr>   s(      ..#SXX......    c              3  4   K   | ]}t          |          V  d S r   r   )r   values     r   r   z _visible_text.<locals>.<genexpr>   s(      ==ESZZ======r   
)callsextendvaluesjoin)r   parts_nameargskwargss        r   _visible_textr+      s~    E!x > >tV........==V]]__=======99Ur   c                     t                      } t          |            t          |            |                     d                                          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      s    DT#D)))[\\eegghtuJ,"9  J Z''r   Nonec                    t                      \  } }}t          | dddt          d          dd           |                                  t	          | ||dd	ddd
ddd          }|                     d|j        f                                          }|d         dk    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ d S )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:mockrW   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`   ,   s8   #4#6#6 D*j4uUlahioapap  |B  NU  V  V  V  VKKMMM-#(!&0  F 
~  BH  BW  AY  
Z  
Z  
c  
c  
e  
eB6))))k?l****k?d"""" !Y......r   c            	        t                      \  } }}|                     d|f                                          }||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sJ 	d|v sJ d S )NzASELECT * FROM instrument_catalog_entries WHERE catalog_entry_id=?r5   r7   r8   r9   r/   localu
   Bestätigt)rR   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)inputsri   rj   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_currencyrx   F   s?   $5$7$7!D+zLL!dgqfstt}}M&f%f%)!*-$	 	H 
)08@zr+R+R+,).(N
 

 
 
B DL*Z\6]6]B2367B23D)))Dd""""Q $ $t#####1T999999r   c                 t   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	        
                                D                       sJ d S )NzCash speichernCashu(   Anderes Konto · Manual Portfolio · CHFrD   123.45z
2026-01-31zsynthetic cash balanceT)rh   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_pressesrm   zCash erfassenzCash gespeichertc              3  \   K   | ]'}|j         t          d           k    o
|j        dk    V  (dS )r{   rD   N)amount_originalr   r6   )r   balances     r   r   zXtest_cash_asset_choice_renders_cash_entry_and_writes_audited_snapshot.<locals>.<genexpr>   sY        E  E^ew&'(*;*;;Y@PTY@Y  E  E  E  E  E  Er   )r   r   r   r   r   rr   r+   r   anybalancesr%   )r?   r   rv   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  Eiqiz  jB  jB  jD  jD  E  E  E  E  E  E  E  E  E  Er   c                   t                      \  }}}t          |dddt          d          dd           t          |||dd	ddd
dd
  
         |                     t
          dd            t          dh          }t          j        ||           t          |          }d|v sJ d|v sJ |	                    d          
                                d         dk    sJ d S )Nr/   rD   rE   0.90rF   rG   rH   rN   rO   rP   zsynthetic unvalued positionT	rR   r-   rS   rT   rU   r6   rV   r<   rX   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>   s4    ^uw}  @D  wE  PU  _V  _V  _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   rr   r+   r=   r>   )monkeypatchr?   r-   r@   r   rv   s         r   9test_equity_page_refreshes_valuation_from_mapped_providerr      sD   #4#6#6 D*j4uUlahioapap  |B  NU  V  V  V  V$#(!&*    -/N  QV  QV  W  W  W	'@&A	B	B	BB T***D$,,,,#t++++<<RSS\\^^_bcghhhhhhhr   c                   t                      \  }}}t          |dddt          d          dd           t          |||dd	ddd
dd
  
         |                     t
          dd            |                     t
          dd            t          dh          }t          j        ||           dt          |          v sJ |	                    d          
                                d         dk    sJ d S )Nr/   rD   rE   r   rF   rG   rH   rN   1rP   zsynthetic cc positionTr   CoinGeckoClientc                 <     t          dddddi                      S )NProvider get_crypto_pricesrD   c                    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   )rD   )type)_kwargss    r   r   zMtest_command_center_price_refresh_updates_crypto_and_equity.<locals>.<lambda>   sO      VgUYZdfhk~  Ae  Ae  Ae  kf  Vg  Vg  Vi  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>   s4    _vx~  AE  xF  QV  `W  `W  `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   rr   r+   r=   r>   )r   r?   r-   r@   r   s        r   ;test_command_center_price_refresh_updates_crypto_and_equityr      s]   #4#6#6 D*j4uUlahioapap  |B  NU  V  V  V  V$#(!&$    .0A  Di  Di  j  j  j.0O  RW  RW  X  X  X	'=&>	?	?	?B!"d+++=,,,,,,<<RSS\\^^_bcghhhh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 d S )Nc              3  2   K   | ]}|d          dk    |V  dS )symbolETHNr   )r   rows     r   r   zXtest_crypto_detail_exposes_cache_source_and_timestamp_without_raw_ids.<locals>.<genexpr>   s2      eescRZm_dNdNdsNdNdNdNdeer   	_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
eenDTJJeee
e
eC24[9IajkkkF- $55555.!_4444V####''''''r   N)r   r   r   r   )r   rB   )%
__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`   rx   r   r   r   r   r   r   r   <module>r      s   " " " " " "       ; ; ; ; ; ; n n n n n n n n n n H  H  H  H  H  H  H  H  H  H 2 2 2 2 2 2 > > > > > > Y Y Y Y Y Y Y Y : : : : : : > > > > > > S S S S S S S S   ( ( ((/ / / /4: : : :DE E E E4i i i i4i i i i2	( 	( 	( 	( 	( 	(r   