
    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y)    )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y)MockProviderc                2    t        |      | _        d| _        y )Nr   )listquotescalls)selfr   s      tests/unit/test_market_alerts.py__init__zMockProvider.__init__   s    6l
    c                b    | xj                   dz  c_         | j                  j                  d      S )N   r   )r   r   pop)r   coingecko_idcurrencys      r   get_crypto_pricezMockProvider.get_crypto_price   s"    

a
{{q!!r   N)CHF)r   strr   r   returnr   )__name__
__module____qualname__r   r    r   r   r   r      s    "r   r   c                 0    t               } t        |        | S )N)r   r   )cs    r   connr&      s    A*1-axr   c            	        t               } t        | ddd      }t        t        ddt	        d      d      g      }t        | |d	      }|sJ | j                  d
|f      j                         }|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 y )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  r/   r   max_age_secondsr   )r&   r   r   r   r   r   executefetchonewritten_price_idscached_countr   )r%   assetr/   idsrowcacheds         r   =test_refresh_crypto_prices_stores_decimal_text_and_uses_cacher>      s    A+A9LUZirsZ	%@P8QeqrstH
Hu
ECJ3
))ehmgo
p
y
y
{Cw<++++6))) G+++"1x%Y]^F##r)))!###>>Qr   c                    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       | j                  d|f      j                         d   dk(  sJ | j                  d|f      j                         }|d   dk(  sJ |d   dk\  sJ y )NzSynthetic MysteryMYS)r+   r,   zSynthetic EtherETHethereumr*   r   missingzno price)r2   error_messager   r4   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   r6   r7   )r%   rC   r:   r/   r<   s        r   Ltest_refresh_crypto_prices_warns_missing_coingecko_and_missing_price_dedupesrG   (   s5   A-a;NW\]->u[efEZ
5YeopqrH!hPQR!lJz%PTdm  }G  5H  4I  'J  UZ  lm  n99lovnxy  C  C  E  FI  J  NO  O  O  O
))  J  MR  LT  U  ^  ^  `Cs8q==u:??r   c                 X   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	
      }||k7  sJ y )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   sm   A	a*tbfp|  GS  jo  wC  ^D  
EB	a*tbfp|  GS  jo  wC  ^D  
EB8O8!RJ=dhr~  IU  lq  yE  `F  G  KM  M  M  Mq""89J=dhr~  IU  lq  yE  `F  G  KM  M  M  M	a*tbfp|  GS  jo  wC  ^D  
EB8O8r   N)r   None)
__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>   rG   r\   r#   r   r   <module>re      s;    "  < M Q Q : >" "8	
r   