
    \jh"                        d dl mZ d dlmZ d dlZ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 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)IteratorN)
Connection)
TestClient)get_db)
create_app)apply_migrationsc                     t        j                  dd      } t         j                  | _        | j	                  d       | S )Nz:memory:F)check_same_threadzPRAGMA foreign_keys = ON)sqlite3connectRowrow_factoryexecuteconns    2tests/unit/test_fastapi_user_dashboard_skeleton.py_connect_threadsafe_memoryr      s0    ??:?D{{DLL+,K    c                `     t               }d fd}||j                  t        <   t        |      S )Nc               3     K     y w)N r   s   r   override_dbz_client.<locals>.override_db   s     
s   	)returnzIterator[Connection])r   dependency_overridesr   r   )r   appr   s   `  r   _clientr      s+    
,C (3CV$c?r   c                   d}| j                  d|f       | j                  d|f       | j                  d|f       | j                  d|f       | j                  d|f       | j                  d|f       | j                  d|f       | j                  d	|f       | j                  d
|f       | j                  d||f       | j                          y )N2099-05-17T12:00:00ZzINSERT INTO platforms(platform_id, name, platform_type, country, default_currency, created_at) VALUES ('p1', 'Demo Bank', 'broker', 'CH', 'CHF', ?)zINSERT INTO accounts(account_id, platform_id, account_name, account_type, currency, created_at) VALUES ('a1', 'p1', 'Trading', 'brokerage', 'CHF', ?)zINSERT INTO instruments(instrument_id, asset_class, name, ticker, isin, currency, created_at) VALUES ('i1', 'stock', 'Demo Equity', 'DEMO', 'CH0000000000', 'CHF', ?)a  
        INSERT INTO transactions(transaction_id, transaction_type, account_id, instrument_id, trade_date, quantity, price_original, gross_amount_original, net_amount_original, currency_original, fx_rate_to_chf, fx_status, gross_amount_chf, net_amount_chf, source_type, is_confirmed, quality_status, created_at)
        VALUES ('t1', 'initial_snapshot', 'a1', 'i1', '2026-05-16', '2', '10', '20', '20', 'CHF', '1', 'ok', '20', '20', 'fixture', 1, 'ok', ?)
        zINSERT INTO market_prices(market_price_id, instrument_id, price_date, close, currency, provider, quality_status, created_at) VALUES ('mp1', 'i1', '2026-05-16', '12.34', 'CHF', 'fixture', 'fresh', ?)zINSERT INTO cash_balances(cash_balance_id, account_id, balance_date, currency, amount_original, fx_rate_to_chf, amount_chf, source_type, quality_status, created_at) VALUES ('c1', 'a1', '2026-05-16', 'CHF', '100.25', '1', '100.25', 'fixture', 'ok', ?)zwINSERT INTO crypto_wallets(wallet_id, wallet_name, wallet_type, created_at) VALUES ('w1', 'Cold Wallet', 'hardware', ?)zINSERT INTO crypto_assets(asset_id, symbol, coin_name, coingecko_id, created_at) VALUES ('btc', 'BTC', 'Bitcoin', 'bitcoin', ?)zINSERT INTO crypto_holdings(crypto_holding_id, wallet_id, asset_id, quantity, verification_status, created_at) VALUES ('h1', 'w1', 'btc', '0.5', 'ok', ?)zINSERT INTO crypto_prices(crypto_price_id, asset_id, coingecko_id, price_currency, price, provider, provider_timestamp, fetched_at, quality_status) VALUES ('cp1', 'btc', 'bitcoin', 'CHF', '80000', 'fixture', ?, ?, 'fresh'))r   commit)r   nows     r   _seed_minimal_read_modelsr"      sZ   
 CLL  g  jm  io  pLL  i  lo  kq  rLL  y  |  {A  BLL	 
 	LL  Z  ]`  \b  cLL  N  QT  PV  WLL  K  NQ  MS  TLL  S  VY  U[  \LL  m  ps  ou  vLL  r  ux  z}  t~  KKMr   c                     t               } t        |        t        |       }|j                  d      }|j                  dk(  sJ |j                         dddddk(  sJ |j                  d      j                  d	k(  sJ y )
Nz/api/health   okzjarvis-finance-api0z	read-only)statusr   api_versionmodez/api/crypto/price-updatei  )r   r	   r   getstatus_codejsonpost)r   clientresponses      r   .test_fastapi_v0_health_and_read_only_contractsr0   4   s{    %'DTT]Fzz-(H3&&&==?6J[^hstttt;;12>>#EEEr   c                 n   t               } t        |        t        |        t        |       }|j	                  d      j                         }|j	                  d      j                         }|j	                  d      j                         }|j	                  d      j                         }|d   dk(  sJ t        |d   t              sJ |d   d   d	k(  sJ t        |d   d
   t              sJ |d   d   dk(  sJ t        |d   d   t              sJ |d   dk(  sJ t        |d   d   d   t              sJ y )N/api/overview/api/crypto/positions/api/equity/positionsz/api/cash/summarytotal_value_chf40000.00r   quantity_total0.5market_value_chfnameDemo Equitypricecash_chfz0.00	positionsamountr   r	   r"   r   r*   r,   
isinstancestr)r   r.   overviewcryptoequitycashs         r   =test_fastapi_v0_overview_and_positions_return_decimal_stringsrG   @   s@   %'DTd#T]Fzz/*//1HZZ/0557FZZ/0557F::)*//1D%&*444h013777!9%&%///fQi 23S999!9V---fQi(#...
v%%%d;'*84c:::r   c                     t               } t        |        t        |       }|j                  d      j	                         }t        |      j                         }|sJ d|vsJ d|vsJ d|vsJ y )Nz/api/provider/statusapi_keytokensecret)r   r	   r   r*   r,   rB   lower)r   r.   payloadrendereds       r   ,test_fastapi_v0_provider_status_is_sanitizedrO   U   sv    %'DTT]Fjj/0557G7|!!#HN7H$$$("""8###r   c                    t               } t        |        t        |        t        |       }|j	                  d      j                         }t        |      h dk(  sJ |d   dk(  sJ t        |d   t              sJ |d   dv sJ y )Nr2   >
   cash_value_chfr5   crypto_value_chfequity_value_chflast_price_updatedata_quality_statustruewealth_value_chfcritical_alerts_countunpriced_positions_countpostfinance_equity_value_chfr5   r6   rR   rU   >   r%   warningcritical)	r   r	   r"   r   r*   r,   setrA   rB   )r   r.   rM   s      r   :test_vue_slice_overview_contract_uses_flat_decimal_stringsr]   d   s    %'DTd#T]Fjj)..0Gw<     $%333g013777()-JJJJr   c                 l   t               } t        |        t        |        t        |       }|j	                  d      j                         }|j	                  d      j                         }|d   dddddd	d
dddddk(  sJ |d   dk(  sJ |d   d   d   dk(  sJ t        |d   d   d   t              sJ y )Nr3   z/api/crypto/positions/btcr   btcBitcoinBTCr8   80000r6   z100.00   Aktuellr   z*https://www.coingecko.com/en/coins/bitcoin)asset_idr:   symbolr7   	price_chfr9   portfolio_share_pctwallet_countprice_statusrT   coingecko_urlre   wallet_allocationswalletCold Walletquantityr@   r   r.   r>   details       r   2test_vue_slice_crypto_contract_and_detail_endpointrr   }   s    %'DTd#T]F

2388:IZZ3499;FQ<&'!3E    *&&&&'*84EEEf1215jA3GGGr   c                    t               } t        |        t        |        t        |       }|j	                  d      j                         }|j	                  d      j                         }|d   dddddd	d
ddd ddk(  sJ |d   dk(  sJ y )Nr4   z/api/equity/positions/a1:i1r   za1:i1r;   DEMOCH0000000000TradingAktier&   CHFz12.34u   Einstand unvollständig)position_idr:   tickerisinaccountasset_classro   currencyr<   r9   r'   ry   )r   r	   r"   r   r*   r,   rp   s       r   2test_vue_slice_equity_contract_and_detail_endpointr      s    %'DTd#T]F

2388:IZZ56;;=FQ< +    - G+++r   c            	     L   t               } t        |        t        |        t        |       }|j	                  d      j                         }|ddddddddgk(  sJ |j	                  d	      j                         }|d
   d   d   dk(  sJ t        |d
   d   d   t              sJ y )Nz/api/walletsw1rn   hardwarerc   r6   rd   )	wallet_idr:   wallet_typeprovider
coin_countr9   r'   z/api/wallets/w1coinsr   rf   ra   ro   r@   )r   r.   walletsrq   s       r   test_vue_slice_wallets_contractr      s    %'DTd#T]Fjj(--/G!%" *	

 
 
 
 ZZ)*//1F'?1h'5000fWoa(4c:::r   c                   | dz  }|dz  }|j                  d       |dz  j                  dd       |j                  d	t        |             |j                  d
d       |j	                  |        t               }t        |       t        |      }|j                  d      j                         }t        |      j                         }|d   d   dk(  sJ |d   d   j                  d      sJ d|vsJ d|vsJ d|vsJ y )NruntimereportsT)parentszportfolio_report.htmlz<html>ok</html>zutf-8)encodingJARVIS_FINANCE_RUNTIME_DIR(JARVIS_FINANCE_BLOCK_RUNTIME_INSIDE_REPOr&   z/api/reportsr   formathtmlpath_displayrI   rJ   rK   )mkdir
write_textsetenvrB   chdirr   r	   r   r*   r,   rL   endswith)tmp_pathmonkeypatchr   r   r   r.   rM   rN   s           r   .test_vue_slice_reports_contract_and_no_secretsr      s   "G	!GMM$M&&223Dw2W3S\BA3Gh%'DTT]Fjj(--/G7|!!#H1:h6)))1:n%../FGGGH$$$("""8###r   )r   r   )r   r   r   r   )r   r   r   None)r   r   )
__future__r   collections.abcr   r   r   fastapi.testclientr   jarvis_finance.api.dependenciesr   jarvis_finance.api.mainr   !jarvis_finance.storage.migrationsr	   r   r   r"   r0   rG   rO   r]   rr   r   r   r   r   r   r   <module>r      sW    " $   ) 2 . >*	F;*$K2H6,2;0$r   