§
    &¿jÉ-  ã                  óð   — d Z ddlmZ ddlZddl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 ddlmZmZ  G d	„ d
¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )z‹
Comprehensive Unit Tests for FreeExile Social Engine:
Friend Types, Social Repository (SQLite), Social Service, and Guild Roster Service.
é    )ÚannotationsN)Ú	FriendDTOÚFriendshipStatusÚGuildMemberPresenceDTOÚPresenceStatusÚSocialActionResponse©ÚSocialRepository)ÚSocialService)ÚGuildRosterService)ÚGuildMemberÚ	GuildRolec                  ó"   — e Zd ZdZdd„Zdd
„ZdS )ÚFakeChannelManagerz:Mock for ChannelManager to test blacklist synchronization.ÚreturnÚNonec                ó"   — g | _         i | _        d S ©N)Úblacklist_callsÚ_player_blacklists©Úselfs    ú7C:\Projects\FreeExile\tests\unit\test_social_service.pyÚ__init__zFakeChannelManager.__init__   s   € Ø<>ˆÔØCEˆÔÐÐó    Ú	player_idÚintÚblocked_player_idÚ
is_blockedÚboolc                ó  — | j                              |||f¦  «         || j        vrt          ¦   «         | j        |<   |r"| j        |                              |¦  «         d S | j        |                              |¦  «         d S r   )r   Úappendr   ÚsetÚaddÚdiscard)r   r   r   r   s       r   Úset_blacklist_entryz&FakeChannelManager.set_blacklist_entry   s�   € ØÔ×#Ò# YÐ0AÀ:Ð$NÑOÔOÐOØ˜DÔ3Ð3Ð3Ý14±´ˆDÔ# IÑ.Øð 	JØÔ# IÔ.×2Ò2Ð3DÑEÔEÐEÐEÐEàÔ# IÔ.×6Ò6Ð7HÑIÔIÐIÐIÐIr   N©r   r   )r   r   r   r   r   r    r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   © r   r   r   r      sL   € € € € € ØDÐDðFð Fð Fð FðJð Jð Jð Jð Jð Jr   r   c                  ó2   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„ZdS )
ÚTestSocialTypesz-Tests for Social DTOs, Enums, and properties.r   r   c                óì   — t           j        j        dk    sJ ‚t           j        j        dk    sJ ‚t           j        j        dk    sJ ‚t
          j        j        dk    sJ ‚t
          j        j        dk    sJ ‚d S )NÚNONEÚACCEPTEDÚBLOCKEDÚONLINEÚOFFLINE)r   r0   Úvaluer1   r2   r   r3   r4   r   s    r   Ú"test_friendship_and_presence_enumsz2TestSocialTypes.test_friendship_and_presence_enums)   s{   € ÝÔ$Ô*¨fÒ4Ð4Ð4Ð4ÝÔ(Ô.°*Ò<Ð<Ð<Ð<ÝÔ'Ô-°Ò:Ð:Ð:Ð:ÝÔ$Ô*¨hÒ6Ð6Ð6Ð6ÝÔ%Ô+¨yÒ8Ð8Ð8Ð8Ð8Ð8r   c           
     ó.  — t          ddddt          j        ddd¬¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        d	u sJ ‚|j	        dk    sJ ‚|j
        dk    sJ ‚|j        dk    sJ ‚d S )
