
    j
                    :   d dl 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	m
Z
 d dlmZ d dlZ e
e      j                         j                   Zej$                  j'                  dedz        Zeej*                  J ej$                  j-                  e      Zej*                  j1                  e        e
d      Zej                   Zdd	Zd
dddZddZddZddZddZ ejB                  jE                  dg d      	 	 	 	 	 	 	 	 	 	 dd       Z#ddZ$ddZ%y)    )annotationsN)datetime)Path)Anypost_claim_adjudicatorzpost_claim_adjudicator.pyz)/home/cube/.hermes/profiles/dualcoachtestc                B   t        j                         }t        d | j                  d      D              D ]X  }|j	                  t        |j                  |             j                                |j	                  |j                                Z |j                         S )Nc              3  B   K   | ]  }|j                         s|  y w)N)is_file).0items     ].omo/evidence/task26/task26-post-claim-adjudicator-st_01a007d9/test_post_claim_adjudicator.py	<genexpr>ztree_hash.<locals>.<genexpr>   s     J4<<>ts   *)
hashlibsha256sortedrglobupdatestrrelative_toencode
read_bytes	hexdigest)rootdigestpaths      r   	tree_hashr      su    ^^FJ

3JJc$**40188:;doo'( K     Fregistry_rowsc                  | dz  }t         dz  }|dz  }|j                  j                  dd       t        j                  ||       |j                  d       t        j                  |j                               }t        j                  |d   d   d	         j                         }t        j                  |||f       |d
z  }|j                  j                  d       t        j                  t         d
z  j                               }|sg |d<   |j                  t        j                  |dd             |j                  d       |S )Nprofile:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonTi  )parentsmode  sessions   
updated_atzcustomers/registry.json)r%   	customers),:)	sort_keys
separators)LIVEparentmkdirshutilcopyfilechmodjsonloads	read_textr   fromisoformat	timestamposutime
write_textdumps)	tmp_pathr    r"   ledger_sourceledgervalueupdatedregistrylive_registrys	            r   fixturerE      s   "GWWMSSF
MM51
OOM6*
LLJJv'')*E$$U:%6q%9,%GHRRTGHHVgw'(22HOOu%JJ'@ @KKMNM%'k"

=DZXYNN5Nr   c                     di g dS )Nzactive/running)servicecandidate_modulesnormal_path_transitions rJ   r   r   service_stubrK   3   s    'b]_``r   c                ~   |d   |d   d}t        j                  t        j                  |            j	                         |d<   | j                  t        j                  |             | j                  d       t        j                  |d   d   d         j                         }t        j                  | ||f       y )Nschemar'   )rM   r'   r   r&   r(   r)   )r   r   adjudicator	canonicalr   write_bytesr4   r   r8   r9   r:   r;   )r   rA   payloadrB   s       r   canonical_ledgerrR   7   s    xeJ6GHGnn[%:%:7%CDNNPE(O[**512JJu$$U:%6q%9,%GHRRTGHHTGW%&r   c                   t        |       }|j                  t        dt               t	        |      }t        j                  |t              }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   t        j                  k(  sJ |d   t        j                  k(  sJ |d	   d
   du sJ t	        |      |k(  sJ dt        j                  |      vsJ y )Nsource_semantics_and_servicestatusPASS_SUCCESSFUL_CLAIMaccepted_role_claim_countr(   consent_publication_countpreparation_ledger_sha256current_payload_digesttoken_bindingraw_token_only_private_handoffTstart_token)rE   setattrrN   rK   r   
adjudicateEVIDENCEPREPARATION_LEDGER_SHA256CURRENT_LEDGER_DIGESTr5   r=   )r>   monkeypatchr"   beforereceipts        r   ;test_exact_post_claim_predicate_passes_without_registry_rowrf   @   s    hG%C\RwF$$Wh7G8 7777./1444./1444./;3X3XXXX+,0Q0QQQQ?#$DEMMMW'''

