§
    –V¼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mZmZmZ ddlmZ ddlmZ ddlmZ  G d„ d	ej        ¦  «        Zed
k    r ej         ¦   «          dS dS )z¥
Unit tests for FreeExile Character Inventory, Personal Stash, and Premium Merchant Stash.
Follows Autonomous TDD Protocol: Tests formulation before implementation.
é    Nz../../server)ÚItemTypeÚEquipmentSlotÚInventoryItemÚCharacterInventoryÚPersonalStashÚMerchantStashTab)ÚInventoryService)ÚMegaShopService)Ú
ItemRarityc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestInventoryStashSystemc                 ó  — t          ¦   «         | _        t          | j        ¬¦  «        | _        d| _        d| _        | j                             | j        ¦  «         | j                             | j        | j        ¦  «         d S )N)Úshop_serviceÚexile_warrior_999Úchar_berserker_01)r
   r   r	   Úinv_serviceÚ
account_idÚcharacter_idÚregister_playerÚget_or_create_character_storage)Úselfs    ú:C:\Projects\FreeExile\tests\unit\test_inventory_service.pyÚsetUpzTestInventoryStashSystem.setUp   sr   € Ý+Ñ-Ô-ˆÔÝ+¸Ô9JÐKÑKÔKˆÔØ-ˆŒØ/ˆÔØÔ×)Ò)¨$¬/Ñ:Ô:Ð:ØÔ×8Ò8¸¼È$ÔJ[Ñ\Ô\Ð\Ð\Ð\ó    c                 óˆ  — t          dddt          j        t          j        d¬¦  «        }| j                             | j        | j        |d¬¦  «        \  }}}|  	                    |¦  «         |  
                    |d¦  «         | j                             | j        | j        dd¬	¦  «        \  }}|  	                    |¦  «         | j                             | j        | j        ¦  «        }|                      d|j        ¦  «         |                      d|j        ¦  «         |  
                    |j        d         j        d¦  «         d
S )z5Player can add items to bag and rearrange item slots.Úitem_sword_001Úwpn_abyssal_chainguard_swordõ#   XÃ­ch Huyáº¿t Tráº£m Ma Cá»± Kiáº¿méU   ©Ú	item_uuidÚitem_idÚnameÚ	item_typeÚrarityÚ
item_levelr   ©Úpreferred_sloté   )Ú	from_slotÚto_slotN)r   r   ÚWEAPONr   ÚCUC_PHAMr   Úadd_item_to_inventoryr   r   Ú
assertTrueÚassertEqualÚmove_inventory_itemÚget_character_inventoryÚassertNotInÚslotsÚassertInr!   )r   ÚswordÚsuccessÚmsgÚslotÚmove_successÚmove_msgÚinvs           r   Ú test_inventory_add_and_move_itemz9TestInventoryStashSystem.test_inventory_add_and_move_item"   sD  € åØ&Ø2Ø6Ý”oÝÔ&Øð
ñ 
ô 
ˆð "Ô-×CÒCØŒO˜TÔ.°Àað Dñ 
ô 
Ñˆ��dð 	�Š˜Ñ Ô Ð Ø×Ò˜˜qÑ!Ô!Ð!ð "&Ô!1×!EÒ!EØŒO˜TÔ.¸!ÀQð "Fñ "
ô "
Ñˆ�hð 	�Š˜Ñ%Ô%Ð%àÔ×6Ò6°t´ÈÔHYÑZÔZˆØ×Ò˜˜CœIÑ&Ô&Ð&Ø�Š�a˜œÑ#Ô#Ð#Ø×Ò˜œ 1œÔ/Ð1AÑBÔBÐBÐBÐBr   c                 óz  — t          dddt          j        t          j        d¬¦  «        }| j                             | j        | j        |d¬¦  «         | j         	                    | j        | j        dt          j        ¬¦  «        \  }}|                      |¦  «         | j                             | j        | j        ¦  «        }|                      d|j        ¦  «         |                      t          j        |j        ¦  «         |                      |j        t          j                 j        d¦  «         | j                             | j        | j        t          j        d	¬
¦  «        \  }}|                      |¦  «         |                      t          j        |j        ¦  «         |                      d	|j        ¦  «         dS )z@Player can equip weapons from inventory and unequip back to bag.Úitem_sword_002r   r   r   r    é   r'   )Úinv_slotÚ
equip_sloté   )rB   Útarget_inv_slotN)r   r   r,   r   r-   r   r.   r   r   Ú
equip_itemr   Ú	MAIN_HANDr/   r2   r3   r4   r5   Ú	equipmentr0   r!   Úunequip_item)r   r6   Ú
eq_successÚeq_msgr<   Úuneq_successÚuneq_msgs          r   Útest_equip_and_unequip_gearz4TestInventoryStashSystem.test_equip_and_unequip_gear=   s™  € åØ&Ø2Ø6Ý”oÝÔ&Øð
ñ 
ô 
ˆð 	Ô×.Ò.ØŒO˜TÔ.°Àað 	/ñ 	
ô 	
ð 	
ð
 "Ô-×8Ò8ØŒO˜TÔ.¸Å}ÔG^ð 9ñ 
