§
    ¸i»jÆ  ã            
       ó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 ddlmZmZ ddlmZ ddlmZmZ ej        d„ ¦   «         Zd	„ Zd
„ ZdS )u  
Unit tests for End-of-Season Migration Pipeline (LuÃ¢n Há»“i Chuyá»ƒn Sinh).
Verifies that when a big update / season ends:
1. Expiring league transitions through FREEZING -> MIGRATING -> ARCHIVED.
2. All active listings on Universal Consignment Vault are canceled and returned.
3. All seasonal stashes are transferred to Standard as 'Remove-Only' tabs.
4. All characters are reassigned to Standard realm.
5. Hall of Fame leaderboard snapshot is preserved.
6. The new season starts completely fresh (clean slate: level 1, 0 items).
é    Nz../../server)Ú
LeagueTypeÚLeagueStatusÚSeasonLeagueManagerÚSeasonStashItem)ÚSeasonMigrationPipelineÚMigrationReport)ÚUniversalConsignmentVault)ÚGearItemÚ
ItemRarityc                  ó   — t          ¦   «         } t          ¦   «         }t          | |¬¦  «        }|                      ddt          j        t          j        d¬¦  «        }|                      dddd¬	¦  «        }d
|_	        |  
                    dd¦  «        }|d         }t          ddddd¬¦  «        }|                     |¦  «         t          dddt          j        ¬¦  «        }|                     d|dd¬¦  «        }	| ||||	fS )N)Úleague_managerÚvaultÚseason_01_minh_nguyetu#   MÃ¹a 1: Minh Nguyá»‡t Tráº£m ThiÃªnzv1.0.0)Ú	league_idÚdisplay_nameÚleague_typeÚstatusÚversion_requirementÚacc_player1ÚKiemTonMua1Ú
ThienVuong©Ú
account_idÚcharacter_nameÚmartial_classr   éU   r   Úitem_ancient_bladeõ   Cá»• Kiáº¿m Tráº£m YÃªué   éP   ÚCUC_PHAM)Ú	item_uuidÚ	item_nameÚstack_countÚ
item_levelÚrarityÚgear_vault_ringu   Há»—n NguyÃªn Giá»›i Chá»‰éK   )r"   r#   r%   r&   Ú	ThienMenhé
   )Ú	seller_idÚitemÚprice_currencyÚprice_amount)r   r	   r   Úcreate_leaguer   Ú	CHALLENGEr   ÚACTIVEÚcreate_characterÚlevelÚget_account_stashesr   Údeposit_itemr
   r   Ú	LINH_PHAMÚlist_item_for_sale)
r   r   ÚpipelineÚs1Úchar_player1Ú
s1_stashesÚs1_tabÚs1_itemÚlisted_gearÚ
listing_ids
             úBC:\Projects\FreeExile\tests\unit\test_season_migration_pipeline.pyÚsetup_season_environmentrA       sG  € å(Ñ*Ô*€NÝ%Ñ'Ô'€EÝ&°nÈEÐRÑRÔR€Hð 
×	%Ò	%Ø)Ø:ÝÔ(ÝÔ"Ø$ð 
&ñ 
ô 
€Bð "×2Ò2Ø Ø$Ø"Ø)ð	 3ñ ô €Lð €LÔð  ×3Ò3°MÐCZÑ[Ô[€JØ˜Œ]€FÝØ&Ø+ØØØðñ ô €Gð ×Ò˜Ñ Ô Ð õ Ø#Ø.ØÝÔ#ð	ñ ô €Kð ×)Ò)ØØØ"Øð	 *ñ ô €Jð ˜5 (¨L¸*ÐDÐDó    c                 ó  — | \  }}}}}|                      dddd¬¦  «        }|j        du sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|                     d¦  «        }|j        t          j        k    sJ ‚|                     d¦  «        }|€J ‚|j        t          j	        k    sJ ‚| 
                    |j        ¦  «        }	|	j        dk    sJ ‚|	j        d	k    sJ ‚|j                             |¦  «        }
