
    jKj                     t   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m	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d d	lmZ  ed
       e G d d             Zd d d d d d dZ e ej0                  d      d      d        Z edd      d        Z e ej0                  d            d        Z edd      d        Z ed       d!        Z ed"      d#        Z ed$      d%        Z ed&      d'        Z  ed(      d)        Z! ed*d+      d,        Z" ed-d.      d/        Z# ed0      d1        Z$y)2    N)	ExitStack)	dataclassDecimalUUID)mock)givenparsers	scenariosthenwhen)utils)FeatureFlagResultzfeatures/utils.featurec                   "    e Zd ZU eed<   eed<   y)AcceptancePayloadMetadatasourcesample_rateN)__name__
__module____qualname__str__annotations__r        s/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/test/test_utils_acceptance.pyr   r      s    Kr   r   c                      t        d      S )N 12345678123456781234567812345678r   r   r   r   <lambda>r      s
    D;<r   c                      t        d      S )Nz12.34r   r   r   r   r   r      s	    ww'r   c                  .    t        dt        d            S )Ncheckoutz0.5)r   r   )r   r   r   r   r   r   r      s    2ENr   c                       y)N)paidbetar   r   r   r   r   r      s    %r   c                       y)Ns   hellor   r   r   r   r   r      s    Xr   c                      d S )Nc                       y Nr   r   r   r   r   z<lambda>.<locals>.<lambda>    s    4r   r   r   r   r   r   r       s    <r   )uuiddecimalr   tuplebytesunsupportedz)an SDK payload value of type {value_type}payload)target_fixturec                 &    ddt        |           idS )Nzplan upgradedvalue)event
properties)PAYLOAD_VALUE_FACTORIES)
value_types    r   sdk_event_payloadr7   $   s"    
 ! 7
 C EF r   z the SDK cleans the event payloadcleaned_payloadc                 ,    t        j                  |       S r)   )r   clean)r/   s    r   clean_event_payloadr;   .   s    ;;wr   z0the cleaned payload value equals {expected_json}c                 n    | d   d   t        j                  |      k(  sJ t        j                  |        y )Nr4   r2   )jsonloadsdumps)r8   expected_jsons     r   cleaned_payload_value_equalsrA   3   s/    <(1TZZ5NNNNJJr   z+a cached feature flag evaluation for a userflag_cache_statec                      t        j                  dd      } t        j                  ddddi      }| j	                  dd|d	
       | |dS )N
   <   )max_sizedefault_ttlcheckout-redesignTvarianttestuser-123   )flag_definition_versioncacheflag_result)r   	FlagCacher   from_value_and_payloadset_cached_flagrN   s     r   cached_feature_flag_evaluationrT   9   s^    OORR8E#::	FK
 
 !	   ;77r   z?the SDK reads the cached flag for current and newer definitionsc                 j    | d   }|j                  ddd      | d<   |j                  ddd      | d<   y )	NrO   rK   rH   rL   current_flag_versioncurrent_result   newer_resultget_cached_flag)rB   rO   s     r   read_cached_flag_versionsr]   J   sW    W%E).)>)> *? *%&
 (-'<'< (= (^$r   z6the current flag definition uses the cached evaluationc                 n    | d   }|| d   u sJ |j                         du sJ |j                  ddik(  sJ y )NrX   rP   TrI   rJ   )	get_valuer/   )rB   rX   s     r   )current_definition_uses_cached_evaluationr`   Y   sQ    %&67N-m<<<<##%---!!i%8888r   z*the newer flag definition misses the cachec                     | d   J y )NrZ   r   rB   s    r   newer_definition_misses_cacherc   a   s    N+333r   z&the old flag definition is invalidatedc                 ,    | d   j                  d       y )NrO   rL   )invalidate_versionrb   s    r   invalidate_old_flag_definitionrf   f   s    W003r   z the cached evaluation is removedc                 8    | d   j                  ddd      	 J y )NrO   rK   rH   rL   rV   r[   rb   s    r   cached_evaluation_is_removedrh   k   s9     	!11!" 	2 	

 		r   z=the SDK is running on a Linux host with distribution metadatalinux_host_contextc               #      K   t         j                  j                  t        j                  dd      t         j                  j                  t        j
                  dd      t         j                  j                  t        j                  dddi      t         j                  j                  t        j                  d	d
      g} t               5 }| D ]  }|j                  |        d  d d d        y # 1 sw Y   y xY ww)Nplatformlinuxpython_implementationCPython)return_valueinfoversion24.04nameUbuntu)	r	   patchobjectr   sysrk   distror   enter_context)patchesstackru   s      r   %linux_host_with_distribution_metadatar|   w   s      	

%))Z9

NN3) 	 	
 	

%,,i=QR

%,,XFG 
E&  
s   C
C>C2)	C>2C;7C>zthe SDK builds system contextsystem_contextc                 *    t        j                         S r)   )r   r}   )ri   s    r   build_system_contextr      s    !!r   z6the context includes Python runtime and Linux metadatac                     | dt         j                  d    dt         j                  d    dt         j                  d    dddd	k(  sJ y )
Nrn   r   .rL   rY   Linuxrr   rt   )z$python_runtimez$python_versionz$osz$os_versionz
$os_distro)rw   version_info)r}   s    r   2context_includes_python_runtime_and_linux_metadatar      s^    $!..q12!C4D4DQ4G3H#JZJZ[\J]I^_   r   )%r=   rw   
contextlibr   dataclassesr   r+   r   r*   r   unittestr	   
pytest_bddr
   r   r   r   r   posthogr   posthog.typesr   r   r5   parser7   r;   rA   rT   r]   r`   rc   rf   rh   r|   r   r   r   r   r   <module>r      s    
   !    < <  + 	
" #    =' &'
  GMM=>y (9JK  L  mgmmFGH  I 
 4EWX8 Y8  GH I >?9 @9 234 44 ./4 04 () * C'	 %6FG" H" >? @r   