§
    ÷r»jõ  ã                   ó‚   — d Z ddlZ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 )z¨
Unit tests for Guild Shared Stash Service with Two-Phase Commit (2PC) protection.
Guarantees zero item duplication, strict role permissions, and immutable audit logs.
é    N)ÚGuildStashServiceÚ	GuildRoleÚTabAccessTypeÚGuildMemberÚ	GuildItemc                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestGuildStash2PCc                 ó¤  — t          ¦   «         | _        d| _        | j                             | j        dd¬¦  «         | j                             | j        t          ddt          j        ¬¦  «        ¦  «         | j                             | j        t          ddt          j        ¬¦  «        ¦  «         | j                             | j        t          d	d
t          j	        ¬¦  «        ¦  «         | j                             | j        t          ddt          j	        ¬¦  «        ¦  «         d| _
        d| _        d| _        | j                             | j        | j
        dt          j        ¬¦  «         | j                             | j        | j        dt          j        ¬¦  «         | j                             | j        | j        dt          j        ¬¦  «         d S )NÚguild_celestial_order_001zCelestial OrderÚplayer_master_1)Ú
guild_nameÚ	master_idu	   VÃµ Ä�áº¿)Ú	player_idÚplayer_nameÚroleÚplayer_officer_1u   Kiáº¿m TÃ´nÚplayer_member_1u   Hiá»‡p KhÃ¡ch AÚplayer_member_2u   Hiá»‡p KhÃ¡ch BÚtab_general_publicÚtab_officer_vaultÚtab_member_donationsu   Ä�an DÆ°á»£c & PhÃ´i Ä�á»“)Útab_idÚtab_nameÚaccess_typeu   Báº£o Khá»‘ TrÆ°á»Ÿng LÃ£ou   Ä�Ã³ng GÃ³p Bang Há»™i)r   ÚserviceÚguild_idÚcreate_guildÚ
add_memberr   r   ÚGUILD_MASTERÚOFFICERÚMEMBERÚ
tab_publicÚtab_officerÚtab_deposit_onlyÚ
create_tabr   ÚPUBLICÚOFFICER_ONLYÚDEPOSIT_ONLY)Úselfs    ú8C:\Projects\FreeExile\tests\unit\test_guild_stash_2pc.pyÚsetUpzTestGuildStash2PC.setUp   s+  € Ý(Ñ*Ô*ˆŒØ3ˆŒØŒ×!Ò! $¤-Ð<MÐYjÐ!ÑkÔkÐkð 	Œ×Ò ¤­{ÐEVÐdoÕvô  wMð  0Nñ  0Nô  0Nñ  	Oô  	Oð  	OØŒ×Ò ¤­{ÐEWÐerõ  zCô  zKð  0Lñ  0Lô  0Lñ  	Mô  	Mð  	MØŒ×Ò ¤­{ÐEVÐduõ  }Fô  }Mð  0Nñ  0Nô  0Nñ  	Oô  	Oð  	OØŒ×Ò ¤­{ÐEVÐduõ  }Fô  }Mð  0Nñ  0Nô  0Nñ  	Oô  	Oð  	Oð /ˆŒØ.ˆÔØ 6ˆÔàŒ×Ò ¤°d´oÐPlõ  {Hô  {OÐñ  	Pô  	Pð  	PØŒ×Ò ¤°dÔ6FÐQmõ  |Iô  |VÐñ  	Wô  	Wð  	WØŒ×Ò ¤°dÔ6KÐVnõ  }Jô  }WÐñ  	Xô  	Xð  	Xð  	Xð  	Xó    c                 óê  — t          ddd¬¦  «        }| j                             | j        | j        d|¦  «        \  }}|                      ||¦  «         | j                             | j        | j        ¦  «        }|                      t          |¦  «        d¦  «         |                      |d         j	        d¦  «         | j         
                    | j        | j        dd¦  «        \  }}}|                      ||¦  «         |                      |¦  «         |                      |j	        d¦  «         |                      t          | j                             | j        | j        ¦  «        ¦  «        d¦  «         d S )	NÚitem_azure_sword_01u   Thanh Phong Kiáº¿m PhÃ´ié   ©Ú	item_uuidÚ	item_nameÚ	item_tierr   é   r   r   )r   r   Údeposit_itemr   r"   Ú
