§
    ¹»jå  ã            
       ó˜  — d Z ddlZddlmc m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 ddlmZmZ ddlmZ ddlmZmZ  G d„ d	e	j        ¦  «        Zed
k    r e	j        ¦   «          dS dS )aY  
Unit tests for FreeExile Character Ascendancy & Flesh Metamorphosis System.
Tests:
- 10 Primal Trials progression (3 points each, 30 points total).
- Ascendancy Class Selection & Tree Validation.
- Minor (1pt), Notable (2pt), and Keystone (3pt) allocation & prerequisite graph.
- Rule-Bending Paradigm Shifts for Items, Skills, and Base Stats.
é    Nz../../server)ÚAscendancyClassIdÚAscendancyNodeTypeÚKeystoneParadigm)Úget_canonical_trialsÚget_ascendancy_nodes)ÚAscendancyEngine)ÚCharacterLoadoutÚMartialSectc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestAscendancySystemc                 ó’   — t          ¦   «         | _        d| _        t          | j        dt          j        dddddd¬¦	  «	        | _        d S )Niç  ÚManTocLuuDayé2   g     @�@g     @@g      i@)	Úactor_idÚnameÚsectÚ	cuong_theÚ	than_phapÚ	than_niemÚmax_hpÚmax_qiÚmax_ward_barrier)r   Úenginer   r	   r
   ÚTHANH_PHONGÚloadout)Úselfs    ú:C:\Projects\FreeExile\tests\unit\test_ascendancy_system.pyÚsetUpzTestAscendancySystem.setUp   sP   € Ý&Ñ(Ô(ˆŒØˆŒÝ'Ø”]ØÝÔ(ØØØØØØ"ð

ñ 

ô 

ˆŒˆˆó    c                 óJ  — t          ¦   «         }|                      t          |¦  «        d¦  «         t          d„ |D ¦   «         ¦  «        }|                      |d¦  «         |                      |d         j        d¦  «         |                      |d         j        d¦  «         dS )	uY   Kiá»ƒm tra cÃ³ Ä‘Ãºng 10 ThÃ­ Luyá»‡n Cá»• Ä�Ã n, má»—i láº§n thÆ°á»Ÿng Ä‘Ãºng 3 Ä‘iá»ƒm.é
   c              3   ó$   K  — | ]}|j         V — Œd S )N)Úreward_points)Ú.0Úts     r   ú	<genexpr>zOTestAscendancySystem.test_canonical_trials_count_and_rewards.<locals>.<genexpr>1   s$   è è € Ð;Ð;¨q˜1œ?Ð;Ð;Ð;Ð;Ð;Ð;r   é   r   é#   éÿÿÿÿéd   N)r   ÚassertEqualÚlenÚsumÚrequired_level)r   ÚtrialsÚtotal_pointss      r   Ú'test_canonical_trials_count_and_rewardsz<TestAscendancySystem.test_canonical_trials_count_and_rewards-   s�   € å%Ñ'Ô'ˆØ×Ò�˜V™œ bÑ)Ô)Ð)ÝÐ;Ð;°FÐ;Ñ;Ô;Ñ;Ô;ˆØ×Ò˜ rÑ*Ô*Ð*ð 	×Ò˜ œÔ1°2Ñ6Ô6Ð6Ø×Ò˜ œÔ2°CÑ8Ô8Ð8Ð8Ð8r   c                 ó  — | j                              | j        ¦  «        }|                      |j        d¦  «         | j                              | j        d¬¦  «        \  }}}|                      |¦  «         |                      |d¦  «         t          dd¦  «        D ]p}| j                              | j        |¬¦  «        \  }}}|                      |¦  «         |                      |d¦  «         |                      |j        |dz  ¦  «         Œq|                      |j        d¦  «         |                      t          |j
        ¦  «        d¦  «         | j                              | j        d¬¦  «        \  }}}|                      |¦  «         d	S )
