§
    ‰®½j™"  ã                   óª   — d Z ddlZ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 ej        defd„¦   «         Zd	ed
ededdfd„Z G d„ d¦  «        ZdS )aÌ  
Unit Test Suite for FreeExile Map Dungeon, Boss Arena, and Quest Integration.
Validates:
1. Canonical registration of expanded Map & Boss Room Quests (Norm 06-08, Hidden 05, Epic 05).
2. Quest progress recording: room exploration, fog clearance, obstacle destruction, and boss gate breaching.
3. End-to-end procedural map generation, boss arena breach, and quest reward claiming.
4. Edge cases: partial completion, prerequisite gating, zero-trust validation.
é    N)Úcreate_default_quest_engineÚQuestStatusÚQuestEngine)ÚProceduralMapEngineÚverify_path_connectivity)ÚWarFogEngine)ÚTileTypeÚObstacleTypeÚreturnc                  ó   — t          ¦   «         S )N)r   © ó    úGC:\Projects\FreeExile\tests\unit\test_map_quest_and_boss_integration.pyÚquest_enginer      s   € å&Ñ(Ô(Ð(r   ÚengineÚ	player_idÚquest_idc           	      óä   — |                       |¦  «         |                      |¦  «        }|rCd„ |j        D ¦   «         }ddlm}  |||t
          j        |ddd¬¦  «        | j        |         |<   d S d S )Nc                 óN   — i | ]"}|j         |                     |j        ¦  «        “Œ#S r   )Úobjective_idÚwith_incrementÚtarget_count)Ú.0Úobjs     r   ú