NÚp1ÚBladeMasteré2   ÚSwordMasterÚzone_tang_kiem_nhaiõ   TÃ ng Kiáº¿m NhaizReliable tank)r   Úcharacter_nameÚlevelÚcharacter_class_or_onlineÚpresence_status_or_zone_idÚzone_id_or_zone_nameÚcurrent_map_name_or_noteÚfriend_noteT)r   r   r3   r   r>   Únamer?   Úcharacter_classÚ	is_onlineÚzone_idÚ	zone_nameÚnote)r   Údtos     r   Ú%test_friend_dto_fields_and_propertiesz5TestSocialTypes.test_friend_dto_fields_and_properties0   sä   € ÝØØ(ØØ&3Ý'5Ô'<Ø!6Ø%8Ø'ð	
ñ 	
ô 	
ˆð Œ} Ò$Ð$Ð$Ð$ØÔ! ]Ò2Ð2Ð2Ð2ØŒx˜=Ò(Ð(Ð(Ð(ØŒy˜BŠˆˆˆØÔ" mÒ3Ð3Ð3Ð3ØŒ} Ð$Ð$Ð$Ð$ØŒ{Ð3Ò3Ð3Ð3Ð3ØŒ}Ð 3Ò3Ð3Ð3Ð3ØŒx˜?Ò*Ð*Ð*Ð*Ð*Ð*r   c           	     ób  — t          ddddt          j        dd¬¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        du sJ ‚|j        du sJ ‚t          dd	d
ddd¦  «        }|j        dk    sJ ‚|j        d	k    sJ ‚|j        d
k    sJ ‚|j        dk    sJ ‚|j        du sJ ‚|j        du sJ ‚d S )NÚg1ÚLeaderõ   Ä�áº§u LÄ©nhéP   r<   T)r   r>   Úroler?   Úpresence_statusrH   Úis_teleport_targetableÚg2ÚElderéF   õ   TrÆ°á»Ÿng LÃ£o)	r   r   r3   rE   ÚrankrG   rT   r   r?   )r   rN   rU   s      r   Ú.test_guild_member_presence_dto_dual_signaturesz>TestSocialTypes.test_guild_member_presence_dto_dual_signaturesE   s  € å#ØØ#ØØÝ*Ô1Ø)Ø#'ð
ñ 
ô 
ˆð Œw˜(Ò"Ð"Ð"Ð"ØŒw˜.Ò(Ð(Ð(Ð(ØŒ|˜tÐ#Ð#Ð#Ð#ØÔ(¨DÐ0Ð0Ð0Ð0õ $ D¨'°2Ð7GÈÐOdÑeÔeˆØŒ|˜tÒ#Ð#Ð#Ð#ØŒw˜'Ò!Ð!Ð!Ð!ØŒx˜2Š~ˆ~ˆ~ˆ~ØŒwÐ*Ò*Ð*Ð*Ð*ØŒ|˜tÐ#Ð#Ð#Ð#ØÔ(¨DÐ0Ð0Ð0Ð0Ð0Ð0r   c                ót   — t          ddd¬¦  «        }|j        du sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d S )NTÚSuccessÚOK)ÚsuccessÚmessageÚaction_code)r   r^   r_   r`   )r   Úresps     r   Útest_social_action_responsez+TestSocialTypes.test_social_action_response^   sW   € Ý#¨D¸)ÐQUÐVÑVÔVˆØŒ|˜tÐ#Ð#Ð#Ð#ØŒ|˜yÒ(Ð(Ð(Ð(ØÔ 4Ò'Ð'Ð'Ð'Ð'Ð'r   Nr'   )r(   r)   r*   r+   r6   rL   rZ   rb   r,   r   r   r.   r.   &   sj   € € € € € Ø7Ð7ð9ð 9ð 9ð 9ð+ð +ð +ð +ð*1ð 1ð 1ð 1ð2(ð (ð (ð (ð (ð (r   r.   c                  óL   — e Zd ZdZej        dd„¦   «         Zdd„Zdd„Zdd	„Z	d
S )ÚTestSocialRepositoryz7Tests for SQLite persistence layer in SocialRepository.r   r
   c                ó"   — t          d¬¦  «        S )Nú:memory:©Údb_pathr	   r   s    r   ÚrepozTestSocialRepository.repoh   s   € å¨
Ð3Ñ3Ô3Ð3r   ri   r   c                ó’  — |                      dd¦  «        du sJ ‚|                      dd¦  «        du sJ ‚|                      dd¦  «        du sJ ‚|                     d¦  «        dgk    sJ ‚|                     d¦  «        dgk    sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     ddd¦  «        du sJ ‚|                     dd¦  «        dk    sJ ‚|                     ddd¦  «        du sJ ‚|                     d¦  «        }t          |¦  «        dk    sJ ‚|d	         d
         dk    sJ ‚|d	         d         dk    sJ ‚| 	                    dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚d S )NÚaliceÚbobTFzBest DPSÚstrangerÚInvalidé   r   Ú	friend_idrD   )
Úadd_friend_requestÚget_pending_requestsÚget_sent_requestsÚaccept_friend_requestÚ	is_friendÚset_friend_noteÚget_friend_noteÚget_friendsÚlenÚremove_friend)r   ri   Úfriendss      r   Útest_friend_request_lifecyclez2TestSocialRepository.test_friend_request_lifecyclel   s8  € Ø×&Ò& w°Ñ6Ô6¸$Ð>Ð>Ð>Ð>Ø×&Ò& w°Ñ6Ô6¸%Ð?Ð?Ð?Ð?Ø×&Ò& w°Ñ8Ô8¸EÐAÐAÐAÐAà×(Ò(¨Ñ/Ô/°G°9Ò<Ð<Ð<Ð<Ø×%Ò% gÑ.Ô.°5°'Ò9Ð9Ð9Ð9ð ×)Ò)¨%°Ñ9Ô9¸TÐAÐAÐAÐAØ�~Š~˜g uÑ-Ô-°Ð5Ð5Ð5Ð5Ø�~Š~˜e WÑ-Ô-°Ð5Ð5Ð5Ð5ð ×#Ò# G¨U°JÑ?Ô?À4ÐGÐGÐGÐGØ×#Ò# G¨UÑ3Ô3°zÒAÐAÐAÐAØ×#Ò# G¨Z¸ÑCÔCÀuÐLÐLÐLÐLð ×"Ò" 7Ñ+Ô+ˆÝ�7‰|Œ|˜qÒ Ð Ð Ð Ø�qŒz˜+Ô&¨%Ò/Ð/Ð/Ð/Ø�qŒz˜-Ô(¨JÒ6Ð6Ð6Ð6ð ×!Ò! '¨5Ñ1Ô1°TÐ9Ð9Ð9Ð9Ø�~Š~˜g uÑ-Ô-°Ð6Ð6Ð6Ð6Ø�~Š~˜e WÑ-Ô-°Ð6Ð6Ð6Ð6Ð6Ð6r   c                óÐ   — |                      dd¦  «         |                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     d¦  «        g k    sJ ‚d S )NÚu1Úu2TF)rq   Údecline_friend_requestru   rr   ©r   ri   s     r   Útest_decline_requestz)TestSocialRepository.test_decline_request‰   s}   € Ø×Ò  dÑ+Ô+Ð+Ø×*Ò*¨4°Ñ6Ô6¸$Ð>Ð>Ð>Ð>Ø�~Š~˜d DÑ)Ô)¨UÐ2Ð2Ð2Ð2Ø×(Ò(¨Ñ.Ô.°"Ò4Ð4Ð4Ð4Ð4Ð4r   c                ó  — |                      dd¦  «         |                     dd¦  «         |                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     d¦  «        dgk    sJ ‚|                     d¦  «        g k    sJ ‚|                      dd¦  «        du sJ ‚|                      dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚d S )NÚaÚbTF)rq   rt   ru   Úblock_playerr   Úget_blocked_listÚunblock_playerr�   s     r   Útest_block_and_mutual_blockz0TestSocialRepository.test_block_and_mutual_block�   sÙ  € Ø×Ò  SÑ)Ô)Ð)Ø×"Ò" 3¨Ñ,Ô,Ð,Ø�~Š~˜c 3Ñ'Ô'¨4Ð/Ð/Ð/Ð/ð × Ò   cÑ*Ô*¨dÐ2Ð2Ð2Ð2Ø�Š˜s CÑ(Ô(¨DÐ0Ð0Ð0Ð0Ø�Š˜s CÑ(Ô(¨DÐ0Ð0Ð0Ð0Ø�~Š~˜c 3Ñ'Ô'¨5Ð0Ð0Ð0Ð0Ø�~Š~˜c 3Ñ'Ô'¨5Ð0Ð0Ð0Ð0ð ×$Ò$ SÑ)Ô)¨c¨UÒ2Ð2Ð2Ð2Ø×$Ò$ SÑ)Ô)¨RÒ/Ð/Ð/Ð/ð ×&Ò& s¨CÑ0Ô0°EÐ9Ð9Ð9Ð9Ø×&Ò& s¨CÑ0Ô0°EÐ9Ð9Ð9Ð9ð ×"Ò" 3¨Ñ,Ô,°Ð4Ð4Ð4Ð4Ø�Š˜s CÑ(Ô(¨EÐ1Ð1Ð1Ð1Ø�Š˜s CÑ(Ô(¨EÐ1Ð1Ð1Ð1Ð1Ð1r   N)r   r
   )ri   r
   r   r   )
