
    Zi%                        d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlm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 dZdZ G d dej8                        Z G d dej8                        Zy)    N)	dataclass)datedatetime	timedelta)Decimal)Optional)UUID)tzutc)parameterized)	BaseModel)utils)FeatureFlagResult+kOOlRy2QlMY9jHZQv0bKz0FZyazBUoY8Arj0lFVNjs4
random_keyc                       e Zd Z ej                  ddg      dedefd       Zd Zd Z	d Z
d	 Zd
 Z ej                  g d      d        Zd ZddZd Zy)	TestUtils)znaive datetime should be naiveT)z+timezone-aware datetime should not be naiveF_nameexpected_naivec                     |rt        j                         }nt        j                  t                     }t        j                  |      |u sJ y )Ntz)r   nowr
   r   is_naive)selfr   r   dts       a/mnt/e/genesis-system/.venvs/browser-army/lib/python3.12/site-packages/posthog/test/test_utils.pytest_is_naivezTestUtils.test_is_naive   s9     B)B~~b!^333    c                     t        j                         }t        j                  t                     }t        j                  |      }t        j
                  |      du sJ t        j                  |      }||k(  sJ y )Nr   F)r   r   r
   r   guess_timezoner   )r   r   utcnowfixedshouldnt_be_editeds        r   test_timezone_utilszTestUtils.test_timezone_utils&   sd    lln)$$S)~~e$---"11&9++++r   c           
         t        d      t        j                  d      t        j                         dddddd d	}t        d      t        d	
      g dd}t        |j                               }|j                  |j                                |j                         }t        j                  |       |j                         |k(  sJ t        j                  t        d            dk(  sJ y )Nz0.142857wooi    g       @T)	decimalunicoder   longintegerfloatboolstrnonezThis should show up   )microseconds)r'         )	exceptionr   list 12345678123456781234567812345678$12345678-1234-5678-1234-567812345678)r   sixur   r   	Exceptionr   dictitemsupdatekeysr   cleanr	   )r   simplecomplicatedcombinedpre_clean_keyss        r   
test_cleanzTestUtils.test_clean0   s    z*uuU|LLN

 ##89"3
 '))+,!H}}.000 KK?@A56	
6r   c                     t        ddd      t        j                  t                     d}|t	        j
                  |      k(  sJ y )Ni  r'   r   )	birthdateregistration)r   r   r   r
   r   r?   )r   dict_with_datess     r   test_clean_with_dateszTestUtils.test_clean_with_datesQ   s<    dAq)$LLEG4
 %++o">>>>r   c                 x    t        d      }t        j                  |       t        j                  |      dk(  sJ y )N
   z
          )bytesr   r?   )r   items     r   
