
    Yaj$                        d dl mZ d dlmZ d dlmZ d dl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mZ d d	lmZ d d
l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&ddZ'dS )    )annotationsDecimal)Path)RuntimePathsSettings)adjust_crypto_positiontransfer_crypto_position)data)main)page_00_command_centerpage_04_cryptopage_05_walletspage_08_reports)export_crypto_inventory_report)FakeStreamlitsetup_multi_wallet_crypto_connreturnNonec                     t          d          } t          d |                     d          D                       }|g k    sJ t          j                    g dk    sJ dt          j                    vsJ d S )Nz"src/jarvis_finance/dashboard/pagesc              3  $   K   | ]}|j         V  d S N)name).0ps     8tests/unit/test_dashboard_functional_ux_stabilization.py	<genexpr>zAtest_auto_streamlit_page_stubs_are_not_present.<locals>.<genexpr>   s$      MMa16MMMMMM    z[0-9][0-9]_*.py)zCommand Center	PortfolioCryptoWallets   Position hinzufügenReports	Watchlist)r   sortedglobdashboard_mainget_user_navigation_titles)	pages_dirnumeric_pagess     r   .test_auto_streamlit_page_stubs_are_not_presentr+      s    9::IMM9>>:K+L+LMMMMMMB466  ;R  ;R  ;R  R  R  R  RnGIIIIIIIIr   c                     t                      } t          dh          }t          j        ||            d |j        D             }d|v sJ |j                            d          dk    sJ d S )Nu   + Position hinzufügenbutton_pressesc                6    g | ]\  }}}|d k    ||d         S )buttonr    r   r   args_s       r   
<listcomp>zGtest_command_center_has_visible_add_position_action.<locals>.<listcomp>   s1    RRR=4q8H8HT8HtAw8H8H8Hr   jarvis_requested_pager"   )r   r   r   rendercallssession_stateget)connstbuttonss      r   3test_command_center_has_visible_add_position_actionr>      s    )++D	'?&@	A	A	AB!"d+++RRBHRRRG#w.... 788<RRRRRRRr   c                    ddl m}  t                      }t                      }|                     ||           d                    d |j        D                       }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 S )Nr   )page_17_position_add
c              3  F   K   | ]\  }}}|D ]}t          |          V  d S r   str)r   _namer3   _kwargsargs        r   r   zStest_position_add_page_is_user_mode_wizard_without_technical_ids.<locals>.<genexpr>&   s<      SS"6%wdSSsSXXSSSSSSSr   r"   u   Assetklasse wählenzInstrument sucheninstrument_idcatalog_entry_id	source_id)jarvis_finance.dashboard.pagesr@   r   r   r7   joinr8   )r@   r;   r<   texts       r   @test_position_add_page_is_user_mode_wizard_without_technical_idsrN       s    CCCCCC)++D	BD)))99SS"(SSSSSD!T)))) D(((($&&&&$&&&&T))))d""""""r   c                    t                      } t                      }d|j        d<   t          j        ||            d |j        D             }|r|d                             d          du sJ t          d |j        D                       sJ t                      }d|j        d<   t          j        ||            d |j        D             }|r|d                             d          du sJ t                      }d|j        d<   t          j        ||            d	 |j        D             }|r|d                             d          du sJ d S )
NFjarvis_edit_modec                B    g | ]\  }}}|d k    ||d         dk    |S r0   r   u   Bestand hinzufügenr1   r   r   r3   kwargss       r   r5   z`test_read_only_disables_coin_and_wallet_action_buttons_but_edit_mode_enables.<locals>.<listcomp>4   sb      C  C  C!3tV48CSCSX\CSaefgah  mB  bB  bBf  bB  bB  bBr   r   disabledTc              3  X   K   | ]%\  }}}|d v 
|dt          |d                   v V  &dS )>   infocaptionwarningzBearbeiten aktivierenr   NrC   r2   s       r   r   z_test_read_only_disables_coin_and_wallet_action_buttons_but_edit_mode_enables.<locals>.<genexpr>6   sZ        I  I=4qX\`~X~X~  DHX~&#d1g,,6X~X~X~X~  I  Ir   c                B    g | ]\  }}}|d k    ||d         dk    |S rR   r1   rS   s       r   r5   z`test_read_only_disables_coin_and_wallet_action_buttons_but_edit_mode_enables.<locals>.<listcomp>;   sb      E  E  E"4$fTXEUEUZ^EUcghicj  oD  dD  dDv  dD  dD  dDr   c                B    g | ]\  }}}|d k    ||d         dk    |S )r0   r   u   Coin in Wallet hinzufügenr1   rS   s       r   r5   z`test_read_only_disables_coin_and_wallet_action_buttons_but_edit_mode_enables.<locals>.<listcomp>A   sb      K  K  K!3tVDHDTDTY]DTbfghbi  nJ  cJ  cJf  cJ  cJ  cJr   )	r   r   r9   r   r7   r8   r:   anyr   )r;   r<   action_buttonsst2action_buttons2st3wallet_buttonss          r   Ltest_read_only_disables_coin_and_wallet_action_buttons_but_edit_mode_enablesrb   /   s   )++D	B+0B'("d### C  Crx  C  C  CNGnQ/33J??4GGGG  I  IBH  I  I  I  I  I  I  I  I
//C,0C()#t$$$ E  E	  E  E  EOJq155jAAUJJJJ
//C,1C()3%%% K  Ksy  K  K  KNGnQ/33J??4GGGGGGr   c                    t                      } t          dh          }d|j        d<   t          j        ||            |j        d         sJ |j        d         dk    sJ |j        d         |j        d         k    sJ d S )NzBestand korrigierenr-   TrP   selected_crypto_asset_idcrypto_manage_actioncrypto_manage_asset_id)r   r   r9   r   r7   )r;   r<   s     r   Atest_crypto_selection_is_saved_and_actions_prefill_manage_contextrg   E   s    )++D	'<&=	>	>	>B+/B'("d###67777237LLLLL459IJd9eeeeeeer   c                    t                      } t          d t          j        |           D                       }t          j        | |d                   }t          | |d         |d         d         dddd	          }|j        sJ t          | |d         |d         d         |d
         d         ddddd	  	        }|j        sJ d t          j        | d          D             }d|v sJ d|v sJ d S )Nc              3  2   K   | ]}|d          dk    |V  dS symbolETHNr1   r   rows     r   r   zHtest_correction_and_transfer_flows_write_audit_events.<locals>.<genexpr>Q   2      eescRZm_dNdNdsNdNdNdNdeer   	_asset_idr   
_wallet_idz2.5z
2026-02-02zmanual review correctionT)asset_id	wallet_idnew_quantity_texteffective_datenoteconfirm   z0.50z
2026-02-03zrebalance wallets)rr   from_wallet_idto_wallet_idquantity_textfee_quantity_textru   rv   rw   c                    h | ]
}|d          S )actionr1   )r   rs     r   	<setcomp>zHtest_correction_and_transfer_flows_write_audit_events.<locals>.<setcomp>i   s    ZZZQQx[ZZZr      limitcrypto_manual_adjustmentcrypto_transfer)	r   nextdashboard_dataget_crypto_coin_summaryget_crypto_coin_wallet_detailsr	   transaction_idr
   get_audit_events)r;   ethwalletsadjusttransferaudit_actionss         r   5test_correction_and_transfer_flows_write_audit_eventsr   O   s6   )++D
eenDTJJeee
e
eC;D#kBRSSG#[!!*\*#'  F     '[!qz,/QZ-# 
 
 
H """"ZZ.*I$VX*Y*Y*YZZZM%6666------r   tmp_pathr   c                j   t                      }t          dt          j        |                     }t	          ||dd           }t          |d                                                   sJ t          |d                                       t          |                     sJ |d         dk    sJ d S )NCHF)base_currencyruntime_pathshtml)settingspreferred_formatrenderer	file_pathformat)	r   r   r   	from_baser   r   existsrD   
startswith)r   r;   r   results       r   +test_report_button_generates_runtime_reportr   n   s    )++D",X66  H ,D8V\gklllF{#$$++-----vk"##..s8}}=====(v%%%%%%r   c                B   t                      }t          dh          }t          |           |j        d<   t	          j        ||           t          d |j        D                       sJ |                    d          	                                d         dk    sJ d S )NzCrypto-Report erzeugenr-   jarvis_reports_runtime_dirc              3  *   K   | ]\  }}}|d k    V  dS )successNr1   )r   r   _argsrF   s       r   r   zRtest_reports_page_has_real_crypto_report_action_not_dead_button.<locals>.<genexpr>   s.      FF%9T5'ty FFFFFFr   z!SELECT COUNT(*) AS c FROM reportscrx   )
r   r   rD   r9   r   r7   r\   r8   executefetchone)r   r;   r<   s      r   ?test_reports_page_has_real_crypto_report_action_not_dead_buttonr   z   s    )++D	'?&@	A	A	AB58]]B122t$$$FFRXFFFFFFFF<<;<<EEGGLPQQQQQQQr   c                   t                      }ddi G fdd          }|                     t          d|           t                      }t          j        ||           d         dk    sJ |                    d                                          d         }|                    d|f           t          d	h
          }t          j        ||           d         dk    sJ t          d |j        D                       sJ d S )Nnr   c                  $    e Zd ZddZd fd	ZdS )	Ntest_price_update_button_uses_provider_service_only_on_click.<locals>.Providerr   r   c                    d S r   r1   )selfrT   s     r   __init__zWtest_price_update_button_uses_provider_service_only_on_click.<locals>.Provider.__init__   s    Dr   r   c                B    dxx         dz  cc<   fd|D             S )Nr   rx   c           
     z    i | ]7}|t          d dg                              |t          d                    8S )zjarvis_finance.market.providers
