§
    ~»jW  ã            
       óZ  — 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mZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )uœ  
Unit tests for Primal Spiritual Stones & Runes Crafting Engine in FreeExile.
Verifies all 7 crafting stones:
- Khai Linh ChÃ¢u (Normal -> Magic)
- Tinh Luyá»‡n PhÃ¹ (Re-roll Magic)
- Táº¡o HÃ³a Tháº¡ch (Normal -> Rare)
- Há»—n NguyÃªn Tháº¡ch (Re-roll Rare)
- Tháº§n TÆ°á»›ng PhÃ¹ (Add Affix to Rare)
- ThiÃªn Má»‡nh Ä�an (Re-roll Affix Values within Tier)
- ThÃ¡i HÆ° CÃ n KhÃ´n KÃ­nh (Mirror non-unique item)
é    Nz../../server)ÚCraftingEngineÚGearItemÚ
ItemRarityÚ	AffixTypeÚAffixc                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestPrimalStonesCraftingc                 ó,   — t          ¦   «         | _        d S )N)r   Úengine)Úselfs    ú?C:\Projects\FreeExile\tests\unit\test_primal_stones_crafting.pyÚsetUpzTestPrimalStonesCrafting.setUp   s   € Ý$Ñ&Ô&ˆŒˆˆó    c                 óX  — t          dddt          j        ¬¦  «        }| j                             |¦  «        \  }}|                      |¦  «         |                      |j        t          j        ¦  «         |                      dt          |j
        ¦  «        cxk    odk    nc ¦  «         dS )uS   Khai Linh ChÃ¢u (Awakening Pearl) converts Common item into Magic with 1-2 affixes.Úitem_sword_01u   BÃ¡ch Luyá»‡n Thiáº¿t Kiáº¿mé2   ©Ú	item_uuidÚ	item_nameÚ
item_levelÚrarityé   é   N)r   r   Ú	PHAM_PHAMr   Úapply_khai_linh_chauÚ
assertTrueÚassertEqualr   Ú	LINH_PHAMÚlenÚaffixes©r   Úcommon_itemÚsuccessÚmsgs       r   Ú#test_khai_linh_chau_normal_to_magicz<TestPrimalStonesCrafting.test_khai_linh_chau_normal_to_magic    s­   € åØ%Ø4ØÝÔ'ð	
ñ 
ô 
ˆð ”{×7Ò7¸ÑDÔD‰ˆ�Ø�Š˜Ñ Ô Ð Ø×Ò˜Ô+­ZÔ-AÑBÔBÐBØ�Š˜�S Ô!4Ñ5Ô5Ð:Ð:Ò:Ð:¸Ò:Ð:Ð:Ð:Ñ;Ô;Ð;Ð;Ð;r   c                 óX  — t          dddt          j        ¬¦  «        }| j                             |¦  «        \  }}|                      |¦  «         |                      |j        t          j        ¦  «         |                      dt          |j
        ¦  «        cxk    odk    nc ¦  «         dS )uT   Táº¡o HÃ³a Tháº¡ch (Creation Stone) converts Common item into Rare with 4-6 affixes.Úitem_blade_02u   Huyá»�n Thiáº¿t Tráº£m Ä�aoéF   r   é   é   N)r   r   r   r   Úapply_tao_hoa_thachr   r   r   ÚCUC_PHAMr   r    r!   s       r   Ú!test_tao_hoa_thach_normal_to_rarez:TestPrimalStonesCrafting.test_tao_hoa_thach_normal_to_rare-   s­   € åØ%Ø3ØÝÔ'ð	
ñ 
ô 
ˆð ”{×6Ò6°{ÑCÔC‰ˆ�Ø�Š˜Ñ Ô Ð Ø×Ò˜Ô+­ZÔ-@ÑAÔAÐAØ�Š˜�S Ô!4Ñ5Ô5Ð:Ð:Ò:Ð:¸Ò:Ð:Ð:Ð:Ñ;Ô;Ð;Ð;Ð;r   c                 óô  — t          dddt          j        t          dt          j        dddd¬	¦  «        t          d
t          j        dddd¬	¦  «        g¬¦  «        }d„ |j        D ¦   «         }| j         	                    |¦  «        \  }}|  
                    |¦  «         |                      |j        t          j        ¦  «         |  
                    dt          |j        ¦  «        cxk    odk    nc ¦  «         dS )uZ   Há»—n NguyÃªn Tháº¡ch (Primal Chaos Stone) cleanses and re-rolls all affixes on Rare item.Úitem_staff_03u!   Cá»­u TiÃªu LÃ´i Ä�Ã¬nh TrÆ°á»£ngéP   u   CÆ°Æ¡ng KhÃ­ SÆ¡ Cáº¥pÚphys_dmgé
   é   é   ©ÚnameÚ