r(   r)   r*   r+   ÚpytestÚfixtureri   r|   r‚   r‰   r,   r   r   rd   rd   e   sv   € € € € € ØAÐAà„^ð4ð 4ð 4ñ „^ð4ð7ð 7ð 7ð 7ð:5ð 5ð 5ð 5ð2ð 2ð 2ð 2ð 2ð 2r   rd   c                  óT   — e Zd ZdZej        dd„¦   «         Zdd„Zdd„Zdd	„Z	dd
„Z
dS )ÚTestSocialServicezJTests for SocialService business logic and ChannelManager synchronization.r   ú(tuple[SocialService, FakeChannelManager]c                óh   — t          d¬¦  «        }t          ¦   «         }t          ||¬¦  «        }||fS )Nrf   rg   )Ú
repositoryÚchannel_manager)r
   r   r   )r   ri   Úchat_mgrÚsvcs       r   Úservice_envzTestSocialService.service_env¬   s9   € å¨
Ð3Ñ3Ô3ˆÝ%Ñ'Ô'ˆÝ t¸XÐFÑFÔFˆØ�Hˆ}Ðr   r”   r   c                ó  — |\  }}|                      dd¦  «        du sJ ‚d|j        d         v sJ ‚|                     dd¦  «        du sJ ‚d|j                             dt	          ¦   «         ¦  «        vsJ ‚|                     dd¦  «        du sJ ‚|                     ddd¦  «        du sJ ‚|                     dddddd¦  «         |                     d¦  «        }t          |¦  «        d	k    sJ ‚|d
         j
        dk    sJ ‚|d
         j        dk    sJ ‚|d
         j        dk    sJ ‚|d
         j        du sJ ‚|d
         j        dk    sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚d S )Nr8   Úp2TzDungeon RunnerÚ	PlayerTwoé<   Ú	zone_wildÚ