ô 
Ñˆ
�Fð 	�Š˜
Ñ#Ô#Ð#àÔ×6Ò6°t´ÈÔHYÑZÔZˆØ×Ò˜˜CœIÑ&Ô&Ð&Ø�Š•mÔ-¨s¬}Ñ=Ô=Ð=Ø×Ò˜œ¥}Ô'>Ô?ÔIÐK[Ñ\Ô\Ð\ð "&Ô!1×!>Ò!>ØŒO˜TÔ.½=Ô;RÐdeð "?ñ "
ô "
Ñˆ�hð 	�Š˜Ñ%Ô%Ð%Ø×Ò�Ô0°#´-Ñ@Ô@Ð@Ø�Š�a˜œÑ#Ô#Ð#Ð#Ð#r   c           
      óÀ  — t          dddt          j        t          j        ddd¬¦  «        }| j                             | j        | j        |d¬	¦  «         | j         	                    | j        | j        dd
d¬¦  «        \  }}|  
                    |¦  «         | j                             | j        | j        ¦  «        }|                      d|j        d
         j        ¦  «         |                      |j        d
         j        d         j        d¦  «         | j                             | j        | j        d
dd¬¦  «        \  }}|  
                    |¦  «         |                      d|j        d
         j        ¦  «         | j                             | j        | j        ¦  «        }|                      d|j        ¦  «         |                      |j        d         j        d¦  «         dS )z=Player can deposit items from bag to stash and withdraw back.Úitem_gem_001Úcurr_blood_soul_gemu   Huyáº¿t Há»“n Tháº¡chéF   é2   iˆ  )r!   r"   r#   r$   r%   r&   Ústack_countÚ	max_stacké   r'   Útab_generalr   )rA   Útab_idÚ
stash_sloté   )rW   rX   rD   N)r   r   ÚCURRENCYr   Ú	LINH_PHAMr   r.   r   r   Údeposit_to_stashr/   Úget_personal_stashr5   Útabsr4   r0   r!   Úwithdraw_from_stashr3   r2   )r   ÚgemÚdep_successÚdep_msgÚstashÚ
wd_successÚwd_msgr<   s           r   Ú(test_deposit_and_withdraw_personal_stashzATestInventoryStashSystem.test_deposit_and_withdraw_personal_stash^   sÔ  € åØ$Ø)Ø(ÝÔ'ÝÔ'ØØØð	
ñ 	
ô 	
ˆð 	Ô×.Ò.ØŒO˜TÔ.°ÀAð 	/ñ 	
ô 	
ð 	
ð
  $Ô/×@Ò@ØŒO˜TÔ.¸À=Ð]^ð  Añ  
ô  
Ñˆ�Wð 	�Š˜Ñ$Ô$Ð$àÔ ×3Ò3°D´OÀTÔEVÑWÔWˆØ�Š�a˜œ MÔ2Ô8Ñ9Ô9Ð9Ø×Ò˜œ MÔ2Ô8¸Ô;ÔEÀ~ÑVÔVÐVð "Ô-×AÒAØŒO˜TÔ.°}ÐQRÐdeð Bñ 
ô 
Ñˆ
�Fð 	�Š˜
Ñ#Ô#Ð#Ø×Ò˜˜EœJ }Ô5Ô;Ñ<Ô<Ð<àÔ×6Ò6°t´ÈÔHYÑZÔZˆØ�Š�a˜œÑ#Ô#Ð#Ø×Ò˜œ 1œÔ/°Ñ@Ô@Ð@Ð@Ð@r   c                 ó@  — | j                              | j        | j        ¦  «        }|                      |¦  «         t          dddt          j        t          j	        d¬¦  «        }| j          
                    | j        | j        |d¬¦  «         | j                              | j        | j        dddd	¬
