§
    )«j  ã                   ó¢   — d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )	uô  
AutoPOE2 - Closed-Loop Logistics & Resilience Unit Tests (Doc 69)
================================================================
Kiá»ƒm thá»­ tá»± Ä‘á»™ng:
1. Auto-Restock Waystone tá»« Stash khi tÃºi Ä‘á»“ rá»—ng (INV-WAYSTONE-RESTOCK-MIN).
2. Lá»�c bá»� Waystone chá»©a Brick Mod (INV-MAP-NO-BRICK).
3. Tá»± Ä‘á»™ng kÃ­ch hoáº¡t chu trÃ¬nh cáº¥t Ä‘á»“ háº­u map (Post-Map Stash Routine).
4. Phá»¥c há»“i vÃ  click há»“i sinh khi phÃ¡t hiá»‡n mÃ n hÃ¬nh tá»­ tráº­n (INV-DEATH-RECOVERY-TIMEOUT).
é    N)Ú	MagicMockÚpatch)ÚCraftActionÚWaystoneAutoCrafterÚWaystoneItemÚWaystoneRarity)ÚAutonomousMappingCoordinatorc                   óx   — e Zd Zd„ Z edd¬¦  «        d„ ¦   «         Z edd¬¦  «        d„ ¦   «         Zd„ Zd„ Zd	S )
ÚTestClosedLoopLogisticsc                 óþ   — t          dddd¬¦  «        | _        t          d¬¦  «        | j        _        t          ¦   «         | j        _        t          ¦   «         | j        _        t          d¬¦  «        | j        _        d S )Ni 
  i   z!tests/test_fixtures_real_capturesT)Úscreen_wÚscreen_hÚcapture_dirÚis_simulated©Úreturn_valuezmock_capture.png)r	   Úcoordinatorr   Úensure_focusÚ	press_keyÚclickÚcapture_step)Úselfs    ú8C:\Projects\AutoPOE2\tests\test_closed_loop_logistics.pyÚsetUpzTestClosedLoopLogistics.setUp   sx   € Ý7ØØØ;Øð	