affix_typeÚstat_keyÚmin_valÚmax_valÚcurrent_valu   Nhanh Nháº¹nÚ	atk_speedé   r*   ©r   r   r   r   r    c                 ó   — g | ]	}|j         ‘Œ
S © )r6   )Ú.0Úas     r   ú
<listcomp>zNTestPrimalStonesCrafting.test_hon_nguyen_thach_reroll_rare.<locals>.<listcomp>F   s   € Ð>Ð>Ð> q˜AœFÐ>Ð>Ð>r   r)   N)r   r   r,   r   r   ÚPREFIXÚSUFFIXr    r   Úapply_hon_nguyen_thachr   r   r   r   )r   Ú	rare_itemÚoriginal_affixesr#   r$   s        r   Ú!test_hon_nguyen_thach_reroll_rarez:TestPrimalStonesCrafting.test_hon_nguyen_thach_reroll_rare:   s"  € åØ%Ø9ØÝÔ&åÐ3Å	Ô@PÐ[eÐoqÐ{}ð  LNð  Oñ  Oô  OÝ˜>µiÔ6FÐQ\ÐfgÐqsð  BCð  Dñ  Dô  Dðð	
ñ 	
ô 	
ˆ	ð ?Ð>¨IÔ,=Ð>Ñ>Ô>Ðà”{×9Ò9¸)ÑDÔD‰ˆ�Ø�Š˜Ñ Ô Ð Ø×Ò˜Ô)­:Ô+>Ñ?Ô?Ð?Ø�Š˜�S Ô!2Ñ3Ô3Ð8Ð8Ò8Ð8°qÒ8Ð8Ð8Ð8Ñ9Ô9Ð9Ð9Ð9r   c                 ó”  — t          dddt          j        t          dt          j        dddd¬	¦  «        g¬
¦  «        }| j                             |¦  «        \  }}|                      |¦  «         |  	                    |j
        d         j        d¦  «         |                      d|j
        d         j        cxk    odk    nc ¦  «         dS )u]   ThiÃªn Má»‡nh Ä�an (Destiny Rune) re-rolls numbers within range without altering affix names.Úitem_ring_04u   ThiÃªn CÆ°Æ¡ng Chá»‰ HoÃ néK   u   ChÃ¢n KhÃ­ Há»™ Thá»ƒÚenergy_shieldr   éd   é4   r5   r>   r   N)r   r   r,   r   r   rD   r   Úapply_thien_menh_danr   r   r    r6   r;   )r   rG   r#   r$   s       r   Ú*test_thien_menh_dan_rerolls_min_max_valueszCTestPrimalStonesCrafting.test_thien_menh_dan_rerolls_min_max_valuesM   sé   € åØ$Ø2ØÝÔ&åÐ2½yÔ?OÐZiÐsuð  @Cð  QSð  Tñ  Tô  Tðð
ñ 
ô 
ˆ	ð ”{×7Ò7¸	ÑBÔB‰ˆ�Ø�Š˜Ñ Ô Ð à×Ò˜Ô*¨1Ô-Ô2Ð4KÑLÔLÐLà�Š˜˜iÔ/°Ô2Ô>ÐEÐEÒEÐEÀ#ÒEÐEÐEÐEÑFÔFÐFÐFÐFr   c                 ó¶  — t          dddt          j        t          dt          j        dddd¬¦  «        t          d	t          j        d
ddd¬¦  «        g¬¦  «        }| j                             |¦  «        \  }}|  	                    |¦  «         |  
                    |j        |j        ¦  «         |                      |j        ¦  «         |                      t          |j        ¦  «        t          |j        ¦  «        ¦  «         |                      |j        d         j        d¦  «         | j                             |¦  «        \  }}|                      |¦  «         dS )uX   ThÃ¡i HÆ° CÃ n KhÃ´n KÃ­nh (Mirror of Void) clones item perfectly and marks as mirrored.Úitem_sword_masterpieceu   ThÃ¡i HÆ° Tráº£m Long Kiáº¿mrN   u   Tháº§n Uy VÃ´ Songr1   é–   éÈ   r5   u   Cá»±c Tá»‘cr<   r3   é   r>   r   N)r   r   r,   r   r   rD   rE   r   Úapply_thai_hu_kinhÚassertIsNotNoneÚassertNotEqualr   r   Úis_mirroredr   r   r    r;   rF   ÚassertFalse)r   Úgod_tier_swordÚmirrored_copyr$   Ú