uO   HoÃ n thÃ nh láº§n lÆ°á»£t 10 thÃ­ luyá»‡n, nháº­n Ä‘á»§ 30 Ä‘iá»ƒm thÄƒng hoa.r   é   )Útrial_indexé   é   é   r'   r!   N)r   Úget_or_create_stater   r+   Útotal_points_earnedÚcomplete_trialÚassertFalseÚrangeÚ
assertTruer,   Úcompleted_trials)r   ÚstateÚokÚmsgÚptsÚiÚok_dupÚ_s           r   Ú1test_sequential_trial_completion_awards_30_pointszFTestAscendancySystem.test_sequential_trial_completion_awards_30_points8   s|  € à”×/Ò/°´Ñ>Ô>ˆØ×Ò˜Ô2°AÑ6Ô6Ð6ð ”{×1Ò1°$´-ÈQÐ1ÑOÔO‰ˆˆC�Ø×Ò˜ÑÔÐØ×Ò˜˜aÑ Ô Ð õ �q˜"‘”ð 	?ð 	?ˆAØœ;×5Ò5°d´mÐQRÐ5ÑSÔS‰LˆB��SØ�OŠO˜BÑÔÐØ×Ò˜S !Ñ$Ô$Ð$Ø×Ò˜UÔ6¸¸A¹Ñ>Ô>Ð>Ð>à×Ò˜Ô2°BÑ7Ô7Ð7Ø×Ò�˜UÔ3Ñ4Ô4°bÑ9Ô9Ð9ð ”{×1Ò1°$´-ÈQÐ1ÑOÔO‰ˆ��1Ø×Ò˜Ñ Ô Ð Ð Ð r   c                 ó  — | j                              | j        t          j        ¦  «        \  }}|                      |¦  «         | j                              | j        d¦  «         | j                              | j        t          j        ¦  «        \  }}|                      |¦  «         | j                              | j        d¦  «        \  }}|                      |¦  «         |  	                    d|¦  «         | j                              | j        d¦  «        \  }}|                      |¦  «         | j                              | j        d¦  «        \  }}|                      |¦  «         | j                              | j        d¦  «        \  }}	|                      |¦  «         |  	                    d|	¦  «         | j                              | j        d¦  «         | j                              | j        d¦  «        \  }
}|                      |
¦  «         dS )	uR   Kiá»ƒm tra chá»�n Há»‡ PhÃ¡i ThÄƒng Hoa vÃ  quy táº¯c máº¯t xÃ­ch dáº«n Ä‘Æ°á»�ng.r5   ég   u   tiÃªn quyáº¿tée   éf   u   KhÃ´ng Ä‘á»§ Ä‘iá»ƒmr3   N)
r   Úchoose_ascendancy_classr   r   ÚTUYET_MENH_KIEM_MAr;   r:   r=   Úallocate_nodeÚassertIn)r   r@   rA   Ú
ok_notableÚmsg_notableÚok_101rE   Úok_102Úok_103Úmsg_failÚok_103_successs              r   Ú+test_class_selection_and_prerequisite_rulesz@TestAscendancySystem.test_class_selection_and_prerequisite_rulesP   sÙ  € ð ”+×5Ò5ØŒMÕ,Ô?ñ
ô 
‰ˆˆCð 	×Ò˜ÑÔÐð 	Œ×"Ò" 4¤=°!Ñ4Ô4Ð4Ø”+×5Ò5ØŒMÕ,Ô?ñ
ô 
‰ˆˆCð 	�Š˜ÑÔÐð #'¤+×";Ò";¸D¼MÈ3Ñ"OÔ"OÑˆ
�KØ×Ò˜Ñ$Ô$Ð$Ø�Š�o {Ñ3Ô3Ð3ð ”K×-Ò-¨d¬m¸SÑAÔA‰	ˆ�Ø�Š˜ÑÔÐà”K×-Ò-¨d¬m¸SÑAÔA‰	ˆ�Ø�Š˜ÑÔÐð  œ;×4Ò4°T´]ÀCÑHÔHÑˆ�Ø×Ò˜Ñ Ô Ð Ø�ŠÐ,¨hÑ7Ô7Ð7ð 	Œ×"Ò" 4¤=°!Ñ4Ô4Ð4Ø œK×5Ò5°d´mÀSÑIÔIÑˆ˜Ø�Š˜Ñ'Ô'Ð'Ð'Ð'r   c                 óÞ  — t          dd¦  «        D ]"}| j                             | j        |¦  «         Œ#| j                             | j        t
          j        ¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        | j	        ¦  «        }|  
                    |j        ¦  «         |                      |j        d¦  «         |  
                    |j        ¦  «         |                      d|j        ¦  «         d	S )
