
    wj:                        d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ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mZ dd
ZddZddZddZddZddZddZddZ ddZ!ddZ"ddZ#ddZ$y)    )annotations)Path)data)main)page_00_command_centerpage_04_cryptopage_05_walletspage_08_reports)page_03_equities_etfspage_17_position_add)connect_memory)apply_migrations)FakeStreamlitsetup_multi_wallet_crypto_connTECHNICAL_FIELDSc                    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     5tests/unit/test_dashboard_usability_simplification.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        j                         g dk(  sJ dt        j                         vsJ dt        j                         vsJ t        t        d      j	                  d            g k(  sJ y )N)zCommand Center	PortfolioCryptoWallets   Position hinzufügenReports	WatchlistzEquities/ETFsz"src/jarvis_finance/dashboard/pagesz[0-9][0-9]_*.py)dashboard_mainget_user_navigation_titlessortedr   glob r)   r   Mtest_user_mode_navigation_is_radically_reduced_and_streamlit_autopages_absentr6      sz    446  ;R  R  R  RnGGIIII."K"K"MMMM$;<AABSTUY[[[[r)   c                     t               } t        |        t               }t        j                  ||        t        |      }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|vsJ d	|vsJ d
|vsJ y )Nr.   u   1. Assetklasse wählenz2. Instrument suchenzLokal suchenzOnline suchenzManuell anlegenzPosition speicherncatalog_entry_idinstrument_id	source_id)r   r   r   r   renderr(   connr#   texts      r   Mtest_position_add_page_is_visible_wizard_and_does_not_call_provider_on_renderr?      s    DT	BD)D!T)))#t+++!T)))T!!!d"""$$$4'''T)))$&&&d"""r)   c                     t               } t        |        t        dh      }t        j                  ||        t        |      }d|v sJ d|v sJ |j                  j                  d      dk(  sJ y )Nr.   button_presseszENoch keine Cash-, Aktien- oder ETF-Positionen im User Mode vorhanden.jarvis_requested_page)r   r   r   r   r;   r(   session_stategetr<   s      r   >test_portfolio_empty_state_has_add_button_and_routes_to_wizardrF   /   sx    DT	'=&>	?B  T*DRVZZZZ!T))) 78<RRRRr)   c                   | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	t        |             t               }t	        |       t               }t        j                  ||       t        |      }d
|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|vsJ y )NOPENFIGI_API_KEYF)raisingJARVIS_OPENFIGI_API_KEYFINNHUB_API_KEYJARVIS_FINNHUB_API_KEYFMP_API_KEYJARVIS_FMP_API_KEYJARVIS_FINANCE_RUNTIME_DIRzProvider-StatusOpenFIGIzAPI-Key fehltz,~/jarvis_runtime/finance-system/secrets/.envzruntime-file-key)	delenvsetenvr   r   r   r   r   r;   r(   )monkeypatchtmp_pathr=   r#   r>   s        r   5test_provider_status_visible_without_secrets_or_crashrU   :   s   )590%@(%8/?}e4+U;3S]CDT	BD)D$$$d"""9TAAA%%%T)))r)   c            	        t               } | j                  d       t               }t        j                  ||        t        |      dv sJ |j                  D cg c]2  \  }}}|dk(  s|st        |d         j                  d      s.|d   4 }}}}t        |      dk  sJ t        h dz  }t        fd|D              sJ d	v sJ y c c}}}w )
Na9  INSERT INTO alerts(alert_id, priority, category, entity_type, entity_id, rule_id, message, status, created_at, last_seen_at, occurrence_count, dedup_key, fingerprint) VALUES ('a1','warnung','market','crypto_asset','asset-btc','missing_crypto_price','asset_id raw should not leak','active','now','now',1,'d1','f1')zWas ist wichtig?markdownr   z**Wichtig:**   >   	asset-btc)productive initial crypto snapshot importrule_id	entity_idc              3  &   K   | ]  }|v 
 y wr   r5   r   itemr>   s     r   r   zMtest_command_center_is_quiet_and_has_max_three_clean_hints.<locals>.<genexpr>[   s     6Dt46   zTop 5 Crypto-Positionen)r   executer   r   r;   r(   r   r   
startswithlenr   all)r=   r#   namer&   _important_lines	forbiddenr>   s          @r   :test_command_center_is_quiet_and_has_max_three_clean_hintsri   O   s    )+DLL 	D 
B!!"d+D%%%46HH  I  I=4q
@RW[`cdhijdk`l`w`w  yG  aHtAw  IO  I1$$$ #uuI6I6666$,,,	 Is   C-C0CCc            	     v   t               } t               }t        j                  ||        t	        |      }d|v sJ d|v sJ |j
                  D cg c](  \  }}}|dk(  s|st        |d   t              s$|d   * }}}}t        d |D              }t        |d         h dk(  sJ d|d   vsJ y c c}}}w )Nu   Position auswählenzCoin Detail	dataframer   c              3  6   K   | ]  }|sd |d   v s|  yw)gesamtwert_chfr   Nr5   r   rowss     r   r   zRtest_crypto_page_uses_compact_position_columns_and_detail_panel.<locals>.<genexpr>g   s!     \t@PTXYZT[@[\   >   coinanteilstatussymbolwalletsgesamtmengerm   kurs_chf)
r   r   r   r;   r(   r   
isinstancelistnextset)r=   r#   r>   re   r&   rf   
table_rowscompact_rowss           r   ?test_crypto_page_uses_compact_position_columns_and_detail_panelr~   _   s    )+D	B"d#D D(((D   /1xxvvmdD!4;;NSW\fgklmgnpt\u$q'vJv\\\L|A#uuuu\!_,,, ws   B4!B4$B48B4c                     t               } dddddd}|j                         D ]U  \  }}t        |h      }d|j                  d	<   t	        j
                  ||        |t        |      v sJ d
