
    jW                    
   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Zd dlZd dlZd dlmZ d dlZ ee      j$                  Zedz  Ze	j*                  j-                  de      Zg ZeZerej4                  ZeZesddd ej8                         v s ej:                  e      r ej<                  e      ndiz  ZejA                  e       er`d	d ej8                         v s ej:                  e      r ej<                  e      nd ej<                  e      d
z  Z!ejA                  e!        ejD                  ed       i z  Z#dde#iz  Z$ e% ejL                  e$            dxZxZZe	j*                  jO                  e      Z(e(ejR                  ejT                  <   ej4                  jW                  e(       ddZ,ddZ-ddZ.dddZ/ddZ0d dZ1ejd                  jg                  dg d      d!d       Z4d dZ5d dZ6d dZ7d dZ8y)"    )annotationsN)Pathzconsent_observer.pyconsent_observerz%(py2)spy2SPECz#%(py6)s
{%(py6)s = %(py4)s.loader
})py4py6assert %(py9)spy9c                    | j                  d| j                   d      }|j                  t        j                  |dd             |j                  d       t        j                  ||        y )N.z.nextT),:)	sort_keys
separatorsi  )	with_namename
write_textjsondumpschmodosreplace)pathvaluetmps      {/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-consent-observer-st_01a007da/test_consent_observer.pyatomicr      sP    
..1TYYKu-
.CNN4::et
KLIIeJJsD    c                    i dt         j                  dt         j                  dt         j                  t         j                  dddddd	d
dddddddddt         j
                  ddt         j                  t         j                  t         j                  t         j                  dgdddt         j                  dddg dd S )N
session_idsid_hashcustomer_draft)customer_keycustomer_user_idcustomer_draft_digest@ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddbot_usernamedual_coach_pilot_test_botstateAWAITING_CONSENT
generation   
created_atx
updated_at
expires_atowner_idrole_claimscustomer)roleuser_idchat_idtopic_id
message_idconsent_publication_attempt   consent_card_message_idrecovery_attempt_generationrecovery_attemptsfailure_code)
observer
SESSION_IDSID_HASHCUSTOMER_KEYACTOR_IDOWNER_IDCHAT_IDTOPIC_IDCLAIM_MESSAGE_IDCARD_MESSAGE_ID r   r   ledger_sessionrK      s4   h))+5x7H7H8+@+@V^VgVgh 	  ,:;V 	#	 &21	 7CC	 JVWZ	
 	c
 &x'8'8 	8I8I$,$4$4(BSBS'/'@'@B C 	&q +DXE]E] 	&q +>r DRSW r   c                B    d| d}i |dt         j                  |      iS )Nztelegram-customer-bootstrap-v1)schemasessionsdigest)r@   digest_json)rowspayloads     r   ledgerrS   +   s)    9tLG?g?x!5!5g!>??r   c                    ddd t         j                  t         j                  ddt         j                  dt         j                  t         j                  t         j
                  d| | rdnd | rdnd dd	gd
S )Nr;   ordinary_v10)r6   r7   r8   Fz
2026-08-16z
privacy-v1)grantedrecorded_onnotice_version)r$   enabledtelegramai_processing_consent)versionregistry_modediagnostic_session_digestowner	customers)r@   rE   rC   rD   rF   rG   )rW   s    r   registryrb   0   sz    =W[!)!2!2x?P?P^ab+3+@+@U(0(9(9hFVFV)1):):<5<3:<6=l4*IJ KL Lr   c                B   | dz  }|dz  j                  d       |dz  j                  d       ||dz  |dz  |dz  |dz  fD ]  }|j                  d        t        |d	z  t                      t        |t        j
                  z  t        t               g             |S )
Nprofilera   T)parentsz.data/onboarding/telegram-customer-bootstrap-v1datazdata/onboardingi  customers/registry.json)mkdirr   r   rb   r@   LEDGER_RELATIVErS   rK   )tmp_pathrootr   s      r   rd   rd   ;   s    iD	Kt,	<<CCDCQtk)4&=$AR:RHHJ

5J 4++XZ8
4(***FN4D3E,FGKr   c                   t        |       }t        j                  |d      }|j                  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}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}|j                  }t        j                  }	||	k(  }|st	        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}}	y )NFenforce_runtimer,   r-   ==z%(py1)s == %(py4)spy1r   assert %(py6)sr	   r<   159)zs%(py2)s
{%(py2)s = %(py0)s.expected_consent_receipt_sha256
} == %(py6)s
{%(py6)s = %(py4)s.CONSENT_RECEIPT_SHA256
}baseliner@   )py0r   r   r	   zassert %(py8)spy8)rd   r@   arm_baselinesession
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationexpected_consent_receipt_sha256CONSENT_RECEIPT_SHA256@py_builtinslocals_should_repr_global_name)rj   rk   rv   @py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert1@py_assert5@py_format9s              r   4test_baseline_seals_exact_current_callback_authorityr   G   sl   8D$$T5$AHL).Q.)Q....)Q...)...Q.......56?%?6%????6%???6???%???????33Vx7V7VV37VVVVV37VVVVVVV8VVV8VVV3VVVVVVxVVVxVVV7VVVVVVVVr   zfield,value))r*   ACTIVE)r,      )r<   160c                $   t        |       }t               }|||<   t        |t        j                  z  t        |g             t        j                  t        j                        5  t        j                  |d       d d d        y # 1 sw Y   y xY w)NFrm   )
rd   rK   r   r@   ri   rS   pytestraisesObserverErrorry   )rj   fieldr   rk   rows        r   #test_rejects_stale_consent_baseliner   O   sk     8D

CCJ
4(***FC5M:	x--	.dE: 
/	.	.s   %BBc                H	   t        |       }| dz  }| dz  }t        j                         \  }}t        j                  dt        t              ddt        |      dt        |      dt        |      dd	d
dt        |      g}t        j                  ||ft        j                  t        j                  d      }t        j                  |       t        j                  t        j                  |d            }t        j                  |       |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z  t)        d             t+               }|j-                  ddd dd       t'        |t.        j0                  z  t3        |g             |j5                  d      \  }}|j6                  }d}||k(  }
|
st        j                  d|
fd||f      dt9        j:                         v st        j<                  |      rt        j                   |      ndt        j                   |      t        j                   |      d z  }t        j>                  |      d!z   d"|iz  }t#        t        j$                  |            d x}x}
}t        j                  |jA                               }|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&}
|	|
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                  |jC                         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}}
y )(N
ready.jsonreceipt.json-Bobserve	--profile--ready	--receipt	--timeout3--skip-runtime-hashesz
--ready-fdT)pass_fdsstdoutstderrtexti   statusREADY_BEFORE_CONSENTro   rq   rr   rt   r	   rg   AWAITING_ACTIVATIONr   y)r*   r,   r<   r0   r-   )timeoutr   z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sprocrw   r   py5
>assert %(py7)spy7PASS_CONSENT_COMMITTEDcallback_authorityr9   ru   )"rd   r   pipesys
executablestrHARNESS
subprocessPopenPIPEcloser   loadsreadr{   r|   r}   r~   r   r   rb   rK   updater@   ri   rS   communicate
returncoder   r   r   _format_assertmsg	read_text
splitlines)rj   rk   readyreceiptread_fdwrite_fdcmdr   
ready_wirer   r   r   r   r   r   r   r   r   @py_assert4@py_format6@py_format8results                         r   >test_event_first_observes_registry_then_exact_bootstrap_commitr   Z   s5   8D|#E'G	GX>>4Wy+s4yc%j+s7|[#"L#h-AC C8+joo#-???DHHXBGGGT23JHHWh9#99#99999#9999999#99999999
4++Xd^<

CJJ.aCGWZ\ ]
4(***FC5M:%%a%0NFF??'a'?a'''?a''''''4'''4'''?'''a''''''''''ZZ))+,F(77777777777777777777777&'5>>5>>>>5>>>5>>>>>>>>>>::f'')"-.x8T<TT8<TTTTT8<TTTT8TTT<TTTTTTTTr   c                ,   t        |       }t        j                  |d      }t        d      }d|d   d   d   d<   t	        j
                  t        j                        5  t        j                  |j                  |       d d d        t               }|j                  d	d
d d       t	        j
                  t        j                        5  t        j                  |j                  t        |g             d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NFrm   T9ra   r   r[   r7   r      )r*   r,   r<   )rd   r@   ry   rb   r   r   r   validate_registry_transitionrK   r   validate_ledger_transitionrS   )rj   rk   basewrongr   s        r   8test_wrong_registry_or_bootstrap_transition_fails_closedr   u   s    8D  u =DTNE36E+q*%i0	x--	.--dmmUC 
/

CJJ.aCGI J	x--	.++DKKG 
/	. 
/	.
 
/	.s   !C>
+D
>D
Dc                   t        |       }t        j                  |      }| dz  }t        j                  t
        j                  dt        t              ddt        |      dt        |      dg	ddd	      }|j                  }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                   |j"                        dz   d|iz  }	t%        t        j&                  |	            d x}x}}t)        j*                  |j-                               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                  } ||      }||k(  }|s7t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      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}x}}y )Nzarm.jsonr   zarm-onlyr   r   r   TFr   capture_outputcheckr   ro   r   r   r   r   r   r   r   rq   rr   rt   r	   )zQ%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.tree_digest
}(%(py3)s)
} == %(py7)sr@   rk   before)rw   r   py3r   r   r
   r   )rd   r@   tree_digestr   runr   r   r   r   r   r{   r|   r   r   r   r}   r   r   r~   r   r   r   r   )rj   rk   r   r   r   r   r   r   r   r   r   r   r   r   @py_assert6@py_format10s                   r   :test_arm_only_emits_ready_receipt_without_profile_mutationr      s   8D!!$'F#G^^S^^T3w<SYS\;RT$e5F 00!000000000600060000000006==0000000::g'')*84N8NN48NNNNN48NNNN4NNN8NNNNNNNN/%/%////%//////8///8///////////////%////////////////r   c                   t        |       }t        j                  t        j                  dt        t              ddt        |      dt        | dz        dt        | dz        dd	d
gddd      }|j                  }d}||k(  }|st        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}|j                   }||v }	|	st        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}	}y )Nr   r   r   r   r   r   r   r   z0.03r   TFr      ro   r   r   r   zassert %(py7)sr   zmonotonic deadline expired)in)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stderr
})rs   r   r   )rd   r   r   r   r   r   r   r   r{   r|   r   r   r   r}   r~   r   r   )
rj   rk   r   r   r   r   r   r   r   r   s
             r   'test_timeout_is_bounded_without_pollingr      sJ   8D^^S^^T3w<SY	3x,/F+GSN23[&! (,DOF !!!!!!!!!!!!6!!!6!!!!!!!!!!!!!'86==8'=8888'=888'88888868886888=8888888r   )r   r   r   objectreturnNone)r   dict[str, object])rQ   zlist[dict[str, object]]r   r   )F)rW   boolr   r   )rj   r   r   r   )rj   r   r   r   )rj   r   r   r   r   r   r   r   )9
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter{   importlib.util	importlibr   r   r   r   pathlibr   r   __file__parentHEREr   utilspec_from_file_locationr   r   r   loaderr   r   r   r}   @py_format3appendr   _format_boolopr   r   r~   r   module_from_specr@   modulesr   exec_moduler   rK   rS   rb   rd   r   markparametrizer   r   r   r   r   rJ   r   r   <module>r     ss   "      	  
  H~
&
&~~--.@'J t t      t   t    t                     >>**40!DII     !@
L	W  )O P;P;U6H	09r   