assertTrueÚget_tab_itemsÚassertEqualÚlenr1   Úwithdraw_itemÚassertIsNotNone)r)   ÚitemÚsuccessÚmsgÚ	tab_itemsÚwithdrawn_items         r*   Ú,test_deposit_and_withdraw_public_tab_successz>TestGuildStash2PC.test_deposit_and_withdraw_public_tab_success%   s`  € ÝÐ#8ÐD^ÐjkÐlÑlÔlˆð ”|×0Ò0°´ÀÄÐQbÐdhÑiÔi‰ˆ�Ø�Š˜ Ñ%Ô%Ð%ð ”L×.Ò.¨t¬}¸d¼oÑNÔNˆ	Ø×Ò�˜Y™œ¨Ñ+Ô+Ð+Ø×Ò˜ 1œÔ/Ð1FÑGÔGÐGð (,¤|×'AÒ'AÀ$Ä-ÐQUÔQ`Ðbsð  vKñ  (Lô  (LÑ$ˆ��nØ�Š˜ Ñ%Ô%Ð%Ø×Ò˜^Ñ,Ô,Ð,Ø×Ò˜Ô1Ð3HÑIÔIÐIð 	×Ò�˜Tœ\×7Ò7¸¼ÀtÄÑWÔWÑXÔXÐZ[Ñ\Ô\Ð\Ð\Ð\r,   c                 óú  — t          ddd¬¦  «        }| j                             | j        | j        d|¦  «         | j                             | j        | j        dd¦  «        \  }}}|                      |¦  «         |                      d|¦  «         |                      |¦  «         | j                             | j        | j        dd¦  «        \  }}}|  	                    ||¦  «         |  
                    |¦  «         d S )	NÚitem_celestial_pill_01u   Cá»­u Chuyá»ƒn HoÃ n Há»“n Ä�ané   r0   r   r   ÚPERMISSION_DENIEDr   )r   r   r5   r   r#   r:   ÚassertFalseÚassertInÚassertIsNoner6   r;   ©r)   r<   r=   r>   Ú	withdrawns        r*   Ú,test_member_cannot_withdraw_from_officer_tabz>TestGuildStash2PC.test_member_cannot_withdraw_from_officer_tab:   s  € ÝÐ#;ÐGhÐtuÐvÑvÔvˆØŒ×!Ò! $¤-°Ô1AÐCTÐVZÑ[Ô[Ð[ð #'¤,×"<Ò"<¸T¼]ÈDÔL\Ð^oð  rJñ  #Kô  #KÑˆ��iØ×Ò˜Ñ!Ô!Ð!Ø�ŠÐ)¨3Ñ/Ô/Ð/Ø×Ò˜)Ñ$Ô$Ð$ð #'¤,×"<Ò"<¸T¼]ÈDÔL\Ð^pð  sKñ  #Lô  #LÑˆ��iØ�Š˜ Ñ%Ô%Ð%Ø×Ò˜YÑ'Ô'Ð'Ð'Ð'r,   c                 ó*  — t          ddd¬¦  «        }| j                             | j        | j        d|¦  «        \  }}|                      ||¦  «         | j                             | j        | j        dd¦  «        \  }}}|                      |¦  «         |                      d|¦  «         |  	                    |¦  «         | j                             | j        | j        dd¦  «        \  }}}|                      |¦  «         |  
                    |¦  «         d S )NÚitem_spirit_stone_packu   Há»—n NguyÃªn Tháº¡ch x50é   r0   r   ÚDEPOSIT_ONLY_TABr   )r   r   r5   r   r$   r6   r:   rF   rG   rH   r;   rI   s        r*   Ú>test_member_can_deposit_but_not_withdraw_from_deposit_only_tabzPTestGuildStash2PC.test_member_can_deposit_but_not_withdraw_from_deposit_only_tabI   s(  € ÝÐ#;ÐGbÐnoÐpÑpÔpˆð ”|×0Ò0°´ÀÔ@UÐWhÐjnÑoÔo‰ˆ�Ø�Š˜ Ñ%Ô%Ð%ð #'¤,×"<Ò"<¸T¼]ÈDÔLaÐctð  wOñ  #Pô  #PÑˆ��iØ×Ò˜Ñ!Ô!Ð!Ø�ŠÐ(¨#Ñ.Ô.Ð.Ø×Ò˜)Ñ$Ô$Ð$ð #'¤,×"<Ò"<¸T¼]ÈDÔLaÐctð  wOñ  #Pô  #PÑˆ��iØ�Š˜Ñ Ô Ð Ø×Ò˜YÑ'Ô'Ð'Ð'Ð'r,   c                 ó>  — t          ddd¬¦  «        }| j                             | j        | j        d|¦  «         d}| j                             d|¦  «        }|                      |¦  «         | j                             | j        | j        dd¦  «        \  }}}|                      |¦  «         |  	                    d|¦  «         |  
                    |¦  «         | j                             d|¦  «         | j                             | j        | j        d	d¦  «        \  }}}|                      |¦  «         |                      |¦  «         | j                             | j        | j        dd¦  «        \  }}}|                      |¦  «         |  	                    d
