§
    £ «j»  ã                  ó   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlZddlmZmZ ddlmZ ddlmZmZmZ  G d„ dej        ¦  «        Z G d	„ d
ej        ¦  «        Z G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )uþ   AutoPOE2 - Unit Tests cho Market Price Fetcher & Dynamic Pickit Updater.

Kiá»ƒm thá»­ quy Ä‘á»•i tá»· giÃ¡ Chaos Orb, lá»�c ngÆ°á»¡ng >= 1.0 Chaos,
vÃ  kiá»ƒm tra Ä‘á»‹nh dáº¡ng pickup_filter.json cho C++ Core 120Hz.
TuÃ¢n thá»§ Rule 1, Rule 4, Rule 5.
é    )ÚannotationsN)Ú	MagicMockÚpatch)ÚMarketPriceFetcher)Úget_valuable_market_itemsÚ update_pickit_filter_from_marketÚBASELINE_ALWAYS_PICKc                  ó   — e Zd ZdZdd„ZdS )ÚTestMarketPriceFetcheruG   Kiá»ƒm thá»­ bá»™ thu tháº­p vÃ  tÃ­nh toÃ¡n tá»· giÃ¡ thá»‹ trÆ°á»�ng.ÚreturnÚNonec                óò  — ddddœdddœdddœd	d
dœdddœgi}t          j        dd¬¦  «        5 }|j        }ddd¦  «         n# 1 swxY w Y   	 t          |¬¦  «        }t	          |¬¦  «        |_        t	          d¬¦  «        |_        |                     d¬¦  «        }|                      |d         d¦  «         |                      |d         d¦  «         |d         }|                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d	         d         d¦  «         |                      |d         d         d¦  «         t          j
                             |¦  «        rt          j        |¦  «         dS dS # t          j
                             |¦  «        rt          j        |¦  «         w w xY w)uH   Kiá»ƒm tra tÃ­nh toÃ¡n chaos_value tá»« dá»¯ liá»‡u giáº£ láº­p chuáº©n.ÚItemsúMirror of Kalandrag     jè@)ÚTextÚCurrentPriceú
Divine Orbg      Y@ú	Chaos Orbç      I@zOrb of Alchemyg      9@úTransmutation Shardg      à?ú.jsonF©ÚsuffixÚdeleteN)Ú
cache_path)Úreturn_valueÚ
TestLeague)Úleaguer   Úchaos_orb_raw_priceÚitemsÚchaos_valueg     @�@g       @ç      ð?ç{®Gáz„?)ÚtempfileÚNamedTemporaryFileÚnamer   r   Ú	_http_getÚget_active_leagueÚfetch_market_pricesÚassertEqualÚosÚpathÚexistsÚremove)ÚselfÚmock_raw_currencyÚtmpÚ	tmp_cacheÚfetcherÚdatar    s          ú0C:\Projects\AutoPOE2\tests\test_market_pickit.pyÚ test_chaos_calculation_syntheticz7TestMarketPriceFetcher.test_chaos_calculation_synthetic   sW  € ð Ø-¸wÐGÐGØ%°uÐ=Ð=Ø$°dÐ;Ð;Ø)¸4Ð@Ð@Ø.ÀÐDÐDðð
Ðõ Ô(°ÀÐFÑFÔFð 	!È#ØœˆIð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð	%Ý(°IÐ>Ñ>Ô>ˆGå )Ð7HÐ IÑ IÔ IˆGÔÝ(1¸|Ð(LÑ(LÔ(LˆGÔ%à×.Ò.°lÐ.ÑCÔCˆDØ×Ò˜T (œ^¨\Ñ:Ô:Ð:Ø×Ò˜TÐ"7Ô8¸$Ñ?Ô?Ð?à˜”MˆEà×Ò˜UÐ#7Ô8¸ÔGÈÑPÔPÐPà×Ò˜U <Ô0°Ô?ÀÑEÔEÐEà×Ò˜U ;Ô/°Ô>ÀÑDÔDÐDà×Ò˜UÐ#3Ô4°]ÔCÀSÑIÔIÐIà×Ò˜UÐ#8Ô9¸-ÔHÈ$ÑOÔOÐOåŒw�~Š~˜iÑ(Ô(ð %Ý”	˜)Ñ$Ô$Ð$Ð$Ð$ð%ð %ø�rŒw�~Š~˜iÑ(Ô(ð %Ý”	˜)Ñ$Ô$Ð$Ð$ð%øøøs   ¯AÁAÁ
AÁD:G  Ç 6G6N©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   © ó    r5   r   r      s.   € € € € € ØQÐQð&%ð &%ð &%ð &%ð &%ð &%r=   r   c                  ó   — e Zd ZdZdd„ZdS )ÚTestDynamicPickitUpdateruT   Kiá»ƒm thá»­ cáº­p nháº­t bá»™ lá»�c nháº·t Ä‘á»“ Pickit theo giÃ¡ trá»‹ >= 1 Chaos.r   r   c                óÖ  — dddddddœdd	dœd
ddœdddœdddœdddœdœdœ}t          j        dd¬¦  «        5 }|j        }ddd¦  «         n# 1 swxY w Y   	 t          d¦  «        5 }dd	dddœ}||f|_        t          d|g¬¦  «        }|                      |d         d¦  «         |                      |d         d¦  «         t          |dd ¬!¦  «        5 }t          j	        |¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |d"         d#¦  «         |                      |d$         d¦  «         |d%         }	|  
                    d|	¦  «         |  
                    d|	¦  «         |  
                    d