t        |      vrUJ  y )Nu    Bestand hinzufügen — Formularu   Korrigieren — Formularu   Transfer — Formularu   Auf 0 setzen — Bestätigungu   Verlauf für ausgewählten Coin)   Bestand hinzufügenzBestand korrigierenTransferzBestand auf 0 setzenAudit / Verlauf anzeigenrA   Tjarvis_edit_modeu   Öffnen Sie Admin/Debug)r   itemsr   rD   r   r;   r(   )r=   expectedbuttonmarkerr#   s        r   Etest_crypto_detail_actions_open_inline_forms_immediately_in_edit_moder   l   s    )+DA9+ ?$EH #..* B6(3/3+,b$'r****(b0AAAABr)   c                 v   t               } t               }d|j                  d<   t        j                  ||        |j
                  D cg c]  \  }}}|dk(  s|s|d   |f }}}}t        d |D              j                  d      du sJ t        d |D              j                  d      du sJ y c c}}}w )	NFr   r   r   c              3  2   K   | ]  \  }}|d k(  s|  yw)r   Nr5   r   labelr'   s      r   r   zMtest_read_only_disables_writes_but_keeps_verlauf_available.<locals>.<genexpr>   s     V=5&u@U7UV   disabledTc              3  2   K   | ]  \  }}|d k(  s|  yw)r   Nr5   r   s      r   r   zMtest_read_only_disables_writes_but_keeps_verlauf_available.<locals>.<genexpr>   s     [=5&u@Z7Z[r   )r   r   rD   r   r;   r   rz   rE   )r=   r#   re   r&   r'   buttonss         r   :test_read_only_disables_writes_but_keeps_verlauf_availabler   }   s    )+D	B+0B'("d#;=88aa%7T4txGW\`Q aGaVGVVZZ[efjnnnn[G[[__`jkotttt bs   
B4B4	B4c            	        t               } t               }t        j                  ||        t	        |      dv sJ dv sJ t        fdt        D              sJ |j                  D cg c](  \  }}}|dk(  s|st        |d   t              s$|d   * }}}}t        d |D              }t        |d         h dk(  sJ y c c}}}w )Nu   Wallet auswählenzCoins in diesem Walletc              3  &   K   | ]  }|v 
 y wr   r5   r^   s     r   r   zItest_wallet_page_is_compact_and_hides_technical_fields.<locals>.<genexpr>   s     =Dt4=r`   rk   r   c              3  6   K   | ]  }|sd |d   v s|  yw)wallet_namer   Nr5   rn   s     r   r   zItest_wallet_page_is_compact_and_hides_technical_fields.<locals>.<genexpr>   s      Xd}PTUVPW?WtXrp   >   rs   
coin_countr   wallet_typetotal_value_chf)r   r   r	   r;   r(   rd   r   r   rx   ry   rz   r{   )r=   r#   re   r&   rf   r|   wallet_rowsr>   s          @r   6test_wallet_page_is_compact_and_hides_technical_fieldsr      s    )+D	B2t$D$&&&#t+++=,<====/1xxvvmdD!4;;NSW\fgklmgnpt\u$q'vJvX
XXK{1~"kkkk ws   -C<C?CCc                    t               }t        dh      }t        |       |j                  d<   t	        j
                  ||       t        |      }d|v sJ d|v sJ t        d |j                  D              sJ y )NzCrypto-Report erzeugenrA   jarvis_reports_runtime_dirzPortfolio-Report erzeugenc              3  .   K   | ]  \  }}}|d k(    yw)successNr5   )r   re   _args_kwargss       r   r   zQtest_reports_page_stays_minimal_and_crypto_report_action_works.<locals>.<genexpr>   s     F%9T5'ty Fs   )	r   r   r   rD   r
   r;   r(   anyr   )rT   r=   r#   r>   s       r   >test_reports_page_stays_minimal_and_crypto_report_action_worksr      s{    )+D	'?&@	AB58]B122t$D#t+++&$...FRXXFFFFr)   c                     t               } t        j                  |       }t        j                  |      dk(  sJ t	               }t        j                  ||        t        |      }d|v sJ y )Nznoch nicht bewertetu$   Aktien/ETF: Bewertung unvollständig)r   dashboard_dataget_command_center_summaryequity_etf_user_labelr   r   r;   r(   )r=   summaryr#   r>   s       r   ;test_equity_etf_not_prominently_shown_as_zero_when_unvaluedr      sf    )+D77=G//8<QQQQ	B!!"d+D1T999r)   N)r#   r   returnr   )r   None)rT   r   r   r   )%
__future__r   pathlibr   jarvis_finance.dashboardr   r   r   r1   jarvis_finance.dashboard.pagesr   r   r	   r
   jarvis_finance.dashboard.viewsr   r   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   test_dashboard_ux_sprint2r   r   r   r(   r6   r?   rF   rU   ri   r~   r   r   r   r   r   r5   r)   r   <module>r      sh    "  ; ; s s V : > e e\#$S**- 
-B"u
lG0r)   