ñ 
ô 
ˆÔõ )2¸tÐ(DÑ(DÔ(DˆÔÔ%Ý%.¡[¤[ˆÔÔ"Ý!*¡¤ˆÔÔÝ(1Ð?QÐ(RÑ(RÔ(RˆÔÔ%Ð%Ð%ó    zos.path.existsTr   c                 ó
  — t          d¬¦  «        | j        _        t          dddœ¬¦  «        | j        j        _        ddddd	d
œ}t          g |gg¬¦  «        | j        j        _        t          ddddœ¬¦  «        | j        _        | j                             d¬¦  «        }|                      |d         d¦  «         | j        j         	                    ¦   «          |                      t          |d         ¦  «        d¦  «         dS )us   Khi tÃºi Ä‘á»“ rá»—ng Waystone, Stage 1 pháº£i tá»± Ä‘á»™ng gá»�i execute_stage0_stash_routine Ä‘á»ƒ rÃºt Waystone.Tr   é   F©Úoccupied_countÚis_fullr   éÂ  é4  ç     Àb@©ÚcolÚrowÚcenter_xÚcenter_yÚavg_rgb©Úside_effectÚSUCCESS)ÚstatusÚsuccessÚwaystone_withdrawn©Útarget_slot_idxr-   Úwaystones_foundé   N)r   r   Úis_inventory_openÚscannerÚscan_full_inventoryÚscan_all_waystonesÚexecute_stage0_stash_routineÚexecute_stage1_precheckÚassertEqualÚassert_called_onceÚlen)r   Úmock_existsÚmock_wsÚress       r   Ú-test_stage1_auto_restock_when_inventory_emptyzETestClosedLoopLogistics.test_stage1_auto_restock_when_inventory_empty%   s"  € õ .7ÀDÐ-IÑ-IÔ-IˆÔÔ*Ý7@Ø,-¸%Ð@Ð@ð8
ñ 8
ô 8
ˆÔÔ Ô4ð
  A°4ÀSÐUZÐ[Ð[ˆÝ6?Ø˜g˜Y˜ð7
ñ 7
ô 7
ˆÔÔ Ô3õ
 9BØ$-¸$ÐVZÐ[Ð[ð9
ñ 9
ô 9
ˆÔÔ5ð Ô×6Ò6ÀqÐ6ÑIÔIˆð 	×Ò˜˜Xœ¨	Ñ2Ô2Ð2àÔÔ5×HÒHÑJÔJÐJØ×Ò�˜SÐ!2Ô3Ñ4Ô4°aÑ8Ô8Ð8Ð8Ð8r   c                 ó.  — t          d¬¦  «        | j        _        t          dddœ¬¦  «        | j        j        _        ddddd	d
œ}dddddd
œ}t          ||g¬¦  «        | j        j        _        dd„}t          |¬¦  «        | j        j        _        | j                             d¬¦  «        }|  	                    |d         d¦  «         t          |d         t          ¦  «        r|d         d         n|d         d         }|  	                    |d¦  «         dS )uj   Stage 1 pháº£i tá»± Ä‘á»™ng bá»� qua viÃªn Waystone dÃ­nh Brick Mod vÃ  chá»�n viÃªn an toÃ n tiáº¿p theo.Tr   r   Fr   r   r!   r"   r#   r$   r3   iö  g      d@c                 óH   — | j         dk    rt          j        S t          j        S )Nr   )Úinventory_colr   ÚSKIP_DANGEROUSÚ
SKIP_CRAFT)ÚwaystoneÚalchemy_countÚis_in_safe_areaÚscour_counts       r   Ú	mock_evalzKTestClosedLoopLogistics.test_stage1_skips_brick_waystone.<locals>.mock_evalN   s"   € ØÔ%¨Ò*Ð*Ý"Ô1Ð1ÝÔ)Ð)r   r*   r0   r-   r,   Úselected_slotr%   N)Tr   )r   r   r4   r5   r6   r7   ÚcrafterÚevaluate_craft_actionr9   r:   Ú
isinstanceÚdict)r   r=   Úws_brickÚws_saferJ   r?   Ú
chosen_cols          r   Ú test_stage1_skips_brick_waystonez8TestClosedLoopLogistics.test_stage1_skips_brick_waystone@   s@  € õ .7ÀDÐ-IÑ-IÔ-IˆÔÔ*Ý7@Ø,-¸%Ð@Ð@ð8
ñ 8
ô 8
ˆÔÔ Ô4ð
  Q°DÀcÐV[Ð\Ð\ˆØ A°4ÀSÐUZÐ[Ð[ˆÝ6?ÈhÐX_ÐM`Ð6aÑ6aÔ6aˆÔÔ Ô3ð	*ð 	*ð 	*ð 	*õ
 :CÈyÐ9YÑ9YÔ9YˆÔÔ Ô6àÔ×6Ò6ÀqÐ6ÑIÔIˆà×Ò˜˜Xœ¨	Ñ2Ô2Ð2å4>¸sÀ?Ô?SÕUYÑ4ZÔ4ZÐw�S˜Ô)¨%Ô0Ð0Ð`cÐdsÔ`tÐuvÔ`wˆ
Ø×Ò˜ QÑ'Ô'Ð'Ð'Ð'r   c                 óÂ  — t          ¦   «         | j        _        t          dddœ¬¦  «        | j        _        t          dg d¢dœ¬¦  «        | j        _        t          ddi¬¦  «        | j        _        t          ddi¬¦  «        | j        _        t          ddd	œ¬¦  «        | j        _        t          dd
d
dœ¬¦  «        | j        _        t          dddœ¬¦  «        | j        _	        | j         
                    ddd¬¦  «        }|                      |d         d¦  «         |                      d|d         ¦  «         |                      | j        j        j        d¦  «         d
S )up   Khi cÃ y xong map, pipeline pháº£i tá»± Ä‘á»™ng gá»�i chu trÃ¬nh cáº¥t Ä‘á»“ háº­u map (Post-Map Stash Routine).r,   é   )r-   Úitems_depositedr   )r   r   éd   rW   r#   )r-   rK   r-   ÚDeserted)r-   Úentered_zoneN)r-   Úrunner_instanceÚrunner_resultT)r-   Úreturned_to_hideoutr   )r1   Úenable_stashingÚenable_post_stashingÚSTAGE0_POST_STASHÚstages_completedé   )r   r   Údismiss_modalsr8   r9   Úexecute_stage2_map_deviceÚexecute_stage3_atlas_activationÚexecute_stage4_map_entranceÚexecute_stage5_map_clearÚexecute_stage6_portal_returnÚexecute_pipeliner:   ÚassertInÚ
call_count)r   Úreports     r   Ú0test_post_map_stash_routine_executed_in_pipelinezHTestClosedLoopLogistics.test_post_map_stash_routine_executed_in_pipeline\   sš  € å*3©+¬+ˆÔÔ'Ý8AØ$-À!ÐDÐDð9
ñ 9
ô 9
ˆÔÔ5õ 4=Ø$-Ð@WÐ@WÐ@WÐXÐXð4
ñ 4
ô 4
ˆÔÔ0õ 6?ÈXÐW`ÐLaÐ5bÑ5bÔ5bˆÔÔ2Ý;DÐS[Ð]fÐRgÐ;hÑ;hÔ;hˆÔÔ8Ý7@Ø$-¸zÐJÐJð8
ñ 8
ô 8
ˆÔÔ4õ 5>Ø$-À$ÐY]Ð^Ð^ð5
ñ 5
ô 5
ˆÔÔ1õ 9BØ$-ÀdÐKÐKð9
ñ 9
ô 9
ˆÔÔ5ð Ô!×2Ò2Ø¨tÈ$ð 3ñ 
ô 
ˆð 	×Ò˜ Ô)¨9Ñ5Ô5Ð5à�ŠÐ)¨6Ð2DÔ+EÑFÔFÐFØ×Ò˜Ô)ÔFÔQÐSTÑUÔUÐUÐUÐUr   c                 óZ  — t          d¬¦  «        | j        _        d| j        _        | j                             dd¬¦  «        }|                      |d         d¦  «         |                      |d         ¦  «         | j        j                             d	d
t          j
        j        ¬¦  «         dS )u`   Khi phÃ¡t hiá»‡n mÃ n hÃ¬nh tá»­ tráº­n, Stage 6 pháº£i tá»± Ä‘á»™ng click Resurrect in Hideout.)é   é   r   NrX   )ÚrunnerÚmap_zoner-   r,   r\   rn   ro   )Údelay_after)r   r   Ú_find_resurrect_buttonÚlog_watcherrg   r:   Ú
