
    Gj                         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mZ d dlmZ d dlmZ  G d d	          Zd
 ZddZddZddZdS )    )annotations)Decimal)create_crypto_asset)
PriceQuoterefresh_crypto_prices)create_alert
mute_alertresolve_alert)connect_memory)apply_migrationsc                      e Zd Zd Zd
ddZd	S )MockProviderc                <    t          |          | _        d| _        d S )Nr   )listquotescalls)selfr   s      tests/unit/test_market_alerts.py__init__zMockProvider.__init__   s    6ll


    CHFcoingecko_idstrcurrencyreturnr   c                V    | xj         dz  c_         | j                            d          S )N   r   )r   r   pop)r   r   r   s      r   get_crypto_pricezMockProvider.get_crypto_price   s%    

a

{q!!!r   N)r   )r   r   r   r   r   r   )__name__
__module____qualname__r   r    r   r   r   r      s<          " " " " " " "r   r   c                 @    t                      } t          |            | S )N)r   r   )cs    r   connr&      s    A*1---axr   r   Nonec            	        t                      } t          | ddd          }t          t          ddt	          d          d          g          }t          | |d	          }|sJ |                     d
|f                                          }|d         dk    sJ |d         dk    sJ |d         dk    sJ t          | |dd          }|j        g k    sJ |j	        dk    sJ |j
        dk    sJ d S )NzSynthetic BitcoinBTCbitcoin	coin_namesymbolr   r   z12345.00000001
1700000000)provider_timestamp)providerr   zOSELECT price, typeof(price), quality_status FROM crypto_prices WHERE asset_id=?priceztypeof(price)textquality_statusfreshi  r0   r   max_age_secondsr   )r&   r   r   r   r   r   executefetchonewritten_price_idscached_countr   )r%   assetr0   idsrowcacheds         r   =test_refresh_crypto_prices_stores_decimal_text_and_uses_cacher?      s+   A+A9LUZirsssZ	%@P8Q8QeqrrrsttH
Hu
E
E
ECJJ3
))ehmgo
p
p
y
y
{
{Cw<+++++6)))) G++++"1x%Y]^^^F#r))))!####>Qr   c                 0   t                      } t          | dd          }t          | ddd          }t          t          ddd d	d
          g          }t	          | |dd           t	          | t          t          ddd d	d
          g          dd           |                     d|f                                          d         dk    sJ |                     d|f                                          }|d         dk    sJ |d         dk    sJ d S )NzSynthetic MysteryMYS)r,   r-   zSynthetic EtherETHethereumr+   r   missingzno price)r3   error_messager   r5   zUSELECT COUNT(*) AS c FROM alerts WHERE rule_id='missing_coingecko_id' AND entity_id=?r%   r   zsSELECT COUNT(*) AS c, MAX(occurrence_count) AS occ FROM alerts WHERE rule_id='crypto_price_missing' AND entity_id=?occ   )r&   r   r   r   r   r7   r8   )r%   rD   r;   r0   r=   s        r   Ltest_refresh_crypto_prices_warns_missing_coingecko_and_missing_price_dedupesrH   (   s   A-a;NW\]]]->u[efffEZ
5YeopppqrrH!hPQRRRR!lJz%PTdm  }G  5H  5H  5H  4I  'J  'J  UZ  lm  n  n  n  n99lovnxyy  C  C  E  E  FI  J  NO  O  O  O  O
))  J  MR  LT  U  U  ^  ^  `  `Cs8q====u:??????r   c                    t                      } t          | ddddddddd	
          }t          | ddddddddd	
          }||k    sJ t          | |           t          | ddddddddd	
          |k    sJ t          | |d           t          | ddddddddd	
          |k    sJ t          | ddddddddd	
          }||k    sJ d S )Nkritischfxtransactiont1
missing_fxz
missing fxUSDz
2026-01-01)r   date)prioritycategoryentity_type	entity_idrule_idmessageevidencez2099-01-01T00:00:00Z)muted_untilEUR)r&   r   r
   r	   )r%   a1a2a3s       r   Jtest_alert_lifecycle_dedupes_resolved_and_muted_but_allows_new_fingerprintr]   4   s   A	a*tbfp|  GS  jo  wC  ^D  ^D  
E  
E  
EB	a*tbfp|  GS  jo  wC  ^D  ^D  
E  
E  
EB8888!RJ=dhr~  IU  lq  yE  `F  `F  G  G  G  KM  M  M  M  Mq""89999J=dhr~  IU  lq  yE  `F  `F  G  G  G  KM  M  M  M  M	a*tbfp|  GS  jo  wC  ^D  ^D  
E  
E  
EB888888r   N)r   r'   )
__future__r   decimalr   jarvis_finance.crypto.assetsr   jarvis_finance.market.providersr   r   jarvis_finance.quality.alertsr   r	   r
   jarvis_finance.storage.databaser   !jarvis_finance.storage.migrationsr   r   r&   r?   rH   r]   r#   r   r   <module>re      s   " " " " " "       < < < < < < M M M M M M M M Q Q Q Q Q Q Q Q Q Q : : : : : : > > > > > >" " " " " " " "8 8 8   	 	 	 	
 
 
 
 
 
r   