|¦  «         d S )NÚitem_rare_dragon_saberu   Thanh Long Ä�ao PhÃ´irD   r0   r   Útx_lock_concurrent_001r   ÚITEM_LOCKEDr   ÚITEM_NOT_FOUND)r   r   r5   r   r"   Úacquire_lockr6   r:   rF   rG   rH   Úrelease_lockr;   )r)   r<   Útx_id_1Úacquiredr=   r>   rJ   s          r*   Ú4test_concurrent_withdrawal_prevents_item_duplicationzFTestGuildStash2PC.test_concurrent_withdrawal_prevents_item_duplication[   s²  € ÝÐ#;ÐG^ÐjkÐlÑlÔlˆØŒ×!Ò! $¤-°´ÐBSÐUYÑZÔZÐZð +ˆØ”<×,Ò,Ð-EÀwÑOÔOˆØ�Š˜Ñ!Ô!Ð!ð #'¤,×"<Ò"<¸T¼]ÈDÌOÐ]nð  qIñ  #Jô  #JÑˆ��iØ×Ò˜Ñ!Ô!Ð!Ø�Š�m SÑ)Ô)Ð)Ø×Ò˜)Ñ$Ô$Ð$ð 	Œ×!Ò!Ð":¸GÑDÔDÐDØ"&¤,×"<Ò"<¸T¼]ÈDÌOÐ]nð  qIñ  #Jô  #JÑˆ��iØ�Š˜Ñ Ô Ð Ø×Ò˜YÑ'Ô'Ð'ð #'¤,×"<Ò"<¸T¼]ÈDÌOÐ]nð  qIñ  #Jô  #JÑˆ��iØ×Ò˜Ñ!Ô!Ð!Ø�ŠÐ&¨Ñ,Ô,Ð,Ð,Ð,r,   c                 ó†  — t          ddd¬¦  «        }| j                             | j        | j        d|¦  «         | j                             | j        | j        dd¦  «         | j                             | j        ¦  «        }|                      t          |¦  «        d¦  «         t          d„ |D ¦   «         ¦  «        }|  
                    |j        d¦  «         |  
                    |j        d¦  «         t          d	„ |D ¦   «         ¦  «        }|  
                    |j        d¦  «         |  
                    |j        d¦  «         d S )
NÚitem_audit_check_01u   ThÃ¡i HÆ° KÃ­nh Máº£nhrD   r0   r   r   é   c              3   ó0   K  — | ]}|j         d k    ¯|V — ŒdS )ÚDEPOSITN©Úaction©Ú.0Úls     r*   ú	<genexpr>zFTestGuildStash2PC.test_immutable_audit_log_tracking.<locals>.<genexpr>~   s.   è è € ÐDÐD ¨a¬h¸)Ò.CÐ.C˜1Ð.CÐ.CÐ.CÐ.CÐDÐDr,   c              3   ó0   K  — | ]}|j         d k    ¯|V — ŒdS )ÚWITHDRAWNr`   rb   s     r*   re   zFTestGuildStash2PC.test_immutable_audit_log_tracking.<locals>.<genexpr>ƒ   s.   è è € ÐFÐF !¨q¬x¸:Ò/EÐ/E˜AÐ/EÐ/EÐ/EÐ/EÐFÐFr,   )r   r   r5   r   r"   r:   Úget_audit_logsÚassertGreaterEqualr9   Únextr8   r   r2   )r)   r<   ÚlogsÚdeposit_logÚwithdraw_logs        r*   Ú!test_immutable_audit_log_trackingz3TestGuildStash2PC.test_immutable_audit_log_trackingu   s:  € ÝÐ#8ÐD\ÐhiÐjÑjÔjˆØŒ×!Ò! $¤-°´ÐBSÐUYÑZÔZÐZØŒ×"Ò" 4¤=°$´/ÐCUÐWlÑmÔmÐmàŒ|×*Ò*¨4¬=Ñ9Ô9ˆØ×Ò¥ D¡	¤	¨1Ñ-Ô-Ð-õ ÐDÐD dÐDÑDÔDÑDÔDˆØ×Ò˜Ô.Ð0AÑBÔBÐBØ×Ò˜Ô.Ð0HÑIÔIÐIõ ÐFÐF tÐFÑFÔFÑFÔFˆØ×Ò˜Ô/Ð1CÑDÔDÐDØ×Ò˜Ô/Ð1IÑJÔJÐJÐJÐJr,   N)	Ú__name__Ú
__module__Ú__qualname__r+   rA   rK   rP   rZ   rn   © r,   r*   r	   r	      sy   € € € € € ðXð Xð Xð(]ð ]ð ]ð*(ð (ð (ð(ð (ð (ð$-ð -ð -ð4Kð Kð Kð Kð Kr,   r	   Ú__main__)Ú__doc__ÚunittestÚ server.trade.guild_stash_servicer   r   r   r   r   ÚTestCaser	   ro   Úmainrr   r,   r*   ú<module>ry      sÄ   ððð ð
 €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ðuKð uKð uKð uKð uK˜Ô)ñ uKô uKð uKðp ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr,   