¦  «        \  }}|                      |¦  «         |                      d|                     ¦   «         ¦  «         |                      d|                     ¦   «         ¦  «         dS )zAMerchant Stash tab is a premium feature and is LOCKED by default.Úitem_sword_003Úwpn_dragonbone_maw_greataxeõ"   ThÃ´n Cá»‘t Long Ngáº¡c Cá»± Phá»§éZ   r    r   r'   ÚSTONE_HON_NGUYENé   ©r   r   rA   Úmerchant_slotÚprice_currencyÚprice_amountÚlockedÚmegashopN)r   Úis_merchant_stash_unlockedr   r   ÚassertFalser   r   r,   r   Ú
THAN_THOAIr.   Úplace_item_in_merchant_stashr5   Úlower)r   Úis_unlockedr6   Úlist_successÚlist_msgs        r   Ú,test_merchant_stash_tab_is_locked_by_defaultzETestInventoryStashSystem.test_merchant_stash_tab_is_locked_by_defaultƒ   s%  € àÔ&×AÒAÀ$Ä/ÐSWÔSdÑeÔeˆØ×Ò˜Ñ%Ô%Ð%õ Ø&Ø1Ø5Ý”oÝÔ(Øð
ñ 
ô 
ˆð 	Ô×.Ò.ØŒO˜TÔ.°Àað 	/ñ 	
ô 	
ð 	
ð "&Ô!1×!NÒ!NØ”ØÔ*ØØØ-Øð "Oñ "
ô "
Ñˆ�hð 	×Ò˜Ñ&Ô&Ð&Ø�Š�h §¢Ñ 0Ô 0Ñ1Ô1Ð1Ø�Š�j (§.¢.Ñ"2Ô"2Ñ3Ô3Ð3Ð3Ð3r   c                 ó’  — |                       | j                             | j        ¦  «        d¦  «         | j                             | j        | j        ¦  «        \  }}|                      |¦  «         |                      d| 	                    ¦   «         ¦  «         | j         
                    | j        dd¬¦  «         |                       | j                             | j        ¦  «        d¦  «         | j                             | j        | j        ¦  «        \  }}|                      |¦  «         |                      | j                             | j        | j        ¦  «        ¦  «         |                       | j                             | j        ¦  «        d¦  «         t          dddt          j        t           j        d	¬
¦  «        }| j                             | j        | j        |d¬¦  «         | j                             | j        | j        dddd¬¦  «        \  }}|                      |¦  «         | j                             | j        | j        ¦  «        }|                      d|j        ¦  «         |j        d         }|                       |j        d¦  «         |                       |j        d¦  «         |                       |j        d¦  «         dS )zQPurchasing the Premium Merchant Stash Tab in MegaShop with coins unlocks the tab.r   Úinsufficientiô  Útest_deposit)ÚreasonÚitem_sword_004ri   rj   rk   r    r'   rl   rm   rn   N)r0   r   Úget_player_coin_balancer   r   Ú unlock_merchant_stash_with_coinsr   ru   r5   rx   Úcredit_player_coinsr/   rt   r   r   r,   r   rv   r.   rw   Úget_merchant_stashr4   r!   Úasking_price_currencyÚasking_price_amount)r   Úunlock_successÚ
unlock_msgr6   rz   r{   Úmerchant_tabÚitem_in_slots           r   Ú-test_unlock_merchant_stash_via_megashop_coinszFTestInventoryStashSystem.test_unlock_merchant_stash_via_megashop_coins¡   sª  € ð 	×Ò˜Ô*×BÒBÀ4Ä?ÑSÔSÐUVÑWÔWÐWØ%)Ô%5×%VÒ%VØŒO˜TÔ.ñ&
ô &
Ñ"ˆ˜
ð 	×Ò˜Ñ(Ô(Ð(Ø�Š�n j×&6Ò&6Ñ&8Ô&8Ñ9Ô9Ð9ð 	Ô×-Ò-¨d¬o¸sÈ>Ð-ÑZÔZÐZØ×Ò˜Ô*×BÒBÀ4Ä?ÑSÔSÐUXÑYÔYÐYð &*Ô%5×%VÒ%VØŒO˜TÔ.ñ&
ô &
Ñ"ˆ˜
ð 	�Š˜Ñ'Ô'Ð'Ø�Š˜Ô(×CÒCÀDÄOÐUYÔUfÑgÔgÑhÔhÐhØ×Ò˜Ô*×BÒBÀ4Ä?ÑSÔSÐUVÑWÔWÐWõ Ø&Ø1Ø5Ý”oÝÔ(Øð
ñ 
ô 
ˆð 	Ô×.Ò.ØŒO˜TÔ.°Àað 	/ñ 	
ô 	
ð 	
ð "&Ô!1×!NÒ!NØ”ØÔ*ØØØ-Øð "Oñ "
ô "
Ñˆ�hð 	�Š˜Ñ%Ô%Ð%àÔ'×:Ò:¸4¼?ÈDÔL]Ñ^Ô^ˆØ�Š�a˜Ô+Ñ,Ô,Ð,Ø#Ô)¨!Ô,ˆØ×Ò˜Ô/Ð1AÑBÔBÐBØ×Ò˜Ô;Ð=OÑPÔPÐPØ×Ò˜Ô9¸2Ñ>Ô>Ð>Ð>Ð>r   c                 ó   — | j                              | j        d¦  «         | j                             | j        | j        ¦  «         t          dddt          j        t          j
        d¬¦  «        }| j                             | j        | j        |d¬¦  «         | j                             | j        | j        dd	d
d¬¦  «         | j                             | j        | j        d	d
d¬¦  «        \  }}|                      |¦  «         | j                             | j        | j        ¦  «        }|                      |j        d	         j        d¦  «         | j                             | j        | j        d	d¬¦  «        \  }}|                      |¦  «         |                      d	|j        ¦  «         | j                             | j        | j        ¦  «        }|                      d|j        ¦  «         |                      |j        d         j        d¦  «         dS )zLSeller can update listing price and withdraw unsold items back to inventory.iè  Úitem_axe_005ri   rj   éP   r    rU   r'   r@   rl   é
   )rA   ro   rp   rq   é   )ro   Únew_currencyÚ
