§
    é%Âjâ&  ã                  ó  — d dl mZ d dlZd dlmc mZ d dlZd dl	Z	d dl
mZ d dlZd dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z! d dl"m#Z#  G d„ d¦  «        Z$dd„Z%dd„Z&ddd„Z'dd„Z(d d„Z)dd„Z*dd„Z+d!d„Z,d!d„Z-dS )"é    )ÚannotationsN)ÚAny)ÚHTTPExceptionÚWebSocketDisconnect)ÚDeviceÚDisplayMessageÚNotificationTestÚTargetSelectionÚdevice_websocketÚdevicesÚhealthÚlist_devicesÚloggerÚcredential_storeÚpi_eventÚpi_sessionsÚselect_targetÚtarget_storeÚsend_messageÚtest_notification©ÚPiSessionEventc                  ó6   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚFakeWebSocketÚreturnÚNonec                ó‚   — t          j        ¦   «         | _        t          j        ¦   «         | _        d| _        d | _        d S )NF)ÚasyncioÚQueueÚincomingÚsentÚacceptedÚclosed©Úselfs    ú\/home/lighthouse/esp32-dev/.cache/wifi-fallback-speech-ab-0.5.1/server/tests/test_gateway.pyÚ__init__zFakeWebSocket.__init__    s.   € ÝGNÄ}ÁÄˆŒÝ3:´=±?´?ˆŒ	ØˆŒØ.2ˆŒˆˆó    c              ƒ  ó   K  — d| _         d S )NT)r"   r$   s    r&   ÚacceptzFakeWebSocket.accept&   s   è è € ØˆŒˆˆr(   údict[str, Any]c              ƒ  óv   K  — | j                              ¦   «         ƒ d {V —†}t          |t          ¦  «        r|‚|S ©N)r    ÚgetÚ
isinstanceÚBaseException©r%   Úvalues     r&   Úreceive_jsonzFakeWebSocket.receive_json)   sG   è è € Ø”m×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)ˆÝ�e�]Ñ+Ô+ð 	ØˆKØˆr(   r2   c              ƒ  óJ   K  — | j                              |¦  «        ƒ d {V —† d S r-   )r!   Úputr1   s     r&   Ú	send_jsonzFakeWebSocket.send_json/   s2   è è € ØŒi�mŠm˜EÑ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r(   ÚcodeÚintÚreasonÚstrc              ƒ  ó   K  — ||f| _         d S r-   )r#   )r%   r7   r9   s      r&   ÚclosezFakeWebSocket.close2   s   è è € Ø˜V�nˆŒˆˆr(   N©r   r   )r   r+   )r2   r+   r   r   )r7   r8   r9   r:   r   r   )Ú__name__Ú
__module__Ú__qualname__r'   r*   r3   r6   r<   © r(   r&   r   r      sx   € € € € € ð3ð 3ð 3ð 3ðð ð ð ðð ð ð ð#ð #ð #ð #ð%ð %ð %ð %ð %ð %r(   r   Úcoror   r   c                ó*   — t          j        | ¦  «        S r-   )r   Úrun)rB   s    r&   rD   rD   6   s   € ÝŒ;�tÑÔÐr(   r   c                 óh   — t          j        ¦   «          t          j                             ¦   «          d S r-   )r   Úclearr   ÚsessionsrA   r(   r&   Úsetup_functionrH   :   s(   € Ý„M�O„O€OÝÔ×ÒÑ Ô Ð Ð Ð r(   úesp32s3-test001Útmp_pathÚ	device_idr:   c                ó†   — d}| dz  }|                      d|› d|› d�d¬¦  «         |t          _        | dz  t          _        |S )	Nzunit-test-device-tokenzdevice.jsonz{"device_id":"z","device_token":"z#","pi_token":"unit-test-pi-token"}
zutf-8)Úencodingztargets.json)Ú
write_textr   Úpathr   )rJ   rK   ÚtokenrO   s       r&   Úauthorize_test_devicerQ   ?   sb   € Ø$€EØ�mÑ#€DØ‡O‚OØc˜)ÐcÐc°uÐcÐcÐcØð ñ ô ð ð !ÕÔØ  >Ñ1…LÔØ€Lr(   c                 óŒ  — t          ¦   «         } t          | ¦  «        }ddddœ}||k    }|�st          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        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}}d S )NÚokz0.5.0r   )ÚstatusÚcontrol_versionÚonline_devices©ú==)zG%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s()
})
} == %(py8)srD   r   )Úpy0Úpy1Úpy3Úpy5Úpy8zassert %(py10)sÚpy10)
r   rD   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Ú@py_assert2Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11s         r&   Útest_healthrm   K   sN  € Ý‰xŒxÐ]�3ˆx‰=Œ=Ð] tÀÐ[\Ð]Ð]Ð]ˆ=Ð]Ò]Ð]Ð]Ñ]Õ]Ô]Ð]Ð]Ð]Ð]ˆ=Ð]Ð]Ñ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�3Ñ]Ô]Ð]Õ]Ô]�3Ñ]Ô]Ð]Ð]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�vÑ]Ô]Ð]Õ]Ô]�vÑ]Ô]Ð]Ð]Õ]Ô]ˆxÑ]Ô]Õ]Ô]ˆ=Ñ]Ô]Õ]Ô]Ð]Ñ]Ô]Ð]Ð]Ñ]Ð]Ð]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]r(   Úcaplogúpytest.LogCaptureFixturec                óš	  ‡	— t          |¦  «        Š	dˆ	fd„}|                      t          j        t          j        ¬¦  «        5  t           |¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   d„ | j        D ¦   «         }d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d
„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d„ |D ¦   «         }t          |¦  «        }| }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d„ |D ¦   «         }t          |¦  «        }|s•ddt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nr   r   c               “  óÚ  •K  — t          ¦   «         } | j                             dd‰dddœ¦  «        ƒ d {V —† t          j        t          | ¦  «        ¦  «        }t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}ddi}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d         }d}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j
        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}dddœ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          ¦   «         ƒ d {V —†}|d         d         }d}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         d         }d}||u }|slt          j
        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          dt!          dd¬¦  «        ¦  «        ƒ d {V —†}	|	d         }d}||u }|slt          j
        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}dddd œ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t#          dt%          d!¬"¦  «        ¦  «        ƒ d {V —†}