cannot_modÚ_s         r   Ú'test_thai_hu_kinh_creates_mirrored_copyz@TestPrimalStonesCrafting.test_thai_hu_kinh_creates_mirrored_copy_   sf  € å!Ø.Ø4ØÝÔ&åÐ/½IÔ<LÐWaÐknÐx{ð  JMð  Nñ  Nô  NÝ˜=µYÔ5EÐP[ÐegÐqsð  BDð  Eñ  Eô  Eðð	
ñ 	
ô 	
ˆð "œ[×;Ò;¸NÑKÔKÑˆ�sØ×Ò˜]Ñ+Ô+Ð+Ø×Ò˜MÔ3°^Ô5MÑNÔNÐNØ�Š˜Ô1Ñ2Ô2Ð2Ø×Ò�˜]Ô2Ñ3Ô3µS¸Ô9OÑ5PÔ5PÑQÔQÐQØ×Ò˜Ô.¨qÔ1Ô=¸sÑCÔCÐCð œ×:Ò:¸=ÑIÔI‰ˆ
�AØ×Ò˜Ñ$Ô$Ð$Ð$Ð$r   c                 óˆ  — ddddœ}| j                              d|¦  «        \  }}}|                      |¦  «         |                      |d         d¦  «         |                      |d         d¦  «         d	d
dœ}| j                              d|¦  «        \  }}}|                      |¦  «         |                      d|¦  «         dS )zOVerifies synthesizing Agent_Orb Tier 1 and Tier 2 from primal spiritual stones.r2   r=   r   )Úcurr_khai_linh_chauÚcurr_chaos_stoneÚcurr_destiny_runeÚitem_agent_orb_tier1rb   rc   r)   r   r   )rb   rc   u   Thiáº¿u nguyÃªn liá»‡uN)r   Úcraft_agent_orbr   r   r[   ÚassertIn)	r   Ú	materialsÚokr$   ÚupdatedÚinsufficientÚfail_okÚfail_msgr_   s	            r   Útest_craft_agent_orb_synthesisz7TestPrimalStonesCrafting.test_craft_agent_orb_synthesisv   sâ   € ð $&Ø !Ø!"ð
ð 
ˆ	ð  œ;×6Ò6Ð7MÈyÑYÔYÑˆˆC�Ø�Š˜ÑÔÐØ×Ò˜Ð!6Ô7¸Ñ;Ô;Ð;Ø×Ò˜Ð!3Ô4°aÑ8Ô8Ð8ð 01ÀaÐHÐHˆØ#œ{×:Ò:Ð;QÐS_Ñ`Ô`Ñˆ�˜1Ø×Ò˜Ñ!Ô!Ð!Ø�ŠÐ.°Ñ9Ô9Ð9Ð9Ð9r   c                 ó6  — t          dddt          j        ¬¦  «        }| j                             |¦  «        \  }}|                      |¦  «         |                      |j        t          j        ¦  «         t          dddt          j        ¬¦  «        }| j         	                    |¦  «        \  }}|                      |¦  «         |                      |j        t          j
        ¦  «         | j                             |¦  «        \  }}|                      |¦  «         | j                             |¦  «        \  }}|                      |¦  «         | j                             |¦  «        \  }}|                      |¦  «         |                      |j        ¦  «         dS )	zJVerifies that Savage PoE2 aliases work seamlessly for all crafting stones.Úsavage_axe_01u   Hung Ma RÃ¬u RÃ¡ché<   r   Úaxe_02u	   Ä�ao Gá»‰r   N)r   r   r   r   Úapply_hac_so_thachr   r   r   r   Úapply_uan_ma_thachr,   Úapply_huyet_hon_thachÚapply_co_cot_anÚapply_huyet_anh_co_kinhrX   rZ   )r   Úitemri   r_   Ú	norm_itemÚmirroreds         r   Ú!test_savage_primal_barter_aliasesz:TestPrimalStonesCrafting.test_savage_primal_barter_aliases‰   su  € åØ%Ø*ØÝÔ'ð	
ñ 
ô 
ˆð ”×.Ò.¨tÑ4Ô4‰ˆˆAØ�Š˜ÑÔÐØ×Ò˜œ¥jÔ&:Ñ;Ô;Ð;õ  x¸;ÐSUÕ^hÔ^rÐsÑsÔsˆ	Ø”×.Ò.¨yÑ9Ô9‰ˆˆAØ�Š˜ÑÔÐØ×Ò˜Ô)­:Ô+>Ñ?Ô?Ð?ð ”×1Ò1°)Ñ<Ô<‰ˆˆAØ�Š˜ÑÔÐð ”×+Ò+¨IÑ6Ô6‰ˆˆAØ�Š˜ÑÔÐð ”k×9Ò9¸)ÑDÔD‰ˆ�!Ø×Ò˜XÑ&Ô&Ð&Ø�Š˜Ô,Ñ-Ô-Ð-Ð-Ð-r   N)Ú__name__Ú
__module__Ú__qualname__r   r%   r-   rI   rQ   r`   rn   r{   r@   r   r   r	   r	      s�   € € € € € ð'ð 'ð 'ð<ð <ð <ð<ð <ð <ð:ð :ð :ð&Gð Gð Gð$%ð %ð %ð.:ð :ð :ð&.ð .ð .ð .ð .r   r	   Ú__main__)Ú__doc__ÚunittestÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.primal_stones_craftingr   r   r   r   r   ÚTestCaser	   r|   Úmainr@   r   r   ú<module>r�      s  ðð
ð 
ð €€€Ø 
€
€
€
Ø 	€	€	€	à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð ð ð ð ðK.ð K.ð K.ð K.ð K.˜xÔ0ñ K.ô K.ð K.ð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   