Wildernessro   r   F)Úsend_friend_requestÚfriend_requestsrt   Úgetr#   ru   rv   Úupdate_presenceÚget_friend_presencery   r   rE   r?   rG   rJ   rz   ©r   r”   r“   Ú_Úpresences        r   Útest_service_friend_lifecyclez/TestSocialService.test_service_friend_lifecycle³   sØ  € Ø‰ˆˆQØ×&Ò& t¨TÑ2Ô2°dÐ:Ð:Ð:Ð:Ø�sÔ*¨4Ô0Ð0Ð0Ð0Ð0Ø×(Ò(¨¨tÑ4Ô4¸Ð<Ð<Ð<Ð<Ø˜3Ô.×2Ò2°4½¹¼Ñ?Ô?Ð?Ð?Ð?Ð?Ø�}Š}˜T 4Ñ(Ô(¨DÐ0Ð0Ð0Ð0à×"Ò" 4¨Ð/?Ñ@Ô@ÀDÐHÐHÐHÐHØ×Ò˜D +¨r°4¸ÀlÑSÔSÐSà×*Ò*¨4Ñ0Ô0ˆÝ�8‰}Œ} Ò!Ð!Ð!Ð!Ø˜Œ{Ô$¨Ò,Ð,Ð,Ð,Ø˜Œ{Ô ;Ò.Ð.Ð.Ð.Ø˜Œ{Ô  BÒ&Ð&Ð&Ð&Ø˜Œ{Ô$¨Ð,Ð,Ð,Ð,Ø˜Œ{ÔÐ#3Ò3Ð3Ð3Ð3à× Ò   tÑ,Ô,°Ð4Ð4Ð4Ð4Ø�}Š}˜T 4Ñ(Ô(¨EÐ1Ð1Ð1Ð1Ð1Ð1r   c                ó0  — |\  }}|                      dd¦  «         d|j        v sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «        du sJ ‚|                     dd¦  «         d|j        v sJ ‚|                     dd¦  «        du sJ ‚d S )NÚ101Ú202)ée   éÊ   TT)r§   r¨   FF)r†   r   r   rˆ   )r   r”   r“   r’   s       r   Ú%test_block_syncs_with_channel_managerz7TestSocialService.test_block_syncs_with_channel_managerÉ   sÂ   € Ø#‰ˆˆXØ×Ò˜ Ñ&Ô&Ð&Ø 8Ô#;Ð;Ð;Ð;Ð;Ø�~Š~˜e UÑ+Ô+¨tÐ3Ð3Ð3Ð3Ø�~Š~˜e UÑ+Ô+¨tÐ3Ð3Ð3Ð3à×Ò˜5 %Ñ(Ô(Ð(Ø  HÔ$<Ð<Ð<Ð<Ð<Ø�~Š~˜e UÑ+Ô+¨uÐ4Ð4Ð4Ð4Ð4Ð4r   c                ó¸  — |\  }}|                      dd¦  «         |                     dd¦  «         |                     dddddd¦  «         t          |                     d¦  «        ¦  «        dk    sJ ‚|                     dd¦  «         t          |                     d¦  «        ¦  «        d	k    sJ ‚t          |                     d¦  «        ¦  «        d	k    sJ ‚d S )
Nrk   rl   ÚBobé-   Tr<   r=   ro   r   )r›   rt   rž   ry   rŸ   r†   )r   r”   r“   r¡   s       r   Útest_blocked_presence_is_hiddenz1TestSocialService.test_blocked_presence_is_hiddenÔ   sè   € Ø‰ˆˆQØ×Ò ¨Ñ/Ô/Ð/Ø×!Ò! %¨Ñ1Ô1Ð1Ø×Ò˜E 5¨"¨dÐ4IÐK^Ñ_Ô_Ð_å�3×*Ò*¨7Ñ3Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9Ø×Ò˜ %Ñ(Ô(Ð(Ý�3×*Ò*¨7Ñ3Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9Ý�3×*Ò*¨5Ñ1Ô1Ñ2Ô2°aÒ7Ð7Ð7Ð7Ð7Ð7r   c                óŠ  — |\  }}|                      dd¦  «         |                     dd¦  «         |                     dddt          j        dd¦  «         |                     d¦  «        }t          |¦  «        dk    sJ ‚|d         j        dk    sJ ‚|d         j        t          j        k    sJ ‚|d         j	        dk    sJ ‚d S )	Nrk   rl   éK   Úzone_sanctuaryÚBobTheSlayerÚ	Berserkerro   r   )
r›   rt   Úupdate_player_presencer   Ú	IN_COMBATrŸ   ry   rF   rS   r?   r    s        r   Ú%test_canonical_update_player_presencez7TestSocialService.test_canonical_update_player_presenceß   sÖ   € Ø‰ˆˆQØ×Ò ¨Ñ/Ô/Ð/Ø×!Ò! %¨Ñ1Ô1Ð1à×"Ò" 5¨"Ð.>ÅÔ@XÐZhÐjuÑvÔvÐvØ×*Ò*¨7Ñ3Ô3ˆÝ�8‰}Œ} Ò!Ð!Ð!Ð!Ø˜Œ{Ô*¨kÒ9Ð9Ð9Ð9Ø˜Œ{Ô*­nÔ.FÒFÐFÐFÐFØ˜Œ{Ô  BÒ&Ð&Ð&Ð&Ð&Ð&r   N)r   rŽ   )r”   rŽ   r   r   )r(   r)   r*   r+   rŠ   r‹   r”   r£   r©   r­   rµ   r,   r   r   r�   r�   ©   sŠ   € € € € € ØTÐTà„^ðð ð ñ „^ðð2ð 2ð 2ð 2ð,	5ð 	5ð 	5ð 	5ð	8ð 	8ð 	8ð 	8ð
'ð 
'ð 
'ð 
'ð 
'ð 
'r   r�   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚTestGuildRosterServicezITests for GuildRosterService presence joining and teleport targetability.r   r   c                ó  — t          t          d¬¦  «        ¬¦  «        }|                     dddddd	¦  «         |                     d
ddddd¦  «         |                     dddddd¦  «         t          |¬¦  «        }|                     dt          ddt          j        ¦  «        ¦  «         |                     dt          d
dt          j        ¦  «        ¦  «         |                     dt          ddt          j	        ¦  «        ¦  «         | 
                    d¦  «        }t          |¦  «        dk    sJ ‚t          d„ |D ¦   «         ¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        du sJ ‚|j        du sJ ‚t          d„ |D ¦   «         ¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        du sJ ‚|j        du sJ ‚t          d„ |D ¦   «         ¦  «        }|j        dk    sJ ‚|j        du sJ ‚|j        du sJ ‚d S )Nrf   rg   )r�   Úm1Ú
