§
    G›¦jµ  ã                   óR   — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZ d„ Zd„ Zd„ ZdS )u  
Unit Tests for Ange Currency Exchange Routine (Doc 43 P2-2)
============================================================
Kiá»ƒm thá»­ cÃ¡c báº¥t biáº¿n:
- INV-ANGE-EXCHANGE-01: Reserve Interlock & Anti-Depletion
- Cooldown 60s
- Circuit Breaker sau 2 láº§n tháº¥t báº¡i
é    N)ÚAngeCurrencyExchangeManagerÚAngeExchangeConfigÚExchangeStatusc                  ó˜  — t          ¦   «         } |                      dd¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d x}x}}d}
|j        }|
|v }|sªt          j        d|fd|
|f¦  «        t          j        |
¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}
x}}|                      dd¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d x}x}}|                      dd¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}d S )Né   é   )Úcurrent_exalted_countÚalchemy_rate_per_exaltF©Úis©z/%(py2)s
{%(py2)s = %(py0)s.allowed
} is %(py5)sÚ
decision_5©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7©ú==)zX%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.REJECTED_LOW_RESERVE
}r   ©r   r   Úpy4Úpy6úassert %(py8)sÚpy8zINV-ANGE-EXCHANGE-01)Úin)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reason
})Úpy1Úpy3r   é   Ú
decision_3é   TÚ
decision_6)zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.SUCCESS
}é   )z8%(py2)s
{%(py2)s = %(py0)s.exalted_to_spend
} == %(py5)s)r   Úevaluate_exchangeÚallowedÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚstatusr   ÚREJECTED_LOW_RESERVEÚreasonÚSUCCESSÚexalted_to_spend)Úmanagerr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert5Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert2r    r"   s                 ú0C:\Projects\AutoPOE2\tests\test_ange_exchange.pyÚ(test_inv_ange_exchange_reserve_interlockr?      s-  € Ý)Ñ+Ô+€Gð ×*Ò*ÀÐ[]Ð*Ñ^Ô^€JØÔÐ& Ð&Ð Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ:Ñ&Ô&Ð&Õ&Ô&ˆ:Ñ&Ô&Ð&Ð&Õ&Ô&ÐÑ&Ô&Õ&Ô& Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔÐC¥Ô CÐCÐÐ CÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐÐ CÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆ:ÑCÔCÐCÕCÔCˆ:ÑCÔCÐCÐCÕCÔCÐÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC¥ÑCÔCÐCÕCÔC¥ÑCÔCÐCÐCÕCÔCÐ CÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCØ!Ð6 ZÔ%6Ð6Ð!Ð%6Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð!Ð%6Ð6Ñ6Ô6Õ6Ô6Ð!Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6 ZÑ6Ô6Ð6Õ6Ô6 ZÑ6Ô6Ð6Ð6Õ6Ô6Ð%6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6à×*Ò*ÀÐ[]Ð*Ñ^Ô^€JØÔÐ& Ð&Ð Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ:Ñ&Ô&Ð&Õ&Ô&ˆ:Ñ&Ô&Ð&Ð&Õ&Ô&ÐÑ&Ô&Õ&Ô& Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔÐC¥Ô CÐCÐÐ CÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐÐ CÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆ:ÑCÔCÐCÕCÔCˆ:ÑCÔCÐCÐCÕCÔCÐÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC¥ÑCÔCÐCÕCÔC¥ÑCÔCÐCÐCÕCÔCÐ CÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCð ×*Ò*ÀÐ[]Ð*Ñ^Ô^€JØÔÐ% Ð%Ð Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆ:Ñ%Ô%Ð%Õ%Ô%ˆ:Ñ%Ô%Ð%Ð%Õ%Ô%ÐÑ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ØÔÐ6¥Ô 6Ð6ÐÐ 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ÐÐ 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆ:Ñ6Ô6Ð6Õ6Ô6ˆ:Ñ6Ô6Ð6Ð6Õ6Ô6ÐÑ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥Ñ6Ô6Ð6Õ6Ô6¥Ñ6Ô6Ð6Ð6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØÔ&Ð+¨!Ð+Ð&¨!Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð&¨!Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Ð+Õ+Ô+Ð&Ñ+Ô+Õ+Ô+¨!Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ó    c                  ó’  — t          ¦   «         } d}|                      dd|¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|                      dd|¬¦  «         |                      dd|dz   ¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }t          j        }	||	k    }|sòt          j        d|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}	|                      dd|dz   ¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}d S )Né@B é
   r   ©r	   r
   Únow_msTr   r   Úd1r   r   r   )ÚsuccessÚreceived_alchemyrE   é	   i0u  FÚd2r   )zU%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.REJECTED_COOLDOWN
}r   r   r   r   iHî  Úd3)r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Úrecord_exchange_resultr.   r   ÚREJECTED_COOLDOWN)r3   Ú	base_timerF   r4   r5   r6   r7   r8   rJ   r9   r:   r;   rK   s                r>   Útest_ange_exchange_cooldownrO   &   sM  € Ý)Ñ+Ô+€GØ€Ið 
×	"Ò	"¸ÐTVÐ_hÐ	"Ñ	iÔ	i€BØŒ:Ð˜Ðˆ:˜ÐÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ2ÑÔÐÕÔˆ2ÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ×"Ò"¨4À"ÈYÐ"ÑWÔWÐWð 
×	"Ò	"¸ÐSUÐ^gÐjoÑ^oÐ	"Ñ	pÔ	p€BØŒ:Ð˜Ðˆ:˜ÐÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ2ÑÔÐÕÔˆ2ÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒ9Ð8�Ô8Ð8ˆ9Ð8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆ9Ð8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ2Ñ8Ô8Ð8Õ8Ô8ˆ2Ñ8Ô8Ð8Ð8Õ8Ô8ˆ9Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8�Ñ8Ô8Ð8Õ8Ô8�Ñ8Ô8Ð8Ð8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð 
×	"Ò	"¸ÐSUÐ^gÐjoÑ^oÐ	"Ñ	pÔ	p€BØŒ:Ð˜Ðˆ:˜ÐÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ2ÑÔÐÕÔˆ2ÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr@   c                  ó6	  — t          ¦   «         } d}|                      d|¬¦  «         | j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|                      d|dz   ¬¦  «         | j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}| j        }||k    }|sÕt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}}|                      dd|dz   ¬¦  «        }	|	j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|	j        }t          j        }
||
k    }|sòt          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}
d S )NrB   F)rG   rE   r#   r   )z<%(py2)s
{%(py2)s = %(py0)s.consecutive_failures
} == %(py5)sr3   r   r   r   iè  é   )ú>)z?%(py2)s
{%(py2)s = %(py0)s.circuit_breaker_until_ms
} > %(py4)srN   )r   r   r   zassert %(py6)sr   rC   r   iÐ  rD   r   r   Úd)zZ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.CIRCUIT_BREAKER_ACTIVE
}r   r   r   r   )r   rL   Úconsecutive_failuresr&   r'   r(   r)   r*   r+   r,   r-   Úcircuit_breaker_until_msr$   r%   r.   r   ÚCIRCUIT_BREAKER_ACTIVE)r3   rN   r4   r5   r6   r7   r8   Ú@py_format5r:   rS   r9   r;   s               r>   Ú"test_ange_exchange_circuit_breakerrX   9   s5  € Ý)Ñ+Ô+€GØ€Ið ×"Ò"¨5¸Ð"ÑCÔCÐCØÔ'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ7Ñ,Ô,Ð,Õ,Ô,ˆ7Ñ,Ô,Ð,Ð,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð ×"Ò"¨5¸ÀTÑ9IÐ"ÑJÔJÐJØÔ'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ7Ñ,Ô,Ð,Õ,Ô,ˆ7Ñ,Ô,Ð,Ð,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ+Ð7Ð+¨iÒ7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð+¨iÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7ˆ7Ñ7Ô7Ð7Õ7Ô7ˆ7Ñ7Ô7Ð7Ð7Õ7Ô7Ð+Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7¨iÑ7Ô7Ð7Õ7Ô7¨iÑ7Ô7Ð7Ð7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7ð 	×!Ò!¸ÐSUÐ^gÐjnÑ^nÐ!ÑoÔo€AØŒ9Ð˜Ðˆ9˜ÐÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ1ÑÔÐÕÔˆ1ÑÔÐÐÕÔˆ9ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒ8Ð<•~Ô<Ð<ˆ8Ð<Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<ˆ8Ð<Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆ1Ñ<Ô<Ð<Õ<Ô<ˆ1Ñ<Ô<Ð<Ð<Õ<Ô<ˆ8Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<•~Ñ<Ô<Ð<Õ<Ô<•~Ñ<Ô<Ð<Ð<Õ<Ô<Ð<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r@   )Ú__doc__Úbuiltinsr(   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter&   ÚpytestÚ'src.assistant_tool.pickit.ange_exchanger   r   r   r?   rO   rX   © r@   r>   ú<module>ra      s�   ððð ð € € € € € € € € € € € € €€€€ðð ð ð ð ð ð ð ð ð ð,ð ,ð ,ð(ð ð ð&=ð =ð =ð =ð =r@   