<dictcomp>z'mark_prereq_claimed.<locals>.<dictcomp>!   s.   € ÐfÐfÐfÈc�3Ô# S×%7Ò%7¸Ô8HÑ%IÔ%IÐfÐfÐfr   r   )ÚPlayerQuestProgressg      ð?g       @g      @)r   r   ÚstatusÚ
objectivesÚ
started_atÚcompleted_atÚ
claimed_at)Úinitialize_playerÚget_quest_definitionr   Úserver.world.quest_typesr   r   ÚCLAIMEDÚ_player_quests)r   r   r   Úq_defÚobj_mapr   s         r   Úmark_prereq_claimedr)      s¦   € Ø
×Ò˜YÑ'Ô'Ð'Ø×'Ò'¨Ñ1Ô1€EØð 
ØfÐfÐUZÔUeÐfÑfÔfˆØ@Ð@Ð@Ð@Ð@Ð@Ø5HÐ5HØØÝÔ&ØØØØð6
ñ 6
ô 6
ˆÔ˜iÔ(¨Ñ2Ð2Ð2ð
ð 
r   c                   óJ   — e Zd Zdefd„Zdefd„Zdefd„Zdefd„Zdefd„ZdS )ÚTestMapQuestAndBossIntegrationr   c                 óº   — g d¢}|D ]S}|                      |¦  «        }|€J d|› d�¦   «         ‚t          |j        ¦  «        dk    sJ ‚|j        j        dk    sJ ‚ŒTdS )zTVerifies expanded map exploration and boss arena quests exist in canonical registry.)Úquest_norm_06_kham_pha_dia_daoÚ#quest_norm_07_pha_huy_phong_an_bossÚ$quest_norm_08_chinh_phuc_dai_bi_canhÚ$quest_hidden_05_mat_that_cuoi_ban_doÚquest_epic_05_chua_te_vuc_thamNzQuest z missing from registryé   r   )r#   Úlenr   ÚrewardÚexp)Úselfr   Úexpected_quest_idsÚq_idr'   s        r   Ú-test_canonical_map_and_boss_quests_registeredzLTestMapQuestAndBossIntegration.test_canonical_map_and_boss_quests_registered/   s—   € ð
ð 
ð 
Ðð 'ð 	(ð 	(ˆDØ ×5Ò5°dÑ;Ô;ˆEØÐ$Ð$Ð&K¨tÐ&KÐ&KÐ&KÑ$Ô$Ð$Ý�uÔ'Ñ(Ô(¨AÒ-Ð-Ð-Ð-Ø”<Ô# aÒ'Ð'Ð'Ð'Ð'ð		(ð 	(r   c                 ó²  — d}|                      |d¬¦  «         t          ||d¦  «         |                     |dd¬¦  «        sJ ‚|                     |d¦  «        }|€J ‚|j        t
          j        k    sJ ‚|                     |dd¬	¦  «         |j        t
          j        k    sJ ‚|                     |dd
¬	¦  «         |j        d         j	        du sJ ‚|j        t
          j        k    sJ ‚| 
                    |dd¬¦  «         |j        t
          j        k    sJ ‚|                     |d¦  «        \  }}}|du sJ ‚|€J ‚|j        dk    sJ ‚|j        dk    sJ ‚dS )zKTests progressing and completing Norm 06 (room exploration + fog clearing).Úexplorer_hero_01é   ©Úplayer_levelÚ"quest_norm_05_khai_mo_van_gioi_cacr-   NÚroom_procedural_dungeoné   ©Úcountr2   Úobj_norm_06_explore_roomsTÚfog_procedural_dungeoné(   ©Úpercentu   Káº» Soi SÃ¡ng Ä�á»‹a Ä�áº¡oé   )r"   r)   Úaccept_questÚget_player_questr   r   ÚIN_PROGRESSÚrecord_room_explorationr   Úis_completedÚrecord_fog_clearanceÚ	COMPLETEDÚclaim_quest_rewardÚtitleÚmeridian_points©r6   r   r   ÚqÚokÚrewÚ_s          r   Ú3test_room_exploration_and_fog_clearance_progressionzRTestMapQuestAndBossIntegration.test_room_exploration_and_fog_clearance_progression>   s¨  € à&ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBÝ˜L¨)Ð5YÑZÔZÐZð ×(Ò(¨Ð4TÐceÐ(ÑfÔfÐfÐfÐfØ×)Ò)¨)Ð5UÑVÔVˆØˆ}ˆ}ˆ}ØŒx�;Ô2Ò2Ð2Ð2Ð2ð 	×,Ò,¨YÐ8QÐYZÐ,Ñ[Ô[Ð[ØŒx�;Ô2Ò2Ð2Ð2Ð2Ø×,Ò,¨YÐ8QÐYZÐ,Ñ[Ô[Ð[ØŒ|Ð7Ô8ÔEÈÐMÐMÐMÐMØŒx�;Ô2Ò2Ð2Ð2Ð2ð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒx�;Ô0Ò0Ð0Ð0Ð0ð "×4Ò4°YÐ@`ÑaÔa‰
ˆˆC�Ø�TˆzˆzˆzˆzØˆˆˆØŒyÐ:Ò:Ð:Ð:Ð:ØÔ" aÒ'Ð'Ð'Ð'Ð'Ð'r   c                 ó  — d}|                      |d¬¦  «         t          ||d¦  «         |                     |dd¬¦  «        sJ ‚|                     |d¦  «        }|€J ‚|                     |dd¬	¦  «         |j        d
         j        du sJ ‚|                     |d¦  «         |j        d         j        du sJ ‚|j        t          j
        k    sJ ‚|                     |d¦  «        \  }}}|du sJ ‚|€J ‚|j        dk    sJ ‚dS )zJTests progressing Norm 07 by destroying obstacles and breaching boss gate.Úbreacher_hero_02é   r=   r-   r.   NÚobstacle_destructibleé   rB   Úobj_norm_07_destroy_obstaclesTÚgate_boss_sealÚobj_norm_07_breach_gateu   Káº» PhÃ¡ Cá»•ng BÃ­ Cáº£nh)r"   r)   rJ   rK   Úrecord_obstacle_destructionr   rN   Úrecord_boss_gate_breachr   r   rP   rQ   rR   rT   s          r   Ú.test_obstacle_destruction_and_boss_gate_breachzMTestMapQuestAndBossIntegration.test_obstacle_destruction_and_boss_gate_breach\   sG  € à&ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBÝ˜L¨)Ð5UÑVÔVÐVà×(Ò(¨Ð4YÐhjÐ(ÑkÔkÐkÐkÐkØ×)Ò)¨)Ð5ZÑ[Ô[ˆØˆ}ˆ}ˆ}ð 	×0Ò0°Ð<SÐ[\Ð0Ñ]Ô]Ð]ØŒ|Ð;Ô<ÔIÈTÐQÐQÐQÐQð 	×,Ò,¨YÐ8HÑIÔIÐIØŒ|Ð5Ô6ÔCÀtÐKÐKÐKÐKØŒx�;Ô0Ò0Ð0Ð0Ð0à!×4Ò4°YÐ@eÑfÔf‰
ˆˆC�Ø�TˆzˆzˆzˆzØˆˆˆØŒyÐ9Ò9Ð9Ð9Ð9Ð9Ð9r   c                 óÎ  — d}|                      |d¬¦  «         t          ||d¦  «         |                     |dd¬¦  «        sJ ‚|                     |d¦  «        }|€J ‚t	          dd¬¦  «        }|                     d	d
¬¦  «        }|j        dk    sJ ‚|j        €J ‚|j        €J ‚| 	                    |¦  «        }|du sJ ‚|j
        du sJ ‚|                     |d¦  «         |j        d         j        du sJ ‚|                     |dd¬¦  «         |j        t           j        k    sJ ‚|                     |d¦  «        \  }}}	|du sJ ‚|€J ‚|j        dk    sJ ‚|j        dk    sJ ‚dS )zaFull closed-loop: ProceduralMapEngine generates 64x64 map, player breaches gate, completes quest.Údungeon_master_03éF   r=   Ú'quest_epic_04_van_gioi_than_ma_tranh_bar1   Né@   )ÚwidthÚheightir ÚBLEACHED_BONE_CANYON)ÚseedÚbiome_idTÚgate_boss_seal_arenaÚobj_epic_05_breach_gateÚboss_black_dragon_demonr2   rB   u    Hoang Vá»±c Tá»‘i Cao ChÃºa Tá»ƒrF   )r"   r)   rJ   rK   r   Úgenerate_maprj   Ú	boss_gateÚ	boss_roomÚbreach_boss_gateÚboss_gate_breachedrc   r   rN   Úrecord_killr   r   rP   rQ   rR   rS   )