MasterHeroéU   Tr<   rš   Úm2ÚSecretAgentrW   Úzone_secret_chamberu   Máº­t Tháº¥tÚm3Ú
OfflineGuyr˜   FÚofflineÚOffline)Úsocial_serviceÚguild_shadowé   c              3  ó0   K  — | ]}|j         d k    ¯|V — ŒdS )r¹   N©r   ©Ú.0Úms     r   ú	<genexpr>zUTestGuildRosterService.test_roster_with_presence_and_targetability.<locals>.<genexpr>þ   ó.   è è € Ð@Ð@˜A¨A¬K¸4Ò,?Ð,?�aÐ,?Ð,?Ð,?Ð,?Ð@Ð@r   rP   c              3  ó0   K  — | ]}|j         d k    ¯|V — ŒdS )r¼   NrÇ   rÈ   s     r   rË   zUTestGuildRosterService.test_roster_with_presence_and_targetability.<locals>.<genexpr>  rÌ   r   rX   c              3  ó0   K  — | ]}|j         d k    ¯|V — ŒdS )r¿   NrÇ   rÈ   s     r   rË   zUTestGuildRosterService.test_roster_with_presence_and_targetability.<locals>.<genexpr>
  rÌ   r   u   Huynh Ä�á»‡)r   r
   rž   r   Úregister_guild_memberr   r   ÚGUILD_MASTERÚOFFICERÚMEMBERÚget_guild_roster_with_presencery   ÚnextrR   r?   rG   rT   )r   Ú