test_byteszTestUtils.test_bytesX   s/    RyD{{4 $NNNNr   c                 J    t        j                  d dd      }|d ddk(  sJ y )Nc                     | S N )xs    r   <lambda>z)TestUtils.test_clean_fn.<locals>.<lambda>^   s    q r      )fnnumberr   r?   )r   cleaneds     r   test_clean_fnzTestUtils.test_clean_fn]   s(    ++[A>?3333r   ))zhttp://posthog.io/http://posthog.io)r[   r[   )zhttps://example.com/path/https://example.com/path)r\   r\   c                 8    |t        j                  |      k(  sJ y rQ   )r   remove_trailing_slash)r   	input_urlexpected_urls      r   test_remove_slashzTestUtils.test_remove_slasha   s     u::9EEEEr   c           	          G d dt                G d dt              } G fddt               }t        j                   dd	            ddd d
k(  sJ t        j
                  dk  r%t        j                   |dd	            ddd	k(  sJ t        j                   | ddd
                  ddddd
ik(  sJ y )Nc                   6    e Zd ZU eed<   eed<   dZee   ed<   y).TestUtils.test_clean_pydantic.<locals>.ModelV2foobarNbaz)__name__
__module____qualname__r.   __annotations__intrg   r   rR   r   r   ModelV2rd   m   s    HH!%C#%r   rm   c                   "    e Zd ZU eed<   eed<   y).TestUtils.test_clean_pydantic.<locals>.ModelV1re   rf   N)rh   ri   rj   rl   rk   r.   rR   r   r   ModelV1ro   r   s    HHr   rp   c                       e Zd ZU W  ed<   y)2TestUtils.test_clean_pydantic.<locals>.NestedModelre   N)rh   ri   rj   rk   )rm   s   r   NestedModelrr   v   s    Lr   rs   1r2   )re   rf   )re   rf   rg   )r3      r'   23)re   re   )r   BaseModelV1r   r?   sysversion_info)r   rp   rs   rm   s      @r   test_clean_pydanticzTestUtils.test_clean_pydanticl   s    	&i 	&
	k 		) 	 {{7s238
 
 	
 
 g%;;w1#671S;QQQQ{{;7ss+KLM3q5R
 
 	
 
r   Nc                 ^     G d d      }t        j                  d |       i      dd ik(  sJ y )Nc                       e Zd ZdedefdZy)7TestUtils.test_clean_pydantic_like_class.<locals>.Dummyrequired_paramreturnc                     i S rQ   rR   )r   r   s     r   
model_dumpzBTestUtils.test_clean_pydantic_like_class.<locals>.Dummy.model_dump   s    	r   N)rh   ri   rj   r.   r;   r   rR   r   r   Dummyr~      s      r   r   testrX   )r   r   s     r   test_clean_pydantic_like_classz(TestUtils.test_clean_pydantic_like_class   s0    	 	 {{FEG,-&$???r   c                    t          G d d             t          G fdd             }t        j                   |dd ddt        d	      t	        d
dd                        dddddt	        d
dd      d ddk(  sJ y )Nc                   J    e Zd ZU eed<   eed<   eed<   eed<   dZe	e   ed<   y)6TestUtils.test_clean_dataclass.<locals>.InnerDataClass	inner_foo	inner_bar
inner_uuid
inner_dateNinner_optional)
rh   ri   rj   r.   rk   rl   r	   r   r   r   rR   r   r   InnerDataClassr      s&    NN  ,0NHSM0r   r   c                   0    e Zd ZU eed<   eed<   W  ed<   y)5TestUtils.test_clean_dataclass.<locals>.TestDataClassre   rf   nestedN)rh   ri   rj   r.   rk   rl   )r   s   r   TestDataClassr      s    HH""r   r   rt   r2   rw   rU   r6   i  r'   )r   r   r   r   )re   rf   r   r7   )r   r   r   r   r   )r   r   r?   r	   r   )r   r   r   s     @r   test_clean_dataclasszTestUtils.test_clean_dataclass   s    		1 	1 
	1 
	# 	# 
	#
 {{%!#$FG'a3		
  D&tQ2"&


 	
 
r   )r   N)rh   ri   rj   r   expandr.   r-   r   r$   rD   rI   rN   rZ   ra   r{   r   r   rR   r   r   r   r      s    ]4B	
43 4 44,
B?O
4 ]	
FF
2	@$
r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestFlagCachec                 t    t        j                  dd      | _        t        j                  ddd       | _        y )Nr3   r'   )max_sizedefault_ttl	test-flagT)r   	FlagCachecacher   from_value_and_payloadflag_result)r   s    r   setUpzTestFlagCache.setUp   s.    __aQ?
,CCt
r   c                    d}d}d}| j                   j                  |||      }|J | j                   j                  ||| j                  |       | j                   j                  |||      }|J |j	                         sJ y )Nuser123r   r'   )r   get_cached_flagset_cached_flagr   	get_valuer   distinct_idflag_keyflag_versionresults        r   test_cache_basic_operationsz)TestFlagCache.test_cache_basic_operations   s     ++K<P~~ 	

""4#3#3\	
 ++K<P!!!!!!r   c                    d}d}d}| j                   j                  ||| j                  |       | j                   j                  |||      }|J t	        j
                  d       | j                   j                  |||      }|J y Nr   r   r'   g?)r   r   r   r   timesleepr   s        r   test_cache_ttl_expirationz'TestFlagCache.test_cache_ttl_expiration   s     	

""4#3#3\	

 ++K<P!!! 	

3 ++K<P~~r   c                 `   d}d}d}d}| j                   j                  ||| j                  |       | j                   j                  |||      }|J | j                   j                  |||      }|J | j                   j	                  |       | j                   j                  |||      }|J y )Nr   r   r'   r2   )r   r   r   r   invalidate_version)r   r   r   old_versionnew_versionr   s         r   test_cache_version_invalidationz-TestFlagCache.test_cache_version_invalidation   s     	

"";$:J:JKX ++K;O!!! ++K;O~~ 	

%%k2 ++K;O~~r   c                 0   d}d}d}| j                   j                  ||| j                  |       t        j                  d       | j                   j                  |||      }|J | j                   j                  ||      }|J |j                         sJ y r   )r   r   r   r   r   r   get_stale_cached_flagr   )r   r   r   r   r   stale_results         r   test_stale_cache_functionalityz,TestFlagCache.test_stale_cache_functionality   s     	

""4#3#3\	

 	

3 ++K<P~~ zz77XN'''%%'''r   c                    d}t        d      D ]/  }d| }| j                  j                  |d| j                  |       1 | j                  j	                  dd|       | j                  j                  dd| j                  |       | j                  j	                  dd|      }|J | j                  j	                  dd|      }|J | j                  j	                  dd|      }|J y )Nr'   r3   userr   user0user3user2)ranger   r   r   r   )r   r   iuser_idr   s        r   test_lru_evictionzTestFlagCache.test_lru_eviction  s     q 	AQCjGJJ&&d&6&6	 	

""7KF 	

""7K9I9I<X ++G[,O!!! ++G[,O!!! ++G[,O!!!r   N)	rh   ri   rj   r   r   r   r   r   r   rR   r   r   r   r      s     
""*0(,"r   r   )ry   r   unittestdataclassesr   r   r   r   r(   r   typingr   uuidr	   r8   dateutil.tzr
   r   pydanticr   pydantic.v1rx   posthogr   posthog.typesr   TEST_API_KEYFAKE_TEST_API_KEYTestCaser   r   rR   r   r   <module>r      si    
   ! . .    
  '  0  +<  ]
!! ]
@v"H%% v"r   