new_amountrC   )ro   rD   N)r   r„   r   r   rƒ   r   r   r   r,   r   r-   r.   rw   Úupdate_merchant_item_pricer/   r…   r0   r4   r‡   Úremove_item_from_merchant_stashr3   r2   r5   r!   )r   ÚaxeÚupd_successÚupd_msgÚm_tabrd   re   r<   s           r   Ú/test_merchant_stash_price_update_and_withdrawalzHTestInventoryStashSystem.test_merchant_stash_price_update_and_withdrawalÕ   s  € ð 	Ô×-Ò-¨d¬o¸tÑDÔDÐDØÔ×9Ò9¸$¼/È4ÔK\Ñ]Ô]Ð]åØ$Ø1Ø5Ý”oÝÔ&Øð
ñ 
ô 
ˆð 	Ô×.Ò.¨t¬ÀÔ@QÐSVÐghÐ.ÑiÔiÐiØÔ×5Ò5ØŒO˜TÔ.¸È!Ø-¸Bð 	6ñ 	
ô 	
ð 	
ð  $Ô/×JÒJØŒO˜TÔ.¸aØ+¸ð  Kñ  
ô  
Ñˆ�Wð 	�Š˜Ñ$Ô$Ð$ØÔ ×3Ò3°D´OÀTÔEVÑWÔWˆØ×Ò˜œ QœÔ;¸RÑ@Ô@Ð@ð "Ô-×MÒMØŒO˜TÔ.¸aÐQRð Nñ 
ô 
Ñˆ
�Fð 	�Š˜
Ñ#Ô#Ð#Ø×Ò˜˜EœKÑ(Ô(Ð(àÔ×6Ò6°t´ÈÔHYÑZÔZˆØ�Š�a˜œÑ#Ô#Ð#Ø×Ò˜œ 1œÔ/°Ñ@Ô@Ð@Ð@Ð@r   N)
Ú__name__Ú
__module__Ú__qualname__r   r=   rM   rf   r|   rŒ   rš   © r   r   r   r      sŽ   € € € € € ð]ð ]ð ]ðCð Cð Cð6$ð $ð $ðB#Að #Að #AðJ4ð 4ð 4ð<2?ð 2?ð 2?ðh&Að &Að &Að &Að &Ar   r   Ú__main__)!Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úinventory.inventory_typesr   r   r   r   r   r   Úinventory.inventory_servicer	   Úshop.shop_servicer
   Úworld.primal_stones_craftingr   ÚTestCaser   r›   Úmainrž   r   r   ú<module>r¶      st  ððð ð
 € € € € € € € € € € € € €€€€Ø 
€
€
€
Ø 	€	€	€	à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðbAð bAð bAð bAð bA˜xÔ0ñ bAô bAð bAðJ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   