assertTruer   Úassert_called_withÚunittestÚmockÚANY)r   r?   s     r   Ú)test_death_resurrect_detected_and_handledzATestClosedLoopLogistics.test_death_resurrect_detected_and_handledz   s�   € å2;ÈÐ2UÑ2UÔ2UˆÔÔ/Ø'+ˆÔÔ$àÔ×;Ò;À4ÐR\Ð;Ñ]Ô]ˆà×Ò˜˜Xœ¨	Ñ2Ô2Ð2Ø�Š˜Ð1Ô2Ñ3Ô3Ð3àÔÔ×1Ò1°$¸ÍÌÔIZÐ1Ñ[Ô[Ð[Ð[Ð[r   N)	Ú__name__Ú
__module__Ú__qualname__r   r   r@   rS   rl   rz   © r   r   r   r      s¤   € € € € € ð
Sð 
Sð 
Sð €UÐ¨$Ð/Ñ/Ô/ð9ð 9ñ 0Ô/ð9ð4 €UÐ¨$Ð/Ñ/Ô/ð(ð (ñ 0Ô/ð(ð6Vð Vð Vð<
\ð 
\ð 
\ð 
\ð 
\r   r   Ú__main__)Ú__doc__Úosrw   Úunittest.mockr   r   Ú*src.assistant_tool.pickit.waystone_crafterr   r   r   r   Ú$tools.autonomous_mapping_coordinatorr	   ÚTestCaser   r{   Úmainr~   r   r   ú<module>r‡      sð   ððð ð 
€	€	€	Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ Mðl\ð l\ð l\ð l\ð l\˜hÔ/ñ l\ô l\ð l\ð^ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   