r6   r   r   rU   Ú
map_engineÚmap_dataÚ	breach_okrV   rW   rX   s
             r   Ú4test_end_to_end_procedural_map_and_quest_closed_loopzSTestMapQuestAndBossIntegration.test_end_to_end_procedural_map_and_quest_closed_loopt   sÚ  € à'ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBÝ˜L¨)Ð5^Ñ_Ô_Ð_ð ×(Ò(¨Ð4TÐceÐ(ÑfÔfÐfÐfÐfØ×)Ò)¨)Ð5UÑVÔVˆØˆ}ˆ}ˆ}õ )¨r¸"Ð=Ñ=Ô=ˆ
Ø×*Ò*°ÐAWÐ*ÑXÔXˆàŒ~ Ò#Ð#Ð#Ð#ØÔ!Ð-Ð-Ð-ØÔ!Ð-Ð-Ð-ð ×/Ò/°Ñ9Ô9ˆ	Ø˜DÐ Ð Ð Ð ØÔ*¨dÐ2Ð2Ð2Ð2ð 	×,Ò,¨YÐ8NÑOÔOÐOØŒ|Ð5Ô6ÔCÀtÐKÐKÐKÐKð 	× Ò  Ð,EÈQÐ ÑOÔOÐOØŒx�;Ô0Ò0Ð0Ð0Ð0ð "×4Ò4°YÐ@`ÑaÔa‰
ˆˆC�Ø�TˆzˆzˆzˆzØˆˆˆØŒyÐ>Ò>Ð>Ð>Ð>ØÔ" bÒ(Ð(Ð(Ð(Ð(Ð(r   c                 óú  — d}|                      |d¬¦  «         t          ||d¦  «         |                     |dd¬¦  «        sJ ‚|                     |d¦  «        }|€J ‚|                     |dd¬¦  «         |j        d	         j        dk    sJ ‚|                     |dd
¬¦  «         |j        d	         j        dk    sJ ‚|                     |dd¬¦  «         |j        d	         j        dk    sJ ‚|                     |dd¬¦  «         |j        d	         j        dk    sJ ‚|j        d	         j        du sJ ‚|                     |dd¬¦  «         |j        d	         j        dk    sJ ‚|j        d	         j        du sJ ‚dS )zTVerifies CLEAR_FOG_PERCENT behaves as a gauge (high-water mark), not an accumulator.Úgauge_tester_01r<   r=   r?   r-   NrE   rG   Úobj_norm_06_clear_fogé
   é#   FrF   T)r"   r)   rJ   rK   rO   r   Úcurrent_countrN   )r6   r   r   rU   s       r   Ú%test_clear_fog_percent_gauge_behaviorzDTestMapQuestAndBossIntegration.test_clear_fog_percent_gauge_behavior›   sÚ  € à%ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBÝ˜L¨)Ð5YÑZÔZÐZà×(Ò(¨Ð4TÐceÐ(ÑfÔfÐfÐfÐfØ×)Ò)¨)Ð5UÑVÔVˆØˆ}ˆ}ˆ}ð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒ|Ð3Ô4ÔBÀbÒHÐHÐHÐHð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒ|Ð3Ô4ÔBÀbÒHÐHÐHÐHð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒ|Ð3Ô4ÔBÀbÒHÐHÐHÐHð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒ|Ð3Ô4ÔBÀbÒHÐHÐHÐHØŒ|Ð3Ô4ÔAÀUÐJÐJÐJÐJð 	×)Ò)¨)Ð5MÐWYÐ)ÑZÔZÐZØŒ|Ð3Ô4ÔBÀbÒHÐHÐHÐHØŒ|Ð3Ô4ÔAÀTÐIÐIÐIÐIÐIÐIr   N)	Ú__name__Ú
__module__Ú__qualname__r   r9   rY   rd   r{   r‚   r   r   r   r+   r+   .   s¥   € € € € € ð(È+ð (ð (ð (ð (ð(ÐP[ð (ð (ð (ð (ð<:È;ð :ð :ð :ð :ð0%)ÐQ\ð %)ð %)ð %)ð %)ðNJÀ+ð Jð Jð Jð Jð Jð Jr   r+   )Ú__doc__ÚpytestÚserver.world.quest_enginer   r   r   Ú"server.world.procedural_map_enginer   r   Úserver.world.war_fog_enginer   Úserver.world.map_data_typesr	   r
   Úfixturer   Ústrr)   r+   r   r   r   ú<module>rŽ      s?  ððð ð €€€ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ð „ð)�kð )ð )ð )ñ „ð)ð
 ð 
¸ð 
Àsð 
Ètð 
ð 
ð 
ð 
ð"KJð KJð KJð KJð KJñ KJô KJð KJð KJð KJr   