|
d         }d}||u }|slt          j
        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d#d!d$œ}||k    }|slt          j
        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}| j                             d%d&d'd(d)œ¦  «        ƒ d {V —† | j                             d*d+d,œ¦  «        ƒ d {V —† t'          d-¦  «        D ]7}t(          d         j        d*d+d,œk    r nt          j        d¦  «        ƒ d {V —† Œ8t(          d         }|j        }d*d+d,œ}||k    }|st          j
        d	|fd.||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d/œz  }d0d1|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}| j                             t/          ¦   «         ¦  «        ƒ d {V —† t          j        |d¦  «        ƒ d {V —† t(          d         }|j        }d2}||u }|st          j
        d|fd3||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d/œz  }d0d1|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )4NÚhellorI   úm5stack-stopwatchz0.1.0©ÚtyperK   Údevice_tokenÚboardÚfirmwareé   ru   Ú	hello_ackrW   ©z%(py1)s == %(py4)s©rZ   Úpy4úassert %(py6)sÚpy6Úserver_snapshotÚnetwork_rx_bpsr   )ú>=)z%(py1)s >= %(py4)sÚtarget_stateÚserver)ru   ÚtargetrK   ÚonlineT©Úis©z%(py1)s is %(py4)sÚHellozMessage from cloud©ÚtitleÚbodyr!   Údisplay_message)ru   rŒ   r�   Údone)ÚkindÚnotification_test)ru   r�   Úbutton_eventÚAÚclickiÒ  )ru   ÚbuttonÚactionÚ	timestampÚ	heartbeaté*   ©ru   Úuptimeé   )z2%(py3)s
{%(py3)s = %(py1)s.last_event
} == %(py6)s)rZ   r[   r   zassert %(py8)sr]   F)z.%(py3)s
{%(py3)s = %(py1)s.online
} is %(py6)s)r   r    r5   r   Úcreate_taskr   Úwait_forr!   r.   r_   r`   rd   re   rf   r   r   r   Úsend_test_notificationr	   Úranger   Ú
last_eventÚsleepr   r†   )Ú	websocketÚtaskÚ@py_assert0Ú@py_assert3rg   Ú@py_format5Ú@py_format7ÚsnapshotÚlistedÚresponseÚnotificationÚ_Ú@py_assert5rh   rk   rP   s                  €r&   Úscenarioz0test_bidirectional_device_flow.<locals>.scenarioR   sß  øè è € Ý!‘O”Oˆ	ØÔ ×$Ò$àØ.Ø %Ø,Ø#ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ Ô"Õ#3°IÑ#>Ô#>Ñ?Ô?ˆåÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ÐWÀ6È;ÐBWÐWÐ>ÐBWÒWÐWÐWÐWÕWÔWÐWÐWÐWÐWÐ>ÐBWÐWÑWÔWÕWÔWÐ>ÑWÔWÕWÔWÐBWÑWÔWÐWÐWÑWÐWÐWÐWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWÐWÐWÝ Ô)¨)¬.×*<Ò*<Ñ*>Ô*>ÀÑBÔBÐBÐBÐBÐBÐBÐBˆØ˜ÔÐ4Ð#4Ð4ÐÐ#4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ÐÐ#4Ð4Ñ4Ô4Õ4Ô4ÐÑ4Ô4Õ4Ô4Ð#4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø"ØðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð ?ñ 	
ô 	
õ 	
ô 
ðC
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ $‘~”~Ð%Ð%Ð%Ð%Ð%Ð%ˆØ�aŒy˜Ô%Ð:Ð):Ð:Ð%Ð):Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð%Ð):Ð:Ñ:Ô:Õ:Ô:Ð%Ñ:Ô:Õ:Ô:Ð):Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�aŒy˜Ô"Ð* dÐ*Ð" dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*å%Ø�~°GÐBVÐWÑWÔWñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø%ØØ(ðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð		
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð	 ?ñ 	
ô 	
õ 	
ô 
ð	C
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð		
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ 4ØÕ/°VÐ<Ñ<Ô<ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜FÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ð 	
Ø'ØðC
ð C
ð 	
Ð>ð C
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð>ð C
ð 	
ñ 	
ô 	
õ 	
ô 
ð ?ñ 	
ô 	
õ 	
ô 
ðC
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 Ô ×$Ò$Ø#¨s¸gÐTXÐYÐYñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ô ×$Ò$¨kÀRÐ%HÐ%HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝ�r‘”ð 	#ð 	#ˆAÝÐ(Ô)Ô4ÀÐXZÐ8[Ð8[Ò[Ð[Ø�Ý”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝÐ(Ô)Ð[Ð)Ô4Ð[ÀÐXZÐ8[Ð8[Ð[Ð4Ð8[Ò[Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[Ð4Ð8[Ð[Ñ[Ô[Õ[Ô[Ð)Ñ[Ô[Õ[Ô[Ð4Ñ[Ô[Õ[Ô[Ð8[Ñ[Ô[Ð[Ð[Ñ[Ð[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[àÔ ×$Ò$Õ%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ÝÔ˜t QÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ÝÐ(Ô)Ð9Ð)Ô0Ð9°EÐ9Ð0°EÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð0°EÐ9Ñ9Ô9Õ9Ô9Ð)Ñ9Ô9Õ9Ô9Ð0Ñ9Ô9Õ9Ô9°EÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r(   )r   c                óD   — g | ]}|j         |                     ¦   «         f‘ŒS rA   )ÚlevelnoÚ
getMessage)Ú.0Úrecords     r&   ú
<listcomp>z2test_bidirectional_device_flow.<locals>.<listcomp>�   s+   € ÐRÐRÐR¸�” × 1Ò 1Ñ 3Ô 3Ð4ÐRÐRÐRr(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zdevice esp32s3-test001 onlineN©ÚloggingÚINFO©r³   ÚlevelÚmessages      r&   ú	<genexpr>z1test_bidirectional_device_flow.<locals>.<genexpr>�   s;   è è € ÐrÐrÑXfÐX]Ð_fˆu�œÒ$ÐSÐ)HÈGÐ)SÐrÐrÐrÐrÐrÐrr(   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)rY   Úpy2r}   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zsent display_messageNr·   rº   s      r&   r½   z1test_bidirectional_device_flow.<locals>.<genexpr>‘   s9   è è € ÐiÐiÉ~ÈuÐV]ˆu�œÒ$ÐJÐ)?À7Ð)JÐiÐiÐiÐiÐiÐir(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zbutton clicked button=ANr·   rº   s      r&   r½   z1test_bidirectional_device_flow.<locals>.<genexpr>’   s;   è è € ÐlÐlÑR`ÐRWÐY`ˆu�œÒ$ÐMÐ)BÀgÐ)MÐlÐlÐlÐlÐlÐlr(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zheartbeat uptime=42N)r¸   ÚDEBUGrº   s      r&   r½   z1test_bidirectional_device_flow.<locals>.<genexpr>“   s9   è è € ÐiÐiÉ~ÈuÐV]ˆu�œÒ%ÐJÐ*?À7Ð*JÐiÐiÐiÐiÐiÐir(   c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )r˜   Nr·   rº   s      r&   r½   z1test_bidirectional_device_flow.<locals>.<genexpr>”   s7   è è € ÐbÐbÉÈÈw�5�GœLÒ(ÐC¨[¸GÐ-CÐbÐbÐbÐbÐbÐbr(   z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}c              3  óD   K  — | ]\  }}|t           j        k    od |v V — ŒdS )zdevice esp32s3-test001 offlineNr·   rº   s      r&   r½   z1test_bidirectional_device_flow.<locals>.<genexpr>•   s;   è è € ÐsÐsÑYgÐY^Ð`gˆu�œÒ$ÐTÐ)IÈWÐ)TÐsÐsÐsÐsÐsÐsr(   r=   )rQ   Úat_levelr¸   rÃ   r   ÚnamerD   Úrecordsr¾   ra   rb   r_   rc   rd   re   rf   )
rn   rJ   r¯   rÈ   Ú@py_assert1r¦   r§   r®   Ú@py_format6rP   s
            @r&   Útest_bidirectional_device_flowrË   O   s(  ø€ Ý! (Ñ+Ô+€Eð8:ð 8:ð 8:ð 8:ð 8:ð 8:ðt 
�Š�œ­v¬{ˆÑ	;Ô	;ð ð ÝˆHˆH‰JŒJ‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð SÐRÀ6Ä>ÐRÑRÔR€GØrÐrÐjqÐrÑrÔrÐr�3ÐrÑrÔrÐrÐrÐrÐrÐrÕrÔrÑrÔrÐrÐrÕrÔr�3ÑrÔrÐrÕrÔr�3ÑrÔrÐrÐrÕrÔrÐrÑrÔrÕrÔrÐrÑrÔrÐrÐrÑrÐrÕrÕrÔrÐrÑrÔrÑrÔrÐrÐrÐrÐrÐrØiÐiÐahÐiÑiÔiÐi�3ÐiÑiÔiÐiÐiÐiÐiÐiÕiÔiÑiÔiÐiÐiÕiÔi�3ÑiÔiÐiÕiÔi�3ÑiÔiÐiÐiÕiÔiÐiÑiÔiÕiÔiÐiÑiÔiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiÐiÐiØlÐlÐdkÐlÑlÔlÐl�3ÐlÑlÔlÐlÐlÐlÐlÐlÕlÔlÑlÔlÐlÐlÕlÔl�3ÑlÔlÐlÕlÔl�3ÑlÔlÐlÐlÕlÔlÐlÑlÔlÕlÔlÐlÑlÔlÐlÐlÑlÐlÕlÕlÔlÐlÑlÔlÑlÔlÐlÐlÐlÐlÐlØiÐiÐahÐiÑiÔiÐi�3ÐiÑiÔiÐiÐiÐiÐiÐiÕiÔiÑiÔiÐiÐiÕiÔi�3ÑiÔiÐiÕiÔi�3ÑiÔiÐiÐiÕiÔiÐiÑiÔiÕiÔiÐiÑiÔiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiÐiÐiØbÐbÐZaÐbÑbÔbÐb�sÐbÑbÔbÐbÐbÐbÐbÐbÐbÐbÐbÕbÔbÑbÔbÐbÐbÕbÔb�sÑbÔbÐbÕbÔb�sÑbÔbÐbÐbÕbÔbÐbÑbÔbÕbÔbÐbÑbÔbÐbÐbÑbÐbÕbÕbÔbÐbÑbÔbÑbÔbÐbÐbÐbÐbÐbÐbÐbØsÐsÐkrÐsÑsÔsÐs�3ÐsÑsÔsÐsÐsÐsÐsÐsÕsÔsÑsÔsÐsÐsÕsÔs�3ÑsÔsÐsÕsÔs�3ÑsÔsÐsÐsÕsÔsÐsÑsÔsÕsÔsÐsÑsÔsÐsÐsÑsÐsÕsÕsÔsÐsÑsÔsÑsÔsÐsÐsÐsÐsÐsÐsÐss   ÁA&Á&A*Á-A*c            
     óz  — t          j        t          ¦  «        5 } t          t	          dt          dd¬¦  «        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   | j        }|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        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )NÚmissingÚHiÚtherer‹   i”  rW   )zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.value
}.status_code
} == %(py7)sÚerror)rY   r¿   r}   Úpy7zassert %(py9)sÚpy9)ÚpytestÚraisesr   rD   r   r   r2   Ústatus_coder_   r`   ra   rb   rc   rd   re   rf   )rÐ   rÉ   r¦   rj   r®   Ú@py_format8Ú@py_format10s          r&   Ú%test_message_to_unknown_device_is_404rØ   ˜   s›  € Ý	Œ•}Ñ	%Ô	%ð O¨Ý�L˜¥N¸ÀGÐ$LÑ$LÔ$LÑMÔMÑNÔNÐNðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð OàŒ;Ð)ˆ;Ô"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Õ)Ô)ˆ5Ñ)Ô)Ð)Ð)Õ)Ô)ˆ;Ñ)Ô)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)s   š-AÁAÁAc                 ó<   — dd„} t           | ¦   «         ¦  «         d S )Nr   r   c               “  ó–  K  — t          ¦   «         } | j                             dddœ¦  «        ƒ d {V —† t          | ¦  «        ƒ d {V —† | 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        }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 )Nr˜   ry   rš   Tr‡   )z0%(py2)s
{%(py2)s = %(py0)s.accepted
} is %(py5)sr£   ©rY   r¿   r\   úassert %(py7)srÑ   )éð  zfirst message must be hellorW   ©z.%(py2)s
{%(py2)s = %(py0)s.closed
} == %(py5)s)r   r    r5   r   r"   r_   r`   ra   rb   rc   rd   re   rf   r#   )r£   rÉ   rh   r¦   rÊ   rÖ   s         r&   r¯   z6test_rejects_non_hello_first_message.<locals>.scenarioŸ   s,  è è € Ý!‘O”Oˆ	ØÔ ×$Ò$¨kÀQÐ%GÐ%GÑHÔHÐHÐHÐHÐHÐHÐHÐHÝ˜yÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆyÑ)Ô)Ð)Õ)Ô)ˆyÑ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐHÐ#HÐHÐÐ#HÒHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐÐ#HÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆyÑHÔHÐHÕHÔHˆyÑHÔHÐHÐHÕHÔHÐÑHÔHÕHÔHÐ#HÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHr(   r=   )rD   )r¯   s    r&   Ú$test_rejects_non_hello_first_messagerß   ž   s1   € ðIð Ið Ið Iõ ˆˆ‰
Œ
�O„O€O€O€Or(   c                óZ   — t          | ¦  «         dd„}t           |¦   «         ¦  «         d S )Nr   r   c               “  óŒ  K  — t          ¦   «         } | j                             ddddddœ¦  «        ƒ d {V —† t          | ¦  «        ƒ d {V —† | 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}|t          v}|s¦t          j        d|fd|t          f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nrr   rI   zwrong-tokenrs   ú0.2.1rt   )rÝ   zunauthorized devicerW   rÞ   r£   rÛ   rÜ   rÑ   ©únot in©z%(py1)s not in %(py3)sr   ©rZ   r[   úassert %(py5)sr\   )r   r    r5   r   r#   r_   r`   ra   rb   rc   rd   re   rf   r   )	r£   rÉ   rh   r¦   rÊ   rÖ   r¥   rg   Ú@py_format4s	            r&   r¯   z3test_rejects_invalid_device_token.<locals>.scenario¬   s3  è è € Ý!‘O”Oˆ	ØÔ ×$Ò$àØ.Ø -Ø,Ø#ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ˜yÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐ@Ð#@Ð@ÐÐ#@Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@ÐÐ#@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆyÑ@Ô@Ð@Õ@Ô@ˆyÑ@Ô@Ð@Ð@Õ@Ô@ÐÑ@Ô@Õ@Ô@Ð#@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø Ð/Ð ­Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð ­Ð/Ñ/Ô/Õ/Ô/Ð Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/­Ñ/Ô/Ð/Õ/Ô/­Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r(   r=   ©rQ   rD   )rJ   r¯   s     r&   Ú!test_rejects_invalid_device_tokenrê   ©   s;   € Ý˜(Ñ#Ô#Ð#ð0ð 0ð 0ð 0õ ˆˆ‰
Œ
�O„O€O€O€Or(   c                ól   ‡— t          | ¦  «         	 ddd	„Šdˆfd„}t           |¦   «         ¦  «         d S )Núpi-session-1Ú
event_namer:   Ú
session_idÚvaluesr   r   r   c                ó$   — t          d| ||ddœ|¤ŽS )Nz/tmp)Úeventrî   rÇ   ÚcwdrA   r   )rí   rî   rï   s      r&   Úpi_event_valuezXtest_selected_pi_activity_history_and_notification_deduplication.<locals>.pi_event_valueÁ   s6   € õ
 ð 