ug   Kiá»ƒm tra Keystone biáº¿n Ä‘á»•i ITEM: Ä�á»™c Binh Ma Cá»‘t (KhÃ³a offhand, 2H +150%, Chuyá»ƒn Chaos).r5   é   rI   rJ   rH   éh   g      @ÚRULE_SINGLE_WEAPON_CHAOSN)r<   r   r:   r   rK   r   rL   rM   Úcalculate_mutationsr   r=   Úoffhand_disabledr+   Útwo_hand_stat_boostÚskills_convert_to_chaosrN   Úactive_paradigm_rules©r   rC   Úeffectss      r   Útest_item_mutation_keystonez0TestAscendancySystem.test_item_mutation_keystonev   s:  € õ �q˜!‘”ð 	9ð 	9ˆAØŒK×&Ò& t¤}°aÑ8Ô8Ð8Ð8àŒ×+Ò+¨D¬MÕ;LÔ;_Ñ`Ô`Ð`ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5à”+×1Ò1°$´-ÀÄÑNÔNˆØ�Š˜Ô0Ñ1Ô1Ð1Ø×Ò˜Ô4°cÑ:Ô:Ð:Ø�Š˜Ô7Ñ8Ô8Ð8Ø�ŠÐ0°'Ô2OÑPÔPÐPÐPÐPr   c                 ój  — t          dd¦  «        D ]"}| j                             | j        |¦  «         Œ#| j                             | j        t
          j        ¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        | j	        ¦  «        }|  
                    |j        ¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         dS )	ui   Kiá»ƒm tra Keystone biáº¿n Ä‘á»•i SKILL: Huyáº¿t Táº¿ Tháº§n CÃ´ng (DÃ¹ng mÃ¡u thay mana, +50% uy lá»±c).r5   rX   i‘  i’  i“  g      ø?ÚRULE_BLOOD_PRIMACYN)r<   r   r:   r   rK   r   ÚHUYET_TUY_MA_YrM   r[   r   r=   Úskills_cost_lifeÚassertAlmostEqualÚskills_damage_boostrN   r_   r`   s      r   Ú"test_skill_transformation_keystonez7TestAscendancySystem.test_skill_transformation_keystoneˆ   s	  € å�q˜!‘”ð 	9ð 	9ˆAØŒK×&Ò& t¤}°aÑ8Ô8Ð8Ð8àŒ×+Ò+¨D¬MÕ;LÔ;[Ñ\Ô\Ð\ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5à”+×1Ò1°$´-ÀÄÑNÔNˆØ�Š˜Ô0Ñ1Ô1Ð1Ø×Ò˜wÔ:¸DÑAÔAÐAØ�ŠÐ*¨GÔ,IÑJÔJÐJÐJÐJr   c                 óÔ  — t          dd¦  «        D ]"}| j                             | j        |¦  «         Œ#| j                             | j        t
          j        ¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        d¦  «         | j                             | j        | j	        ¦  «        }|  
                    |j        d¦  «         |                      |j        d¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                      d|j        ¦  «         d	S )
uƒ   Kiá»ƒm tra Keystone biáº¿n Ä‘á»•i CHá»ˆ Sá»�: Cá»‘t GiÃ¡p Ä�oáº¡t Má»‡nh (HP cá»‘ Ä‘á»‹nh 1, Ward x5, Miá»…n nhiá»…m Chaos/Ä�á»™c).r5   rX   iõ  iö  i÷  g      ð?g      @ÚRULE_CHAOS_INOCULATION_BONEN)r<   r   r:   r   rK   r   ÚBANG_CUC_MA_QUANrM   r[   r   r+   Úforced_max_hprg   Úward_multiplierr=   Úchaos_immuneÚpoison_immunerN   r_   r`   s      r   Ú!test_base_stat_mutation_keystonesz6TestAscendancySystem.test_base_stat_mutation_keystones—   s7  € å�q˜!‘”ð 	9ð 	9ˆAØŒK×&Ò& t¤}°aÑ8Ô8Ð8Ð8àŒ×+Ò+¨D¬MÕ;LÔ;]Ñ^Ô^Ð^ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5ØŒ×!Ò! $¤-°Ñ5Ô5Ð5à”+×1Ò1°$´-ÀÄÑNÔNˆØ×Ò˜Ô.°Ñ4Ô4Ð4Ø×Ò˜wÔ6¸Ñ<Ô<Ð<Ø�Š˜Ô,Ñ-Ô-Ð-Ø�Š˜Ô-Ñ.Ô.Ð.Ø�ŠÐ3°WÔ5RÑSÔSÐSÐSÐSr   N)
Ú__name__Ú
__module__Ú__qualname__r   r1   rF   rV   rb   ri   rq   © r   r   r   r      s‰   € € € € € ð
ð 
ð 
ð	9ð 	9ð 	9ð!ð !ð !ð0$(ð $(ð $(ðLQð Qð Qð$Kð Kð KðTð Tð Tð Tð Tr   r   Ú__main__) Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚosÚsysÚunittestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úserver.world.ascendancy_typesr   r   r   Úserver.world.ascendancy_catalogr   r   Úserver.world.ascendancy_enginer   Úserver.world.martial_typesr	   r
   ÚTestCaser   rr   Úmainru   r   r   ú<module>r�      sr  ððð ð € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DðITð ITð ITð ITð IT˜8Ô,ñ ITô ITð ITðX ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   