social_svcÚ
roster_svcÚmembersÚm1_dtoÚm2_dtoÚm3_dtos          r   Ú+test_roster_with_presence_and_targetabilityzBTestGuildRosterService.test_roster_with_presence_and_targetabilityï   sZ  € Ý"Õ.>ÀzÐ.RÑ.RÔ.RÐSÑSÔSˆ
Ø×"Ò" 4¨°r¸4ÐAVÐXdÑeÔeÐeØ×"Ò" 4¨¸¸DÐBWÐYgÑhÔhÐhØ×"Ò" 4¨°r¸5À)ÈYÑWÔWÐWå'°zÐBÑBÔBˆ
à×(Ò(¨½ÀTÈ<ÕYbÔYoÑ9pÔ9pÑqÔqÐqØ×(Ò(¨½ÀTÈ=ÕZcÔZkÑ9lÔ9lÑmÔmÐmØ×(Ò(¨½ÀTÈ<ÕYbÔYiÑ9jÔ9jÑkÔkÐkà×;Ò;¸NÑKÔKˆÝ�7‰|Œ|˜qÒ Ð Ð Ð åÐ@Ð@ Ð@Ñ@Ô@Ñ@Ô@ˆØŒ{˜nÒ,Ð,Ð,Ð,ØŒ|˜rÒ!Ð!Ð!Ð!ØÔ 4Ð'Ð'Ð'Ð'ØÔ,°Ð4Ð4Ð4Ð4åÐ@Ð@ Ð@Ñ@Ô@Ñ@Ô@ˆØŒ{Ð.Ò.Ð.Ð.Ð.ØŒ|˜rÒ!Ð!Ð!Ð!ØÔ 4Ð'Ð'Ð'Ð'ØÔ,°Ð5Ð5Ð5Ð5åÐ@Ð@ Ð@Ñ@Ô@Ñ@Ô@ˆØŒ{˜mÒ+Ð+Ð+Ð+ØÔ 5Ð(Ð(Ð(Ð(ØÔ,°Ð5Ð5Ð5Ð5Ð5Ð5r   c                óX   — t          ¦   «         }|                     d¦  «        g k    sJ ‚d S )NÚnonexistent)r   rÓ   )r   rÖ   s     r   Útest_empty_guild_rosterz.TestGuildRosterService.test_empty_guild_roster  s2   € Ý'Ñ)Ô)ˆ
Ø×8Ò8¸ÑGÔGÈ2ÒMÐMÐMÐMÐMÐMr   Nr'   )r(   r)   r*   r+   rÛ   rÞ   r,   r   r   r·   r·   ì   sI   € € € € € ØSÐSð6ð 6ð 6ð 6ð@Nð Nð Nð Nð Nð Nr   r·   )r+   Ú
__future__r   rŠ   Úserver.social.social_typesr   r   r   r   r   Úserver.social.social_repositoryr
   Úserver.social.social_servicer   Ú"server.social.guild_roster_servicer   Ú server.trade.guild_stash_servicer   r   r   r.   rd   r�   r·   r,   r   r   ú<module>rå      s¹  ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø AÐ AÐ AÐ AÐ AÐ AØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CðJð Jð Jð Jð Jñ Jô Jð Jð"<(ð <(ð <(ð <(ð <(ñ <(ô <(ð <(ð~A2ð A2ð A2ð A2ð A2ñ A2ô A2ð A2ðH@'ð @'ð @'ð @'ð @'ñ @'ô @'ð @'ðF%Nð %Nð %Nð %Nð %Nñ %Nô %Nð %Nð %Nð %Nr   