ØØ!ØØð	
ð 
ð
 ð
ð 
ð 	
r(   r   c               “  ó²  •K  — t          ¦   «         } t          ddd| ¬¦  «        t          d<   t          j         ‰d¦  «        ¦  «         t          j         ‰d¦  «        ¦  «         t          j         ‰ddd	¬
¦  «        ¦  «         t          j         ‰dd¦  «        ¦  «         t          dt          d¬¦  «        ¦  «        ƒ d {V —†}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d	}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰dddd¬
¦  «        d¦  «        ƒ d {V —† | j        }|j        } |¦   «         }	|	sžddt%          j        ¦   «         v st          j        | ¦  «        rt          j	        | ¦  «        ndt          j	        |¦  «        t          j	        |¦  «        t          j	        |	¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	t!           ‰dd d!d"¬#¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}
d$d%d&d'd d!|
d(         d)œ}|
|k    }|s—t          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}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d/         }d0}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d/}||v}|s—t          j        d1|fd2||f¦  «        t          j	        |¦  «        d3t%          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd3d4œz  }d,d-|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t!           ‰d¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —† t!           ‰d.d¬5¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}|d/         }d6}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t!           ‰d.¦  «        d¦  «        ƒ d {V —† t          j        | j                             ¦   «         d¦  «        ƒ d {V —†}d/}||v}|s—t          j        d1|fd2||f¦  «        t          j	        |¦  «        d7t%          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd7d4œz  }d,d-|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|d8         }d9}||k    }|slt          j        d|fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S ):NrI   rs   râ   )rK   rw   rx   r£   Úsession_startÚagent_startÚactivityÚtextzrecent output tail)Úactivity_typer÷   zpi-session-2zpi:pi-session-1)r…   Ú	deliveredTr‡   r‰   r|   r~   r   ry   ru   Úagent_staterW   r{   Úrecent_textznot selectedzunit-test-pi-tokenzZassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.sent
}.empty
}()
}r£   )rY   r¿   r}   r   ÚtoolzRunning
pytest -qÚbash)rù   r÷   Ú	tool_nameÚagent_activityÚpizagent:pi:pi-session-1rì   Ú
updated_at)ru   Úagentr…   rî   rù   r÷   r  )z%(py0)s == %(py3)s)rY   r[   rç   r\   Ú	agent_endr¬   r�   rã   rå   Ú	duplicateræ   )Úfailedr  Úduplicate_failedÚstateÚFAILED)r   r   r   r   Úapplyr   r
   r_   r`   rd   re   rf   r   rž   r!   r.   r   Úemptyra   rb   rc   )r£   Úselectedr¥   r¦   rg   r§   r¨   r…   rÉ   r®   r÷   rè   rÊ   r�   r  r  r  ró   s                    €r&   r¯   zRtest_selected_pi_activity_history_and_notification_deduplication.<locals>.scenarioÎ   sÇ  øè è € Ý!‘O”Oˆ	Ý%+Ø'Ø%ØØð	&
ñ &
ô &
�Ð!Ñ"õ 	Ô˜.˜.¨Ñ9Ô9Ñ:Ô:Ð:ÝÔ˜.˜.¨Ñ7Ô7Ñ8Ô8Ð8ÝÔØˆNØ¨&Ð;Oðñ ô ñ	
ô 	
ð 	
õ
 	Ô˜.˜.¨¸.ÑIÔIÑJÔJÐJå&Ø�Ð6GÐHÑHÔHñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ˜Ô$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ÝÔ'¨	¬×(:Ò(:Ñ(<Ô(<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØ�fŒ~Ð. Ð.ˆ~ Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ~ Ð.Ñ.Ô.Õ.Ô.ˆ~Ñ.Ô.Õ.Ô. Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø�mÔ$Ð<Ð(<Ð<Ð$Ð(<Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð$Ð(<Ð<Ñ<Ô<Õ<Ô<Ð$Ñ<Ô<Õ<Ô<Ð(<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<åØˆNØØØ$Ø'ð	ñ ô ð !ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Œ~Ð%ˆ~Ô#Ð%Ð#Ð#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆyÑ%Ô%Ð%Õ%Ô%ˆyÑ%Ô%Ð%Ð%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô%Ð#Ñ%Ô%Õ%Ô%Ð%Ñ%Ô%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%åØˆNØØ$Ø-Ø ð	ñ ô ð !ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ !Ô)¨)¬.×*<Ò*<Ñ*>Ô*>ÀÑBÔBÐBÐBÐBÐBÐBÐBˆà$¨tØ-Ø(Ø#Ø,Ø" <Ô0ð
ð 
ð 	
ˆxð 
ò 
ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆxð 
ð 	
ñ 	
ô 	
ð 	
õ 	
ô 
ñ	
ô 	
ð 	
ð 	
õ 	
ìð ñ 	
ô 	
ð 	
õ 	
ô 
ð ñ 	
ô 	
ð 	
ð 	
õ 	
ô 
ð
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ �~�~ kÑ2Ô2Ð4HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝÔ% i¤n×&8Ò&8Ñ&:Ô&:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ˆØ�NÔ#Ð- vÐ-Ð# vÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð# vÐ-Ñ-Ô-Õ-Ô-Ð#Ñ-Ô-Õ-Ô- vÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ý�~�~ kÑ2Ô2Ð4HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝ!Ô*¨9¬>×+=Ò+=Ñ+?Ô+?ÀÑCÔCÐCÐCÐCÐCÐCÐCˆ	ØÐ.ˆ~ YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ~ YÐ.Ñ.Ô.Õ.Ô.ˆ~Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.å�~�~ mÑ4Ô4Ð6JÑKÔKÐKÐKÐKÐKÐKÐKÐKÝÔ˜yœ~×1Ò1Ñ3Ô3°QÑ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ÝØˆN˜;¨tÐ4Ñ4Ô4Ð6Jñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ Ô'¨	¬×(:Ò(:Ñ(<Ô(<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØ�nÔ%Ð1¨Ð1Ð%¨Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð%¨Ð1Ñ1Ô1Õ1Ô1Ð%Ñ1Ô1Õ1Ô1¨Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ÝØˆN˜;Ñ'Ô'Ð)=ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ")Ô!1°)´.×2DÒ2DÑ2FÔ2FÈÑ!JÔ!JÐJÐJÐJÐJÐJÐJÐØÐ5ˆ~Ð%5Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5ˆ~Ð%5Ð5Ñ5Ô5Õ5Ô5ˆ~Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5Ð%5Ñ5Ô5Ð5Õ5Ô5Ð%5Ñ5Ô5Ð5Ð5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ø Ô(Ð4¨HÐ4Ð(¨HÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð(¨HÐ4Ñ4Ô4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨HÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r(   )rì   )rí   r:   rî   r:   rï   r   r   r   r=   ré   )rJ   r¯   ró   s     @r&   Ú@test_selected_pi_activity_history_and_notification_deduplicationr  ¾   sk   ø€ Ý˜(Ñ#Ô#Ð#ð )ð
ð 
ð 
ð 
ð 
ðK5ð K5ð K5ð K5ð K5ð K5õZ ˆˆ‰
Œ
�O„O€O€O€Or(   )rB   r   r   r   r=   )rI   )rJ   r   rK   r:   r   r:   )rn   ro   rJ   r   r   r   )rJ   r   r   r   ).Ú
__future__r   Úbuiltinsra   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter_   r   r¸   Útypingr   rÓ   Úfastapir   r   Údevice_gateway.appr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rŸ   Údevice_gateway.integrations.pir   r   rD   rH   rQ   rm   rË   rØ   rß   rê   r  rA   r(   r&   ú<module>r     s<  ðØ "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø €€€Ø Ð Ð Ð Ð Ð à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ :Ð 9Ð 9Ð 9Ð 9Ð 9ð%ð %ð %ð %ð %ñ %ô %ð %ð.ð ð ð ð!ð !ð !ð !ð
	ð 	ð 	ð 	ð 	ð^ð ^ð ^ð ^ðFtð Ftð Ftð FtðR*ð *ð *ð *ðð ð ð ðð ð ð ð*]ð ]ð ]ð ]ð ]ð ]r(   