PriceQuote)fromlist1)
__import__r   r   )r   cidcurrencys     r   
<dictcomp>zttest_price_update_button_uses_provider_service_only_on_click.<locals>.Provider.get_crypto_prices.<locals>.<dictcomp>   sx      b  b  b  MPC$EQ]P^___jjknpx  {B  CF  {G  {G  H  H  b  b  br   r1   )r   coingecko_idsr   r8   s     `r   get_crypto_pricesz`test_price_update_button_uses_provider_service_only_on_click.<locals>.Provider.get_crypto_prices   sP    #JJJ!OJJJ b  b  b  b  Ta  b  b  b  br   Nr   r   )r   )__name__
__module____qualname__r   r   )r8   s   r   Providerr      sO        	 	 	 		b 	b 	b 	b 	b 	b 	b 	br   r   CoinGeckoClientz5SELECT asset_id FROM crypto_assets WHERE symbol='BTC'rr   z*DELETE FROM crypto_prices WHERE asset_id=?zPreise aktualisierenr-   rx   c              3  B   K   | ]\  }}}||d k    o	d|d         v V  dS )r   zPreisupdate abgeschlossenr   Nr1   r2   s       r   r   zOtest_price_update_button_uses_provider_service_only_on_click.<locals>.<genexpr>   sF      xxP]PTVZ\]swxty K%@DG%Kxxxxxxr   )	r   setattrr   r   r7   r   r   r\   r8   )monkeypatchr;   r   r<   oldst_clickr8   s         @r   <test_price_update_button_uses_provider_service_only_on_clickr      s;   )++D!HEb b b b b b b b b b (98DDD	B"d###:????
,,N
O
O
X
X
Z
Z[e
fCLL=vFFF-C,DEEEH(D))):????xxaiaoxxxxxxxxxxr   c                    t                      } t          j        | d          }d |D             }|t          |d          k    sJ d t          j        |           D             ddgk    sJ t          j        | d	
          d         d         dk    sJ t          d t          j        | dd          D                       sJ d S )NzWert absteigend)sort_byc                8    g | ]}t          |d                    S )_sort_value_chfr   rm   s     r   r5   z;test_crypto_sort_filter_and_chart_order.<locals>.<listcomp>   s&    >>>#gc+,-->>>r   T)reversec                    g | ]
}|d          S )labelr1   rm   s     r   r5   z;test_crypto_sort_filter_and_chart_order.<locals>.<listcomp>   s    ZZZSCLZZZr   EthereumBitcoinbit)searchr   rk   BTCc              3  .   K   | ]}|d          dk    V  dS )statusAktuellNr1   rm   s     r   r   z:test_crypto_sort_filter_and_chart_order.<locals>.<genexpr>   sC        ]  ]cs8}	)  ]  ]  ]  ]  ]  ]r   r   iɚ;)status_filterprice_max_age_seconds)r   r   r   r%    get_crypto_coin_allocation_chartall)r;   rowsvaluess      r   'test_crypto_sort_filter_and_chart_orderr      s!   )++D1$@QRRRD>>>>>FVFD1111111ZZN$STX$Y$YZZZ_ikt^uuuuu1$uEEEaHRV[[[[[  ]  ]^5[\`py  R[  6\  6\  6\  ]  ]  ]  ]  ]  ]  ]  ]  ]  ]r   c                 ^   t                      } t          d t          j        |           D                       }|                     dd           t          j        | |d                   }d|d         vs|d         d         dk    sJ t          j        |d                   }d|vrd|vsJ d S )	Nc              3  2   K   | ]}|d          dk    |V  dS rj   r1   rm   s     r   r   zEtest_user_mode_hides_internal_ids_and_import_notes.<locals>.<genexpr>   ro   r   z!UPDATE crypto_wallets SET notes=?)zQproductive initial crypto snapshot import 2025-12-31; no wallet address from XLSXrp   notizr    rq   )r   r   r   r   r   r   visible_user_columns)r;   r   detailvisibles       r   2test_user_mode_hides_internal_ids_and_import_notesr      s    )++D
eenDTJJeee
e
eCLL4  7M  N  N  N:4[AQRRF&)##vay'9R'?'?'??1&)<<Gg%%,g*E*E*EE*E*Er   c                     t                      } |                     d           |                     d           t          j        | d          d         }d|d         v sJ d|d         vsJ d S )	NzINSERT INTO instruments(instrument_id, asset_class, name, ticker, isin, currency, created_at) VALUES ('instrument-US9229087690','etf','Vanguard US Total Stock Market ETF','VTI','US9229087690','USD','now')a#  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','fx','instrument','instrument-US9229087690','missing_fx','missing_fx','active','now','now',1,'d','f')rx   r   r   z(Vanguard US Total Stock Market ETF (VTI)titlezinstrument-US)r   r   r   get_alert_cards)r;   cards     r   3test_alert_text_resolves_instrument_name_and_tickerr      s    )++DLL 	W   	LL 	n   )$a888;D5gFFFF$w-//////r   c                 4    dt          j                    vsJ d S )Nr$   )r'   r(   r1   r   r   5test_watchlist_hidden_from_user_mode_until_functionalr      s"    nGIIIIIIIIr   Nr   )r   r   r   r   )(
__future__r   decimalr   pathlibr   jarvis_finance.config.settingsr   r   jarvis_finance.crypto.manager	   r
   jarvis_finance.dashboardr   r   r   r'   rK   r   r   r   r   'jarvis_finance.reports.crypto_inventoryr   test_dashboard_ux_sprint2r   r   r+   r>   rN   rb   rg   r   r   r   r   r   r   r   r   r1   r   r   <module>r      s   " " " " " "             A A A A A A A A Y Y Y Y Y Y Y Y ; ; ; ; ; ; ; ; ; ; ; ; s s s s s s s s s s s s R R R R R R S S S S S S S SJ J J JS S S S# # # #H H H H,f f f f. . . .>	& 	& 	& 	&R R R Ry y y y0] ] ] ]F F F F
0 
0 
0 
0J J J J J Jr   