
    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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
j0                  j3                  dedz        Zg ZdZeeuZeZerej>                  Z dZ!e e!uZ"e"ZesB ejF                  defd	eef      d
 ejH                         v s ejJ                  e      r ejL                  e      nd
 ejL                  e      dz  Z'dde'iz  Z(ejS                  e(       er ejF                  de"fde e!f      d
 ejH                         v s ejJ                  e      r ejL                  e      nd
 ejL                  e        ejL                  e!      dz  Z*dde*iz  Z+ejS                  e+        ejX                  ed       i z  Z-dde-iz  Z. e/ ej`                  e.            dxZxZxZxZxZ xZ"Z!e
j0                  jc                  e      Z2ej>                  jg                  e2        ed      Z4ej,                  Z5d"dZ6ddd#dZ7d$dZ8d%dZ9d&dZ:d&dZ;ejx                  j{                  dg d      	 	 	 	 	 	 	 	 	 	 d'd       Z>d&d Z?d(d!Z@y))    )annotationsN)datetime)Path)Anypost_claim_adjudicatorzpost_claim_adjudicator.py)is not)z%(py2)s is not %(py5)sSPEC)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16zassert %(py19)spy19z)/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     /home/cube/projects/richard/traning coach/.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   fixturerO      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 rT   r(   r   service_stubrU   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schemar1   )rW   r1   r%   r0   r2   r3   )r   r   adjudicator	canonicalr#   write_bytesr>   r   rB   rC   rD   rE   )r&   rK   payloadrL   s       r   canonical_ledgerr\   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(  }|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}}|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   }t        j                  }
||
k(  }|st        j                  d|fd||
f      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   }t        j                   }
||
k(  }|st        j                  d|fd||
f      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}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}t	        |      }||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                  |      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}t"        j$                  }
 |
|      }||v}|s
t        j                  d|fd ||f      t        j                  |      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#z  }d$d%|iz  }t        t        j                  |            d x}x}x}
}y )&Nsource_semantics_and_servicestatusPASS_SUCCESSFUL_CLAIM==)z%(py1)s == %(py4)s)py1py4zassert %(py6)spy6accepted_role_claim_countr2   consent_publication_countpreparation_ledger_sha256)zA%(py1)s == %(py5)s
{%(py5)s = %(py3)s.PREPARATION_LEDGER_SHA256
}rX   )rc   py3r   zassert %(py7)sr   current_payload_digest)z=%(py1)s == %(py5)s
{%(py5)s = %(py3)s.CURRENT_LEDGER_DIGEST
}token_bindingraw_token_only_private_handoffT)is)z%(py1)s is %(py4)s)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr'   r,   before)py0rc   ri   r   start_token)not in)zO%(py1)s not in %(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s.dumps
}(%(py6)s)
}r?   receipt)rc   ri   r   re   py8zassert %(py10)spy10)rO   setattrrX   rU   r'   
adjudicateEVIDENCE
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationPREPARATION_LEDGER_SHA256@py_builtinslocals_should_repr_global_nameCURRENT_LEDGER_DIGESTr?   rG   )rH   monkeypatchr,   rn   rr   @py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert4@py_format6@py_format8@py_assert7@py_format9@py_format11s                   r   ;test_exact_post_claim_predicate_passes_without_registry_rowr   @   s   hG%C\RwF$$Wh7G87 77 77777 7777777 77777777./414/14444/1444/44414444444./414/14444/1444/44414444444./X;3X3XX/3XXXXX/3XXXX/XXXXXX;XXX;XXX3XXXXXXXX+,Q0Q0QQ,0QQQQQ,0QQQQ,QQQQQQQQQQQQ0QQQQQQQQ?#$DEMMEMMMMEMMMEMMMMMMMMMMW'''''''''''9'''9''''''W'''W'''''''''''''''''''3

3
7 33= 33333= 3333=333333333333
33333373337333 3333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)   r^   z-required no customer registry row, observed 1match)	rO   ru   rX   rU   pytestraisesAdjudicationErrorrv   rw   )rH   r   r,   s      r   :test_live_normal_path_registry_row_fails_requested_absencer   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)Nr^   r-   r      r1   r   
generationr   r2   role_claimsr   i4  customer_draftcalories_kcalr   160consent_card_message_id@0000000000000000000000000000000000000000000000000000000000000000r%   r   )rO   ru   rX   rU   r?   r@   rA   appenddictr   r   r   exact_sessionsrZ   rY   validate_ledger)rH   r   r   r   r,   r&   rK   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)Nr^   zdata/scheduled-deliveries.jsonlT)exist_ok z&activation/checkin/generation/deliveryr   )rO   ru   rX   rU   r:   r;   rF   r   r   r   rv   rw   )rH   r   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(  }|s2t        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                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}x}x}x}}y # 1 sw Y   xY w)Nzreceipt.jsonr_   FAILr`   ra   )z%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.loads
}(%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.read_text
}()
})
} == %(py12)sr?   rr   )ro   r
   ri   r   r   r   py12zassert %(py14)sr   )rX   exclusive_receiptr   r   FileExistsErrorr?   r@   rA   rx   ry   r~   r   r   rz   r{   r|   )
rH   rr   @py_assert1r   @py_assert6@py_assert8@py_assert11@py_assert10@py_format13@py_format15s
             r   $test_receipt_is_append_only_one_shotr      s-   'G!!'Hf+=>		'%%g:Q/RS 
(::@g''@')@:)*@x.@@*.@@@@@*.@@@@@@@4@@@4@@@:@@@@@@g@@@g@@@'@@@)@@@*@@@.@@@@@@@@@ 
(	's   GG)r$   r   returnr   )rH   r   r*   boolr   r   )r   dict[str, Any])r&   r   rK   r   r   None)rH   r   r   pytest.MonkeyPatchr   r   )
rH   r   r   r   r   r   r   r   r   r   )rH   r   r   r   )A
__future__r   builtinsr~   _pytest.assertion.rewrite	assertionrewriterx   r   importlib.util	importlibr?   rD   r<   r   pathlibr   typingr   r   __file__resolver:   HEREutilspec_from_file_locationr	   r   r   r   r   loaderr   @py_assert13@py_assert12ry   r   r   rz   r   r   r   r   @py_format17_format_boolop@py_format18@py_format20r{   r|   module_from_specrX   exec_moduler9   rw   r'   rO   rU   r\   r   r   markparametrizer   r   r   rT   r(   r   <module>r      s   "      	     H~&&~~--.FOjHjk 34 3t4 3DKK 3t 3Kt3 3 3 3t4 3 3 3 3 3t 3 3 3t 3 3 34 3 3 3 3 3 3 3Kt 3 3 3 3 3D 3 3 3D 3 3 3K 3 3t 3 3 3 3 3 3 3 3 3 3 3 3 3nn--d3    $78;; 6; (a'42 	11!31=@1KN1	1	142Ar(   