7 3333r   c                    t        | d      }|j                  t        dt               t	        j
                  t        j                  d      5  t        j                  |t               d d d        y # 1 sw Y   y xY w)NTr   rT   z-required no customer registry row, observed 1match)	rE   r^   rN   rK   pytestraisesAdjudicationErrorr_   r`   )r>   rc   r"   s      r   :test_live_normal_path_registry_row_fails_requested_absencerm   O   sS    hd3G%C\R	{44<k	lw1 
m	l	ls   A22A;)attackmessage))priorzold EXPIRED session changed)claimzaccepted role claim)draftzcustomer draft changed)cardzreplacement final state)r   zbootstrap ledger digestc                   t        |       }|j                  t        dt               |dz  }t	        j
                  |j                               }|dk(  rd|d   d   d<   n_|dk(  r0|d   d	   d
   j                  t        |d   d	   d
   d                n*|dk(  rd|d   d	   d   d<   n|dk(  rd|d   d	   d<   nd|d<   |dk7  rDt        j                  t        j                  |      5  t        j                  |       d d d        y |j                  t        j                  |             t        j                  t        j                  |      5  t        j                  |       d d d        y # 1 sw Y   y xY w# 1 sw Y   y xY w)NrT   r#   rp      r'   r   
generationrq   r(   role_claimsrr   i4  customer_draftcalories_kcalrs   160consent_card_message_id@0000000000000000000000000000000000000000000000000000000000000000r   rh   )rE   r^   rN   rK   r5   r6   r7   appenddictrj   rk   rl   exact_sessionsrP   rO   validate_ledger)r>   rc   rn   ro   r"   r   rA   s          r   1test_unknown_or_mismatched_authority_fails_closedr   V   sq    hG%C\RQQDJJt~~'(E-.j!\*	7	j!]+224j8I!8L]8[\]8^3_`	7	BFj!-.?	6	:?j!67"h]];88H&&u- IH 	..u56]];88H''0 IH	 IH IHs   )E0E<0E9<Fc                \   t        |       }|j                  t        dt               |dz  }|j                  j                  d       |j                  d       t        j                  t        j                  d      5  t        j                  |t               d d d        y # 1 sw Y   y xY w)NrT   zdata/scheduled-deliveries.jsonlT)exist_ok z&activation/checkin/generation/deliveryrh   )rE   r^   rN   rK   r0   r1   r<   rj   rk   rl   r_   r`   )r>   rc   r"   	forbiddens       r   +test_activation_or_delivery_authority_failsr   z   s    hG%C\R;;ID)	{44<d	ew1 
f	e	es   >B""B+c                   | dz  }t         j                  |ddi       t        j                  t              5  t         j                  |ddi       d d d        t        j                  |j                               ddik(  sJ y # 1 sw Y   4xY w)Nzreceipt.jsonrU   FAILrV   )rN   exclusive_receiptrj   rk   FileExistsErrorr5   r6   r7   )r>   re   s     r   $test_receipt_is_append_only_one_shotr      sv    'G!!'Hf+=>		'%%g:Q/RS 
(::g'')*x.@@@@ 
(	's   BB)r   r   returnr   )r>   r   r    boolr   r   )r   dict[str, Any])r   r   rA   r   r   None)r>   r   rc   pytest.MonkeyPatchr   r   )
r>   r   rc   r   rn   r   ro   r   r   r   )r>   r   r   r   )&
__future__r   r   importlib.util	importlibr5   r:   r2   r   pathlibr   typingr   rj   __file__resolver0   HEREutilspec_from_file_locationSPECloadermodule_from_specrN   exec_moduler/   r`   r   rE   rK   rR   rf   rm   markparametrizer   r   r   rJ   r   r   <module>r      s)   "    	     H~&&~~--.FOjHjkDKK3 33nn--d3    $78;; 6; (a'42 	11!31=@1KN1	1	142Ar   