|
€J ‚|
j        du s'|d
„ |j                             ¦   «         D ¦   «         vsJ ‚|                     dd¦  «        }d„ |D ¦   «         }t'          |¦  «        dk    sJ ‚|d         }d|j        v sJ ‚|j        du sJ ‚|                     d¦  «        }|j        dk    sJ ‚t1          j        t4          d¬¦  «        5  |                     t9          dd¬¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   Úseason_02_hon_donõ   MÃ¹a 2: Há»—n Ä�á»™n SÆ¡ Khaiúv1.1.0©Úexpiring_league_idÚnext_season_idÚnext_season_nameÚnext_season_versionTr   Ústandardr   c                 ó*   — g | ]}|j         °	|j        ‘ŒS © )Úis_soldr?   )Ú.0Úls     r@   ú
<listcomp>z:test_end_of_season_migration_execution.<locals>.<listcomp>v   s#   € Ð8xÐ8xÐ8xÈ!ÐnoÔnwÐ8x¸¼Ð8xÐ8xÐ8xrB   r   c                 ó    — g | ]}|j         ¯	|‘ŒS rN   )Úis_remove_only)rP   Úts     r@   rR   z:test_end_of_season_migration_execution.<locals>.<listcomp>z   s    € ÐCÐCÐC˜a°!Ô2BÐC˜ÐCÐCÐCrB   r   r   r   z)Cannot deposit into Remove-Only stash tab)ÚmatchÚjunku   RÃ¡c)r"   r#   )Úexecute_season_migrationÚsuccessÚcharacters_migratedÚvault_listings_canceledÚremove_only_tabs_createdÚ
get_leaguer   r   ÚARCHIVEDr1   Úget_characterÚcharacter_idr   r3   ÚlistingsÚgetrO   Úvaluesr4   ÚlenÚitemsrT   Úwithdraw_itemr#   ÚpytestÚraisesÚ
ValueErrorr5   r   )rA   r   r   r8   r:   r?   ÚreportÚ
old_leagueÚ
new_leagueÚupdated_charÚlistingÚstd_stashesÚremove_only_tabsÚmigrated_tabÚ	withdrawns                  r@   Ú&test_end_of_season_migration_executionrs   U   sà  € Ø@XÑ=€N�E˜8 \°:ð '×?Ò?Ø2Ø*Ø8Ø$ð	 @ñ ô €Fð Œ>˜TÐ!Ð!Ð!Ð!ØÔ%¨Ò*Ð*Ð*Ð*ØÔ)¨QÒ.Ð.Ð.Ð.ØÔ*¨aÒ/Ð/Ð/Ð/ð  ×*Ò*Ð+BÑCÔC€JØÔ¥Ô 5Ò5Ð5Ð5Ð5à×*Ò*Ð+>Ñ?Ô?€JØÐ!Ð!Ð!ØÔ¥Ô 3Ò3Ð3Ð3Ð3ð "×/Ò/°Ô0IÑJÔJ€LØÔ! ZÒ/Ð/Ð/Ð/ØÔ Ò#Ð#Ð#Ð#ð Œn× Ò  Ñ,Ô,€GØÐÐÐØŒ?˜dÐ"Ð" jÐ8xÐ8xÈuÌ~×OdÒOdÑOfÔOfÐ8xÑ8xÔ8xÐ&xÐ&xÐ&xÐxð !×4Ò4°]ÀJÑOÔO€KØCÐC ;ÐCÑCÔCÐÝÐÑ Ô  AÒ%Ð%Ð%Ð%à# AÔ&€LØ <Ô#5Ð5Ð5Ð5Ð5ØÔ&¨$Ð.Ð.Ð.Ð.ð ×*Ò*Ð+?Ñ@Ô@€IØÔÐ";Ò;Ð;Ð;Ð;õ 
Œ•zÐ)TÐ	UÑ	UÔ	Uð Wð WØ×!Ò!¥/¸FÈfÐ"UÑ"UÔ"UÑVÔVÐVðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wð Wð Ws   Ç%G6Ç6G:Ç=G:c                 ó„  — | \  }}}}}|                      dddd¬¦  «         |                     dddd¬	¦  «        }|j        d
k    sJ ‚|j        dk    sJ ‚|                     dd¦  «        }t          |¦  «        d
k    sJ ‚|d         j        du sJ ‚|d                              ¦   «         du sJ ‚d|d         j        vsJ ‚d S )Nr   rD   rE   rF   rG   r   ÚKiemTonMua2r   r   r   r   FTr   )	rX   r2   r3   r   r4   rd   rT   Úis_emptyre   )rA   r   r   r8   r:   r?   Ús2_charÚ
s2_stashess           r@   Ú%test_new_season_clean_slate_isolationry   Š   s  € Ø@XÑ=€N�E˜8 \°:ð ×%Ò%Ø2Ø*Ø8Ø$ð	 &ñ ô ð ð ×-Ò-Ø Ø$Ø"Ø%ð	 .ñ ô €Gð Œ=˜AÒÐÐÐØÔÐ 3Ò3Ð3Ð3Ð3ð  ×3Ò3°MÐCVÑWÔW€JÝˆz‰?Œ?˜aÒÐÐÐØ�aŒ=Ô'¨5Ð0Ð0Ð0Ð0Ø�aŒ=×!Ò!Ñ#Ô# tÐ+Ð+Ð+Ð+Ø z°!¤}Ô':Ð:Ð:Ð:Ð:Ð:Ð:rB   )Ú__doc__rg   ÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.season_league_managerr   r   r   r   Úworld.season_migration_pipeliner   r   Útrade.consignment_vaultr	   Úworld.primal_stones_craftingr
   r   ÚfixturerA   rs   ry   rN   rB   r@   ú<module>rˆ      sK  ðð	ð 	ð €€€Ø 
€
€
€
Ø 	€	€	€	à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ð „ð1Eð 1Eñ „ð1Eðh2Wð 2Wð 2Wðj;ð ;ð ;ð ;ð ;rB   