|	¦  «         |  
                    d|	¦  «         t          D ]}
|  
                    |
|	¦  «         Œ|                      d|	¦  «         |                      d|	¦  «         ddd¦  «         n# 1 swxY w Y   t          j                             |¦  «        rt          j        |¦  «         dS dS # t          j                             |¦  «        rt          j        |¦  «         w w xY w)&uL   Kiá»ƒm tra chá»‰ cÃ¡c item >= 1 Chaos má»›i Ä‘Æ°á»£c Ä‘Æ°a vÃ o exact_types.zautopoE2.market_prices.v1zRunes of Aldurz2026-09-17 03:00:00r   r   g     @Ÿ@)r&   r!   úAldur's Legacyg     @@r   g      @r   r"   úLesser Life Flaskg{®Gáz”?r   r#   )r   rA   r   r   rB   r   )Úschemar   Ú
updated_atr   r    r   Fr   NzJsrc.assistant_tool.pickit.dynamic_pickit_updater.get_valuable_market_items)r   rA   r   r   )Ú	min_chaosÚoutput_pathsÚstatusÚsuccessÚvaluable_items_counté   Úrzutf-8)ÚencodingrC   zautopoE2.pickup_filter.v1Úmin_chaos_thresholdÚexact_types)r$   r%   r&   r   r   r   r*   ÚopenÚjsonÚloadÚassertInr	   ÚassertNotInr+   r,   r-   r.   )r/   Úmock_market_dataÚ
tmp_filterÚout_filter_pathÚmock_getÚvaluableÚresÚfÚ	generatedÚexactÚ	base_items              r5   Ú$test_filter_generation_and_thresholdz=TestDynamicPickitUpdater.test_filter_generation_and_thresholdG   s‘  € ð 2Ø&Ø/Ø#'à/CÐTZÐ&[Ð&[Ø+;ÈEÐ"RÐ"RØ'3ÀCÐHÐHØ&1À#ÐFÐFØ.AÐRVÐ%WÐ%WØ0EÐVZÐ'[Ð'[ðð ð
ð 
Ðõ Ô(°ÀÐFÑFÔFð 	.È*Ø(œoˆOð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð'	+ÝÐcÑdÔdð #?Ðhpà*0Ø&+Ø"%Ø!$ð	ð �ð *2Ð3CÐ(D�Ô%å6Ø!°Ð0Aðñ ô �ð × Ò   X¤°	Ñ:Ô:Ð:Ø× Ò  Ð%;Ô!<¸aÑ@Ô@Ð@õ ˜/¨3¸ÐAÑAÔAð -ÀQÝ $¤	¨!¡¤�Ið-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð × Ò  ¨8Ô!4Ð6QÑRÔRÐRØ× Ò  Ð+@Ô!AÀ3ÑGÔGÐGØ! -Ô0�ð —’Ð2°EÑ:Ô:Ð:Ø—’Ð.°Ñ6Ô6Ð6Ø—’˜l¨EÑ2Ô2Ð2Ø—’˜k¨5Ñ1Ô1Ð1õ "6ð 4ð 4�IØ—M’M )¨UÑ3Ô3Ð3Ð3ð × Ò Ð!4°eÑ<Ô<Ð<Ø× Ò Ð!6¸Ñ>Ô>Ð>ðG#?ð #?ð #?ñ #?ô #?ð #?ð #?ð #?ð #?ð #?ð #?øøøð #?ð #?ð #?ð #?õJ Œw�~Š~˜oÑ.Ô.ð +Ý”	˜/Ñ*Ô*Ð*Ð*Ð*ð+ð +ø�rŒw�~Š~˜oÑ.Ô.ð +Ý”	˜/Ñ*Ô*Ð*Ð*ð+øøøsg   ¸AÁAÁAÁH2 Á'A-G0ÃC5Ã)G0Ã5C9	Ã9G0Ã<C9	Ã=C'G0Ç$H2 Ç0G4Ç4H2 Ç7G4Ç8H2 È26I(Nr7   )r8   r9   r:   r;   r^   r<   r=   r5   r?   r?   D   s.   € € € € € Ø^Ð^ð;+ð ;+ð ;+ð ;+ð ;+ð ;+r=   r?   c                  óD   — e Zd ZdZ ed¦  «        d
d„¦   «         Zdd„Zd	S )ÚTestMarketPricingPanelu@   Kiá»ƒm thá»­ panel UI Market Pricing vÃ  cÆ¡ cháº¿ Ä‘á»“ng bá»™.z.src.assistant_tool.ui.market_pricing_panel.ctkÚmock_ctkr   r   r   c                ó„  — t          ¦   «         }t          ¦   «         }t          ¦   «         |j        _        ddlm} t          d¦  «        5   |||¦  «         ddd¦  «         n# 1 swxY w Y   |                      t          |d¦  «        ¦  «         |                      t          |d¦  «        ¦  «         |                      t          |d¦  «        ¦  «         |                      t          |d¦  «        ¦  «         |                      t          |d	¦  «        ¦  «         |                      t          |d
¦  «        ¦  «         dS )u:   Kiá»ƒm tra khá»Ÿi táº¡o Ä‘áº§y Ä‘á»§ cÃ¡c widget trÃªn UI.r   )Úbuild_market_pricing_sectionzEsrc.assistant_tool.ui.market_pricing_panel._populate_from_cache_asyncNÚlbl_market_leagueÚlbl_market_ratesÚlbl_market_valuable_countÚchk_auto_sync_marketÚbtn_sync_market_nowÚlbl_market_sync_status)r   Ú_create_section_labelr   Ú*src.assistant_tool.ui.market_pricing_panelrc   r   Ú
assertTrueÚhasattr)r/   ra   Úmock_appÚmock_parentrc   s        r5   Ú!test_build_market_pricing_sectionz8TestMarketPricingPanel.test_build_market_pricing_sectionˆ   sƒ  € õ ‘;”;ˆÝ‘k”kˆÝ6?±k´kˆÔ&Ô3ð	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ÐZÑ[Ô[ð 	@ð 	@Ø(Ð(¨°;Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	�Š� Ð*=Ñ>Ô>Ñ?Ô?Ð?Ø�Š� Ð*<Ñ=Ô=Ñ>Ô>Ð>Ø�Š� Ð*EÑFÔFÑGÔGÐGØ�Š� Ð*@ÑAÔAÑBÔBÐBØ�Š� Ð*?Ñ@Ô@ÑAÔAÐAØ�Š� Ð*BÑCÔCÑDÔDÐDÐDÐDs   Á
A#Á#A'Á*A'c                óô  — t          ¦   «         }d„ |_        t          ¦   «         |_        t          ¦   «         |_        t          ¦   «         |_        ddlm} t          d¦  «        5 }ddddœ|_         ||¦  «         |j        j	         
                    d	¬
¦  «         |j        j	         
                    d¬
¦  «         |                      |j        j	        j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )uZ   Kiá»ƒm tra worker Ä‘á»“ng bá»™ cáº­p nháº­t chÃ­nh xÃ¡c nhÃ£n tráº¡ng thÃ¡i vÃ  sá»‘ item.c                ó   —  |¦   «         S )Nr<   )ÚdelayÚfns     r5   ú<lambda>zDTestMarketPricingPanel.test_run_market_sync_worker.<locals>.<lambda>    s   € ¨2¨2©4¬4€ r=   r   )Ú_run_market_sync_workerzKsrc.assistant_tool.ui.market_pricing_panel.update_pickit_filter_from_marketrH   é*   r   )rG   rI   r   u   ðŸŒ� MÃ¹a giáº£i: TestLeague)Útextu<   ðŸŽ¯ Sá»‘ váº­t pháº©m Ä‘ang nháº·t (>= 1.0 Chaos): 42 itemsN)r   Úafterri   rd   rf   rk   rv   r   r   Ú	configureÚassert_called_withrl   Úcalled)r/   rn   rv   Úmock_updates       r5   Útest_run_market_sync_workerz2TestMarketPricingPanel.test_run_market_sync_worker�   s\  € å‘;”;ˆØ/Ð/ˆŒÝ*3©+¬+ˆÔ'Ý%.¡[¤[ˆÔ"Ý-6©[¬[ˆÔ*àVÐVÐVÐVÐVÐVåÐ`ÑaÔað 	NÐepà#Ø(*Ø&ð(ð (ˆKÔ$ð
 $Ð# HÑ-Ô-Ð-àÔ&Ô0×CÒCÐIgÐCÑhÔhÐhØÔ.Ô8×KÒKØSð Lñ ô ð ð �OŠO˜HÔ;ÔEÔLÑMÔMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Ns   Á%A;C-Ã-C1Ã4C1N)ra   r   r   r   r7   )r8   r9   r:   r;   r   rp   r~   r<   r=   r5   r`   r`   …   sb   € € € € € ØJÐJà
€UÐ;Ñ<Ô<ðEð Eð Eñ =Ô<ðEð(Nð Nð Nð Nð Nð Nr=   r`   Ú__main__)r;   Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrP   r+   r$   ÚunittestÚunittest.mockr   r   Ú.src.assistant_tool.pickit.market_price_fetcherr   Ú0src.assistant_tool.pickit.dynamic_pickit_updaterr   r   r	   ÚTestCaser   r?   r`   r8   Úmainr<   r=   r5   ú<module>r�      su  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø €€€Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à MÐ MÐ MÐ MÐ MÐ Mðð ð ð ð ð ð ð ð ð ð)%ð )%ð )%ð )%ð )%˜XÔ.ñ )%ô )%ð )%ðX>+ð >+ð >+ð >+ð >+˜xÔ0ñ >+ô >+ð >+ðB.Nð .Nð .Nð .Nð .N˜XÔ.ñ .Nô .Nð .Nðb ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr=   