
    ,Qja                         d Z ddlZddlmc mZ ddlZddlZ G d d      Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zy)u   Proactive phone events handled in main.Session: new-location debounce +
prompt, geofence→place routines, and SMS watch-list gating. No network — the
phone store is stubbed and _deliver_proactive is captured.    Nc                       e Zd Zd Zd Zd Zy)FakeWSc                     g | _         y N)sent)selfs    G/Users/ahmed/devFolder/Ultron/claude-voice/gateway/tests/test_events.py__init__zFakeWS.__init__	   s	    	    c                 B   K   | j                   j                  |       y wr   )r   append)r   frames     r	   	send_jsonzFakeWS.send_json   s     		s   c                    K   y wr    )r   datas     r	   
send_byteszFakeWS.send_bytes   s	     s   N)__name__
__module____qualname__r
   r   r   r   r   r	   r   r      s     r   r   c                     t        j                  t                     }d|_        g fd}| j	                  |d|       |fS )Nwschatc                 0   K   j                  |        y wr   r   )injected	delivereds    r	   recz_session.<locals>.rec   s     "s   _deliver_proactive)mainSessionr   modesetattr)monkeypatchsessr   r   s      @r	   _sessionr'      sA    <<68$DDII#2C8?r   c                 R    fd}| j                  t        j                  d|       y )Nc                 B   K   t        j                  | g             S wr   )listget)kindmappings    r	   	fake_listz_wire_store.<locals>.fake_list   s     GKKb)**s   
list_items)r$   r!   phone_store)r%   r-   r.   s    ` r	   _wire_storer1      s     +((,	Br   c            	         t        j                  t                     } | j                  }d}d} |||      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}x}x}x}}ddt        d      j                         f| _        | j                  }d}d} |||      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}x}x}x}}| j                  }d}d} |||      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}x}x}x}}y )Nr   L:@皙I@T)is)zg%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s._should_prompt_location
}(%(py4)s, %(py6)s)
} is %(py11)sr&   )py0py2py4py6py8py11zassert %(py13)spy13timegytL:@go|I@Fg     :@g     @I@)r!   r"   r   _should_prompt_location
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
__import__	monotonic_last_loc_prompt)	r&   @py_assert1@py_assert3@py_assert5@py_assert7@py_assert10@py_assert9@py_format12@py_format14s	            r	   $test_should_prompt_location_debouncerR   %   s9   <<68$D''==u='u5==5====5======4===4==='======u===5==========="E:f+=+G+G+IJD''DD(D'(;DuD;uDDDD;uDDDDDD4DDD4DDD'DDDDDD(DDD;DDDuDDDDDDDD''==u='u5==5====5======4===4==='======u===5===========r   c                   K   t        |       \  }}t        | i        |j                  dddddd       d {    t        |      }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  t              rt	        j                  t              nd
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}}g }d}|d   }||v }|}	|rd}
|d   }|
|v }|}	|	st	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }|j                  |       |r_t	        j
                  dfd
f      t	        j                  |
      t	        j                  |      dz  }dd|iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            d x}	x}x}x}x}x}
x}}y 7 Dw)Neventnew_locationr3   r4   latlngtyper,   coords   ==z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   r6   py1py3r9   assert %(py8)sr:   z26.30r   
save_placeinz%(py3)s in %(py6)src   r9   %(py8)sz%(py11)s in %(py14)sr;   py14%(py16)spy16assert %(py19)spy19)r'   r1   _handle_eventr`   r?   r@   rA   rB   rC   rD   rE   rF   r   _format_boolopr%   r&   r   @py_assert2rL   @py_assert4@py_format7@py_format9rJ   @py_assert0rN   @py_assert13@py_assert12@py_format15@py_format17@py_format18@py_format20s                    r	   !test_new_location_unknown_promptsr   0   s    {+OD)R 


g~05e(DF G G Gy>Q>Q>Q33yy>QC7CilC7l"C|Cy|C||'CCCC7lCCC7CCCl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Gs   6I?I<II?c                   K   t        |       \  }}t        | i        dddddd}|j                  |       d {    |j                  |       d {    t        |      }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  t              rt	        j                  t              nd
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}}y 7 /7 w)NrT   rU   r3   r4   rV   rY   r\   r]   r_   r`   r   ra   rd   r:   )r'   r1   rr   r`   r?   r@   rA   rB   rC   rD   rE   rF   )	r%   r&   r   evtru   rL   rv   rw   rx   s	            r	   'test_new_location_debounced_second_timer   9   s     {+OD)R N"513C


S
!!!


