o
    3Ih+                     @   s   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ZdZG dd de jZdS )    N)	dataclass)datedatetime	timedelta)Decimal)Optional)UUID)tzutc)parameterized)	BaseModel)utils+kOOlRy2QlMY9jHZQv0bKz0FZyazBUoY8Arj0lFVNjs4
random_keyc                   @   s   e Zd ZeddgdedefddZdd Zd	d
 Z	dd Z
dd Zdd Zeg ddd Zdd ZdddZdd ZdS )	TestUtils)znaive datetime should be naiveT)z+timezone-aware datetime should not be naiveF_nameexpected_naivec                 C   s2   |rt  }nt jt d}t||u sJ d S )Ntz)r   nowr	   r   is_naive)selfr   r   dt r   W/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/posthog/test/test_utils.pytest_is_naive   s   
zTestUtils.test_is_naivec                 C   sL   t  }t jt d}t|}t|du sJ t|}||ks$J d S )Nr   F)r   r   r	   r   guess_timezoner   )r   r   utcnowfixedshouldnt_be_editedr   r   r   test_timezone_utils#   s   

zTestUtils.test_timezone_utilsc              
   C   s   t dtdt dddddd d	}tdtd	d
g dd}t| }|	|  |
 }t| |
 |ks>J ttddksIJ d S )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_keysr   r   r   
test_clean-   s,   
zTestUtils.test_cleanc                 C   s2   t dddtjt dd}|t|ksJ d S )Ni  r!   r   )	birthdateregistration)r   r   r   r	   r   r9   )r   dict_with_datesr   r   r   test_clean_with_datesN   s   
zTestUtils.test_clean_with_datesc                 C   s(   t d}t| t|dksJ d S )N
   z
          )bytesr   r9   )r   itemr   r   r   
test_bytesU   s   
zTestUtils.test_bytesc                 C   s*   t dd dd}|d ddksJ d S )Nc                 S   s   | S Nr   )xr   r   r   <lambda>[   s    z)TestUtils.test_clean_fn.<locals>.<lambda>   )fnnumberr   r9   )r   cleanedr   r   r   test_clean_fnZ   s   zTestUtils.test_clean_fn))zhttp://posthog.io/http://posthog.io)rP   rP   )zhttps://example.com/path/https://example.com/path)rQ   rQ   c                 C   s   |t |ks	J d S rG   )r   remove_trailing_slash)r   	input_urlexpected_urlr   r   r   test_remove_slash^   s   	zTestUtils.test_remove_slashc                    s   G dd dt  G dd dt}G  fdddt }t ddd	ddd d
ks+J t|ddd	ddd	ks;J t| dddd
dddddd
iksRJ d S )Nc                   @   s.   e Zd ZU eed< eed< dZee ed< dS )z.TestUtils.test_clean_pydantic.<locals>.ModelV2foobarNbaz)__name__
__module____qualname__r(   __annotations__intrX   r   r   r   r   r   ModelV2j   s   
 r^   c                   @   s   e Zd ZU eed< eed< dS )z.TestUtils.test_clean_pydantic.<locals>.ModelV1rV   rW   N)rY   rZ   r[   r]   r\   r(   r   r   r   r   ModelV1o   s   
 r_   c                       s   e Zd ZU  ed< dS )z2TestUtils.test_clean_pydantic.<locals>.NestedModelrV   N)rY   rZ   r[   r\   r   r^   r   r   NestedModels   s   
 ra   1r,   )rV   rW   )rV   rW   rX   r!   23)rV   rV   )r   BaseModelV1r   r9   )r   r_   ra   r   r`   r   test_clean_pydantici   s    zTestUtils.test_clean_pydanticreturnNc                 C   s.   G dd d}t d| idd iksJ d S )Nc                   @   s   e Zd ZdedefddZdS )z7TestUtils.test_clean_pydantic_like_class.<locals>.Dummyrequired_paramrg   c                 S   s   i S rG   r   )r   rh   r   r   r   
model_dump   s   zBTestUtils.test_clean_pydantic_like_class.<locals>.Dummy.model_dumpN)rY   rZ   r[   r(   r5   ri   r   r   r   r   Dummy   s    rj   testrM   )r   rj   r   r   r   test_clean_pydantic_like_class   s    z(TestUtils.test_clean_pydantic_like_classc                    s|   t G dd d t G  fddd}t|dd ddtd	td
dddddddddtd
ddd ddks<J d S )Nc                   @   s>   e Zd ZU eed< eed< eed< eed< dZe	e ed< dS )z6TestUtils.test_clean_dataclass.<locals>.InnerDataClass	inner_foo	inner_bar
inner_uuid
inner_dateNinner_optional)
rY   rZ   r[   r(   r\   r]   r   r   rq   r   r   r   r   r   InnerDataClass   s   
 rr   c                       s&   e Zd ZU eed< eed<  ed< dS )z5TestUtils.test_clean_dataclass.<locals>.TestDataClassrV   rW   nestedN)rY   rZ   r[   r(   r\   r]   r   rr   r   r   TestDataClass   s   
 ru   rb   r,   rd   rJ   r0   i  r!   )rm   rn   ro   rp   )rV   rW   rs   r1   )rm   rn   ro   rp   rq   )r   r   r9   r   r   )r   ru   r   rt   r   test_clean_dataclass   s4   

zTestUtils.test_clean_dataclass)rg   N)rY   rZ   r[   r
   expandr(   r'   r   r   r>   rB   rF   rO   rU   rf   rl   rv   r   r   r   r   r      s&    
!

r   )unittestdataclassesr   r   r   r   r"   r   typingr   uuidr   r2   dateutil.tzr	   r
   pydanticr   pydantic.v1re   posthogr   TEST_API_KEYFAKE_TEST_API_KEYTestCaser   r   r   r   r   <module>   s    