§
    …�»jÒ  ã            
       óR  — d Z ddlZddlZddlZej                             dej                             ej                             ej                             e	¦  «        d¦  «        ¦  «        ¦  «         ddl
mZmZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )zÒ
Unit tests for FreeExile Currency Exchange & Purchasing Power Parity (PPP) Engine.
Validates multi-currency fiat pricing, regional PPP tiers, Web3/Web direct bonus coins,
and anti-region-arbitrage safeguards.
é    Nz../../server)ÚCurrencyExchangeEngineÚRegionalPricingTierÚFiatCurrencyc                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestCurrencyExchangec                 ó,   — t          ¦   «         | _        d S )N)r   Úfx)Úselfs    ú:C:\Projects\FreeExile\tests\unit\test_currency_exchange.pyÚsetUpzTestCurrencyExchange.setUp   s   € Ý(Ñ*Ô*ˆŒˆˆó    c                 óh   — | j                              d¬¦  «        }|                      |d¦  «         dS )uG   Standard USD tier: 1 USD = 100 in-game Blood Coins (Huyáº¿t Cá»• Tá»‡).ç      $@)Ú
usd_amountéè  N)r	   Úconvert_usd_to_coinsÚassertEqual)r
   Úcoinss     r   Ú!test_fiat_to_coin_conversion_basez6TestCurrencyExchange.test_fiat_to_coin_conversion_base   s6   € à”×,Ò,¸Ð,Ñ=Ô=ˆØ×Ò˜ Ñ%Ô%Ð%Ð%Ð%r   c                 óÌ  — | j                              d¦  «        }| j                              d¦  «        }| j                              d¦  «        }|                      |t          j        ¦  «         |                      |t          j        ¦  «         |                      |t          j        ¦  «         d}| j                              |d¦  «        }|                      |dd¬¦  «         dS )	zµ
        Purchasing Power Parity (PPP):
        - US, JP: Tier 1 (PPP = 1.0)
        - KR: Tier 2 (PPP ~ 0.90)
        - VN: Tier 3 (PPP ~ 0.50, localized purchasing power)
        ÚUSÚVNÚKRr   g    €„þ@g     ˆ³@)ÚdeltaN)	r	   Úget_regional_tierr   r   ÚTIER_1_STANDARDÚTIER_2_MODERATEÚTIER_3_EMERGINGÚcalculate_localized_fiat_priceÚassertAlmostEqual)r
   Útier_usÚtier_vnÚtier_krÚ	usd_priceÚ	vnd_prices         r   Útest_regional_ppp_multipliersz2TestCurrencyExchange.test_regional_ppp_multipliers   sÐ   € ð ”'×+Ò+¨DÑ1Ô1ˆØ”'×+Ò+¨DÑ1Ô1ˆØ”'×+Ò+¨DÑ1Ô1ˆà×Ò˜Õ"5Ô"EÑFÔFÐFØ×Ò˜Õ"5Ô"EÑFÔFÐFØ×Ò˜Õ"5Ô"EÑFÔFÐFð ˆ	Ø”G×:Ò:¸9ÀdÑKÔKˆ	à×Ò˜y¨(¸&ÐÑAÔAÐAÐAÐAr   c                 óÒ   — | j                              ddd¬¦  «        }| j                              ddd¬¦  «        }|                      |d¦  «         |                      |d¦  «         d	S )
zFPurchases on Web Direct Store or Web3 Crypto receive +10% bonus coins.r   ÚPLATFORM_IOSF)Úbase_usdÚplatformÚis_web3_cryptoÚPLATFORM_WEB_PCTr   iL  N)r	   Úcalculate_coins_rewardr   )r
   Ú	coins_iosÚcoins_web_cryptos      r   Ú test_direct_web_and_crypto_bonusz5TestCurrencyExchange.test_direct_web_and_crypto_bonus2   s„   € à”G×2Ò2ØØ#Ø ð 3ñ 
ô 
ˆ	ð
  œ7×9Ò9ØØ&Øð :ñ 
ô 
Ðð
 	×Ò˜ DÑ)Ô)Ð)Ø×ÒÐ)¨4Ñ0Ô0Ð0Ð0Ð0r   c                 ó  — | j                              dd¬¦  «        \  }}|                      |¦  «         | j                              dd¬¦  «        \  }}|                      |¦  «         |                      d|¦  «         dS )zZDiscrepancy between IP location and Payment Method Issuer Country triggers warning/reject.r   )Ú
ip_countryÚpayment_countryr   ÚREGION_MISMATCHN)r	   Úvalidate_billing_regionÚ
assertTrueÚassertFalseÚassertIn)r
   ÚvalidÚreasonÚ	valid_vpns       r   Ú$test_anti_region_arbitrage_detectionz9TestCurrencyExchange.test_anti_region_arbitrage_detectionA   s˜   € ð œ×7Ò7ØØ ð 8ñ 
ô 
‰ˆˆvð 	�Š˜ÑÔÐð !œG×;Ò;ØØ ð <ñ 
ô 
Ñˆ	�6ð 	×Ò˜Ñ#Ô#Ð#Ø�ŠÐ'¨Ñ0Ô0Ð0Ð0Ð0r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r&   r0   r<   © r   r   r   r      sb   € € € € € ð+ð +ð +ð&ð &ð &ð
Bð Bð Bð*1ð 1ð 1ð1ð 1ð 1ð 1ð 1r   r   Ú__main__)Ú__doc__ÚunittestÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úshop.currency_exchanger   r   r   ÚTestCaser   r=   Úmainr@   r   r   ú<module>rO      sô   ððð ð €€€Ø 
€
€
€
Ø 	€	€	€	à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð<1ð <1ð <1ð <1ð <1˜8Ô,ñ <1ô <1ð <1ð~ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   