S
!!!y>Q>Q>Q33yy>Q "!s"   8E/E)E/E,DE/,E/c                   K   t        |       \  }}t        | t        j                  ddddgi       |j	                  ddddd	d
       d {    g }||k(  }|st        j                  d|fd||f      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}}y 7 w)Nhomer3   r4   )labelrW   rX   rT   rU   g0*L:@gK=I@rV   rY   r]   z%(py0)s == %(py3)sr   r6   rc   assert %(py5)spy5)r'   r1   r0   
KIND_PLACErr   r?   r@   rA   rB   rC   rD   rE   rF   r%   r&   r   ru   rJ   @py_format4@py_format6s          r	   (test_new_location_near_known_place_skipsr   C   s     {+OD)k4497; < =


g~08(JL M M M9?999Ms   AC;C9B,C;c           
      ^  K   t        |       \  }}g fd}| j                  t        d|       t        | t        j
                  ddddddd	d
dddddddd
gi       |j                  ddddddd       d {    dg}|k(  }|st        j                  d|fd|f      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}}y 7 w)Nc                 6   K   j                  | d          y w)Nnamer   )routinefireds    r	   	fake_firez5test_geofence_place_fires_routines.<locals>.fake_fireP   s     WV_%s   fire_routinez	at officeplaceoffice)rZ   r   speak_brieftasks)rZ   brief)r   triggeraction	unrelatedr=   z07:00)rZ   atsay_textx)rZ   textrT   rU   r3   r4   rV   )rZ   r,   r[   r   r]   r   r   r   r   r   )r'   r$   r!   r1   r0   KIND_ROUTINErr   r?   r@   rA   rB   rC   rD   rE   rF   )	r%   r&   
_deliveredr   ru   rJ   r   r   r   s	           @r	   "test_geofence_place_fires_routinesr   L   s    ,D*E&ni8k66'H)M)G<	>&)H&4	69   

g~04T(B'/1 2 2 2 !M!5M!!!!5M!!!!!!5!!!5!!!M!!!!!!!2s   A;D->D+?B-D-c                 $  K   t        |       \  }}t        | t        j                  ddigi       |j	                  ddddd       d {    t        |      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  t
              rt        j                  t
              nd
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}}g }d}|d   }||v }|}	|rd}
|d   }|
|v }|}	|	st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }|j                  |       |r_t        j                  dfd
f      t        j                  |
      t        j                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}	x}x}x}x}x}
x}}y 7 Dw)NsenderSNBsms_inz
SNB-AlAhlizYour OTP is 123456r\   rZ   r   bodytsr]   r_   r`   r   ra   rd   r:   r   123456rf   rh   ri   rj   rk   rl   rn   ro   rp   rq   )r'   r1   r0   KIND_SMS_WATCH_handle_smsr`   r?   r@   rA   rB   rC   rD   rE   rF   r   rs   rt   s                    r	    test_sms_watched_sender_deliversr   `   s    {+OD)k88He;L:MNO


H$8C D D Dy>Q>Q>Q33yy>QD<D9Q<D<<'DHD	!DH,DDDD<<DDD<DDD<DDDDDDDHDDDHDDDDDDDDDDDDDDDDDDs   AJ	J
IJc                   K   t        |       \  }}t        | t        j                  ddigi       |j	                  ddddd       d {    g }||k(  }|st        j                  d|fd	||f      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}}y 7 w)Nr   Barqr   SomeBankhellor\   r   r]   r   r   r   r   r   )r'   r1   r0   r   r   r?   r@   rA   rB   rC   rD   rE   rF   r   s          r	   !test_sms_unwatched_sender_ignoredr   i   s     {+OD)k88Hf;M:NOP


H
$+16 7 7 79?9997s   AC7	C5
B,C7c                   K   t        |       \  }}t        | t        j                  ddigi       |j	                  ddddd       d {    t        |      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  t
              rt        j                  t
              nd
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}}y 7 w)Nr   *r   Anyonehir\   r   r]   r_   r`   r   ra   rd   r:   )r'   r1   r0   r   r   r`   r?   r@   rA   rB   rC   rD   rE   rF   )r%   r&   r   ru   rL   rv   rw   rx   s           r	   test_sms_wildcard_deliversr   q   s     {+OD)k88Hc?:KLM


H$(3 4 4 4y>Q>Q>Q33yy>Q4s   AE"	E
DE"c                  h    t        j                  t                     } | j                  ddd       y )Nr   nopeT)idok)r!   r"   r   _resolve_action)r&   s    r	   &test_resolve_action_unknown_id_is_safer   y   s%    <<68$Dd34r   )__doc__builtinsrA   _pytest.assertion.rewrite	assertionrewriter?   r!   r0   r   r'   r1   rR   r   r   r   r   r   r   r   r   r   r   r	   <module>r      sZ   >    C>D"(E5r   