o
    \h{ü  ã                   @   s®   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm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mZ d d	lmZmZ d d
lmZ G dd„ dejƒZdS )é    N)Údatetime)Úuuid4)Úget_context_session_idÚset_context_sessionÚnew_context)Úparameterized©ÚClient)ÚAPIError)ÚFAKE_TEST_API_KEY)ÚFeatureFlagÚLegacyFlagMetadata)ÚVERSIONc                   @   sR  e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Ze d#¡d$d%„ ƒZe d#¡d&d'„ ƒZe d(¡d)d*„ ƒZe d#¡d+d,„ ƒZe d#¡d-d.„ ƒZe d#¡d/d0„ ƒZe d#¡d1d2„ ƒZd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"d=d>„ Z#d?d@„ Z$dAdB„ Z%dCdD„ Z&dEdF„ Z'dGdH„ Z(dIdJ„ Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,dQdR„ Z-dSdT„ Z.e/ 0dUdVi i fdWdXdYdZd[d\œdYdZd[d\œfd]e1e2ƒ ƒi i fd^d_i i fd`dai i fdbdci i fg¡ddde„ ƒZ3dfdg„ Z4dhdi„ Z5djdk„ Z6e/ 0dldmdndodpidodpifdqdrdsdtdudvdwœgdxœdydtifdzd{d|d}d~dYdd~d€œd}d~dYdd~d€œfdd‚dƒd„d}dZd…d}d†d‡dˆœd„d}dZd…d}d†d‡dˆœfg¡d‰dŠ„ ƒZ7e/ 0d‹dŒddŽœddŒddifd‘dd„d’œd“d“dd„d’œfd”i d•d•i fd–d—dd˜œd™d™d—dd˜œfg¡dšd›„ ƒZ8dœd„ Z9dždŸ„ Z:d d¡„ Z;d¢d£„ Z<d¤d¥„ Z=d¦d§„ Z>d¨d©„ Z?dªd«„ Z@d¬d­„ ZAd®d¯„ ZBd°d±„ ZCd²d³„ ZDe d#¡d´dµ„ ƒZEd¶d·„ ZFd¸d¹„ ZGdºd»„ ZHd¼d½„ ZIe d#¡d¾d¿„ ƒZJe dÀ¡e d(¡dÁdÂ„ ƒƒZKe d#¡dÃdÄ„ ƒZLe/ 0dÅdÆdÇdÈdÉdÊdËdÇdÌdÍdÍdÎdÌif
g¡dÏdÐ„ ƒZMe d#¡dÑdÒ„ ƒZNdÓdÔ„ ZOdÕdÖ„ ZPd×dØ„ ZQdÙdÚ„ ZRdÛdÜ„ ZSdÍS )ÝÚ
TestClientc                 C   s0   t  d¡| _t  d¡| _| j ¡  | j ¡  d S )Nzposthog.client.batch_postúposthog.consumer.batch_post)ÚmockÚpatchÚclient_post_patcherÚconsumer_post_patcherÚstart©Úcls© r   ú[/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/posthog/test/test_client.pyÚ
setUpClass   s   
zTestClient.setUpClassc                 C   s   | j  ¡  | j ¡  d S ©N)r   Ústopr   r   r   r   r   ÚtearDownClass   s   
zTestClient.tearDownClassc                 C   s   t d||ƒ d| _dS )zMark the failure handlerÚFAILTN)ÚprintÚfailed)ÚselfÚeÚbatchr   r   r   Úset_fail    s   
zTestClient.set_failc                 C   s   d| _ tt| jd| _d S )NF)Úon_error)r    r	   r   r$   Úclient©r!   r   r   r   ÚsetUp%   s   zTestClient.setUpc                 C   s   |   tt¡ d S r   )ÚassertRaisesÚAssertionErrorr	   r'   r   r   r   Útest_requires_api_key)   ó   z TestClient.test_requires_api_keyc                 C   s   | j  ¡  d S r   )r&   Úflushr'   r   r   r   Útest_empty_flush,   s   zTestClient.test_empty_flushc                 C   sü   | j }| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d d¡ |  t|d tƒ¡ |  	| 
d¡¡ |  |d d¡ |  |d d d¡ |  |d d	 t¡ |d d
 tjks[J ‚|d d tjksfJ ‚|d d tjksqJ ‚|d d tjks|J ‚d S )NÚdistinct_idúpython test eventÚeventÚ	timestampÚuuidÚ
propertiesú$libúposthog-pythonú$lib_versionú$python_runtimeú$python_versionú$osú$os_version)r&   Úcapturer-   Ú
assertTrueÚassertFalser    ÚassertEqualÚ
isinstanceÚstrÚassertIsNoneÚgetr   r   ÚANY©r!   r&   ÚsuccessÚmsgr   r   r   Útest_basic_capture/   s   
zTestClient.test_basic_capturec                 C   s²   | j }ttƒ ƒ}|jdd|d\}}| ¡  |  |¡ |  | j¡ |  |d d¡ |  t	|d tƒ¡ |  |d |¡ |  |d d¡ |  |d d d	¡ |  |d d
 t
¡ d S )Nr/   r0   )r3   r1   r2   r3   r4   r5   r6   r7   )r&   rA   r   r<   r-   r=   r>   r    r?   r@   r   )r!   r&   r3   rF   rG   r   r   r   Útest_basic_capture_with_uuidB   s   

z'TestClient.test_basic_capture_with_uuidc                 C   s¬   t t| jd}| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d d¡ |  t	|d t
ƒ¡ |  | d¡¡ |  |d d¡ |  |d d d	¡ |  |d d
 t¡ d S )N)Úproject_api_keyr%   r/   r0   r1   r2   r3   r4   r5   r6   r7   )r	   r   r$   r<   r-   r=   r>   r    r?   r@   rA   rB   rC   r   rE   r   r   r   Ú'test_basic_capture_with_project_api_keyQ   s   
z2TestClient.test_basic_capture_with_project_api_keyc                 C   s”   t tddid}| dd¡\}}| ¡  |  |d d¡ |  |d d d¡ | ddd	i¡\}}| ¡  |  |d
 d d	¡ |  |d d d¡ d S )NÚsourcez	repo-name©Úsuper_propertiesr/   r0   r1   r4   ÚtraitÚvalueú$set)r	   r   r<   r-   r?   Úidentify©r!   r&   Ú_rG   r   r   r   Útest_basic_super_properties`   s   z&TestClient.test_basic_super_propertiesc                 C   sŠ   t jjtdd d2}| j}tdƒ}|j|dd |  |j¡ |j	d }|  
|d d¡ |  
|d d¡ W d   ƒ d S 1 s>w   Y  d S )	Nr<   ©Úreturn_valueútest exceptionr/   ©r/   r   é   ú
$exception©r   r   Úobjectr	   r&   Ú	ExceptionÚcapture_exceptionr=   ÚcalledÚ	call_argsr?   ©r!   Úpatch_capturer&   Ú	exceptionÚcapture_callr   r   r   Útest_basic_capture_exceptiono   s   
"øz'TestClient.test_basic_capture_exceptionc                 C   sˆ   t jjtdd d1}| j}tdƒ}| |d¡ |  |j¡ |j	d }|  
|d d¡ |  
|d d¡ W d   ƒ d S 1 s=w   Y  d S )Nr<   rV   rX   r/   r   rZ   r[   r\   rb   r   r   r   Ú-test_basic_capture_exception_with_distinct_idz   s   
"øz8TestClient.test_basic_capture_exception_with_distinct_idc                 C   ó’   t jjtdd d6}tt| jdd}tdƒ}| |d¡ |  |j	¡ |j
d }|  |d d¡ |  |d d	¡ W d   ƒ d S 1 sBw   Y  d S )
Nr<   rV   zhttps://aloha.com©r%   ÚhostrX   r/   r   rZ   r[   ©r   r   r]   r	   r   r$   r^   r_   r=   r`   ra   r?   rb   r   r   r   Ú9test_basic_capture_exception_with_correct_host_generation…   s   ÿ
"özDTestClient.test_basic_capture_exception_with_correct_host_generationc                 C   rh   )
Nr<   rV   úhttps://app.posthog.comri   rX   r/   r   rZ   r[   rk   rb   r   r   r   ÚJtest_basic_capture_exception_with_correct_host_generation_for_server_hosts’   s   ý
"ôzUTestClient.test_basic_capture_exception_with_correct_host_generation_for_server_hostsc              	   C   s  t jjtdd dù}| j}ztdƒ‚ ty    |jdd Y nw |  |j¡ |j	d }|  
|d d¡ |  
|d d¡ |  
|d	 d
 d¡ |  
|d	 d d¡ |  
|d	 d d d d d¡ |  
|d	 d d d d d¡ |  
|d	 d d d d ¡ |  
|d	 d d d d¡ |  
|d	 d d d d¡ |  
|d	 d d d d d¡ |  
|d	 d d d d d d d¡ |  
|d	 d d d d d d d¡ |  
|d	 d d d d d d d¡ |  
|d	 d d d d d d d¡ W d   ƒ d S 1 sw   Y  d S )Nr<   rV   rX   r/   rY   r   rZ   r[   é   z$exception_typer^   z$exception_messagez$exception_listÚ	mechanismÚtypeÚgenericÚhandledTÚmodulerP   Ú
stacktraceÚrawÚframesÚfilenamezposthog/test/test_client.pyÚfunctionÚ4test_basic_capture_exception_with_no_exception_givenzposthog.test.test_clientÚin_appr\   )r!   rc   r&   re   r   r   r   rz   £   sj   ÿ
ÿÿÿþÿüÿüÿüÿü$Òz?TestClient.test_basic_capture_exception_with_no_exception_givenc              	   C   s¢   t jjtdd d>}| jddd}| j}| ¡  |  |j¡ |  	|j
d d¡ W d   ƒ n1 s2w   Y  W d   ƒ d S W d   ƒ d S 1 sJw   Y  d S )Nr<   rV   ÚposthogÚWARNING©Úlevelr   z2WARNING:posthog:No exception information available)r   r   r]   r	   Ú
assertLogsr&   r_   r>   r`   r?   Úoutput)r!   rc   Úlogsr&   r   r   r   Ú8test_basic_capture_exception_with_no_exception_happeningÙ   s   þûÿ"ÿzCTestClient.test_basic_capture_exception_with_no_exception_happeningc                 C   s~   t tdd}| jddd(}|jtdƒddd	 |  |jd
 d¡ |  t|jd
 dƒd¡ W d   ƒ d S 1 s8w   Y  d S )NT)Úlog_captured_exceptionsr|   ÚERRORr~   rX   r/   zone/two/three)Úpathr   z+ERROR:posthog:test exception
NoneType: Noner†   )	r	   r   r€   r_   r^   r?   r   ÚgetattrÚrecords)r!   r&   r‚   r   r   r   Ú(test_capture_exception_logs_when_enabledå   s   
ÿ
ÿ"ùz3TestClient.test_capture_exception_logs_when_enabledzposthog.client.flagsc                 C   sø   dddii|_ tt| jtd}|jdddd\}}| ¡  |  |¡ |  | j¡ |  	|d	 d¡ |  t
|d
 tƒ¡ |  | d¡¡ |  	|d d¡ |  	|d d d¡ |  	|d d t¡ |  	|d d d¡ |  	|d d dg¡ |  	|jd¡ d S )NÚfeatureFlagsúbeta-featureúrandom-variant©r%   Úpersonal_api_keyr/   r0   T©Úsend_feature_flagsr1   r2   r3   r4   r5   r6   r7   ú$feature/beta-featureú$active_feature_flagsrZ   ©rW   r	   r   r$   r<   r-   r=   r>   r    r?   r@   rA   rB   rC   r   Ú
call_count©r!   Úpatch_flagsr&   rF   rG   r   r   r   Ú%test_basic_capture_with_feature_flagsð   s*   ý
ÿ
z0TestClient.test_basic_capture_with_feature_flagsc                 C   sR  dddii|_ tt| jtd}ddddd	d
ddddœgd	dœddigdddddœddddœddddœgidddidœdœd œ}ddd!dd"dd#gdd$œgd	dœgd%d&id'œd(œ}ddd)dg d*dœgd%d&id'œd(œ}|||g|_| d+d,¡\}}| ¡  |  |¡ |  | j	¡ |  
|d- d,¡ |  t|d. tƒ¡ |  | d/¡¡ |  
|d+ d+¡ |  
|d0 d1 d2¡ |  
|d0 d3 t¡ |  
|d0 d4 d¡ |  
|d0 d5 d6¡ |  
|d0 d7 dg¡ d8|d0 vsâJ ‚|  
|jd*¡ g |_| d+d,¡\}}| ¡  |  |¡ |  | j	¡ d8|d0 vsJ ‚d4|d0 vsJ ‚d5|d0 vsJ ‚d7|d0 vs'J ‚d S )9NrŠ   r‹   rŒ   r   rZ   úBeta Featureúbeta-feature-localTéd   ÚemailÚpersonútest@posthog.comÚexact©Úkeyrq   rP   Úoperator©r4   Úrollout_percentager£   é2   Úvariantsúfirst-variantúFirst Variant©r    Únamer£   úsecond-variantúSecond Varianté   úthird-variantúThird Variantúsome-payloadÚaÚjson©r¦   r­   ©ÚgroupsÚmultivariateÚpayloads©Úidr©   r    Úactiver£   Úfiltersúperson-flagÚregionÚUSA©r    r¡   rP   rq   Útrueé,  ©r´   r¶   ©r¸   r©   r    r¹   rº   z
false-flagr   r/   r0   r1   r2   r3   r4   r5   r6   r7   ú$feature/beta-feature-localz$feature/false-flagFr’   r‘   ©rW   r	   r   r$   Úfeature_flagsr<   r-   r=   r>   r    r?   r@   rA   rB   rC   r   r”   )r!   r–   r&   Úmultivariate_flagÚ
basic_flagÚ
false_flagrF   rG   r   r   r   Ú7test_basic_capture_with_locally_evaluated_feature_flags  sÄ   ýüÿ÷ÿôýýýõÿþÜú1üÿ÷ÿòûþÿùû
ÿÿ
zBTestClient.test_basic_capture_with_locally_evaluated_feature_flagszposthog.client.getc                 C   s®   ddddœ}t d|d ƒ|_ttdd}| jd	d
d2}| ¡  |  |jg ¡ |  |ji ¡ |  |j	i ¡ |  |j
i ¡ |  d|jd ¡ W d   ƒ d S 1 sPw   Y  d S )NÚquota_limitedz1You have exceeded your feature flag request quotaÚpayment_required)rq   ÚdetailÚcodei’  rÌ   Útest©rŽ   r|   r}   r~   z#PostHog feature flags quota limitedr   )r
   Úside_effectr	   r   r€   Ú_load_feature_flagsr?   rÅ   Úfeature_flags_by_keyÚgroup_type_mappingÚcohortsÚassertInr   )r!   Ú	patch_getÚmock_responser&   r‚   r   r   r   Ú%test_load_feature_flags_quota_limitedŒ  s   ý"ùz0TestClient.test_load_feature_flags_quota_limitedc                 C   s´  dddii|_ tt| jtd}ddddd	d
ddddœgd	dœddigdddddœddddœddddœgidddidœdœd œ}ddd!dd"dd#gdd$œgd	dœgd%d&id'œd(œ}||g|_| d)d*d+d,i¡\}}| ¡  |  |¡ |  | j	¡ |  
|d- d*¡ |  t|d. tƒ¡ |  | d/¡¡ |  
|d) d)¡ |  
|d0 d1 d2¡ |  
|d0 d3 t¡ |  
|d0 d+ d,¡ |  
|d0 d4 dg¡ d5|d0 vsÉJ ‚d6|d0 vsÑJ ‚|  
|jd7¡ d S )8NrŠ   r‹   rŒ   r   rZ   r˜   r™   Trš   r›   rœ   r   rž   rŸ   r¢   r£   r¤   r¥   r¦   r§   r¨   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   r·   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   r/   r0   rÃ   zmy-custom-variantr1   r2   r3   r4   r5   r6   r7   r’   r‘   z$feature/person-flagr   rÄ   )r!   r–   r&   rÆ   rÇ   rF   rG   r   r   r   Ú+test_dont_override_capture_with_local_flagsŸ  s¤   ýüÿ÷ÿôýýýõÿþÜú1üÿ÷ÿòû
ý
ÿÿz6TestClient.test_dont_override_capture_with_local_flagsc              
   C   s>  dddddœi|_ tt| jtd}|jdddd	\}}| ¡  |  |¡ |  | j¡ |  	|d
 d¡ |  t
|d tƒ¡ |  | d¡¡ |  	|d d¡ |  |d d ¡ |  	|d d d¡ |  	|d d t¡ |  	|d d d¡ |  	|d d d¡ |  	|d d ddg¡ |  	|jd¡ |jddddi d d dd d S )NrŠ   rŒ   TF©r‹   úalpha-featureúoff-featurer   r/   r0   r   r1   r2   r3   r4   ú$geoip_disabler5   r6   r7   r‘   ú$feature/alpha-featurer’   r‹   rÛ   rZ   Ú
random_keyúhttps://us.i.posthog.comé   ©Útimeoutr/   r´   Úperson_propertiesÚgroup_propertiesÚgeoip_disable©rW   r	   r   r$   r<   r-   r=   r>   r    r?   r@   rA   rB   rC   r   r”   Úassert_called_withr•   r   r   r   Ú9test_basic_capture_with_feature_flags_returns_active_only
  sR   ýÿý
ÿ

þ
øzDTestClient.test_basic_capture_with_feature_flags_returns_active_onlyc              
   C   sF  dddddœi|_ ttd| jtddd}|jd	d
ddd\}}| ¡  |  |¡ |  | j¡ |  	|d d
¡ |  t
|d tƒ¡ |  | d¡¡ |  d|d v¡ |  	|d	 d	¡ |  	|d d d¡ |  	|d d t¡ |  	|d d d¡ |  	|d d d¡ |  	|d d ddg¡ |  	|jd¡ |jdddd	i d d dd d S )NrŠ   rŒ   TFrÚ   rm   é   )rj   r%   rŽ   Údisable_geoipÚ%feature_flags_request_timeout_secondsr/   r0   )r   rë   r1   r2   r3   rÝ   r4   r5   r6   r7   r‘   rÞ   r’   r‹   rÛ   rZ   rß   rà   râ   rç   r•   r   r   r   ÚItest_basic_capture_with_feature_flags_and_disable_geoip_returns_correctly:  s^   ýÿú
ü

þ
øzTTestClient.test_basic_capture_with_feature_flags_and_disable_geoip_returns_correctlyc                 C   sò   dddii|_ tt| jtd}|jdddd\}}| ¡  |  |¡ |  | j¡ |  	|d	 d¡ |  t
|d
 tƒ¡ |  | d¡¡ |  	|d d¡ |  	|d d d¡ |  	|d d t¡ |  d|d v¡ |  d|d v¡ |  	|jd¡ d S )NrŠ   r‹   rŒ   r   r/   r0   Fr   r1   r2   r3   r4   r5   r6   r7   r‘   r’   r   r“   r•   r   r   r   ÚCtest_basic_capture_with_feature_flags_switched_off_doesnt_send_themr  s*   ý
ÿ
zNTestClient.test_basic_capture_with_feature_flags_switched_off_doesnt_send_themc                 C   sJ   | j }|jddd\}}| ¡  |  |¡ |  | j¡ |  |d d¡ d S )Nl   úIq´K‰r0   )r/   r1   r/   Ú157963456373623802)r&   r<   r-   r=   r>   r    r?   rE   r   r   r   Útest_stringifies_distinct_id  s   
ÿ
z'TestClient.test_stringifies_distinct_idc                 C   sÆ   | j }|jdddditdddƒdd	\}}|  |¡ |  |d
 d¡ |  |d d d¡ |  |d d¡ |  |d d d¡ |  |d d t¡ |  |d d¡ |  |d d¡ |  d|d v¡ d S )Nr/   r0   ÚpropertyrP   éÞ  é	   rá   únew-uuid©r2   r3   r2   ú2014-09-03T00:00:00+00:00r4   r1   r5   r6   r7   r3   ú$groups)r&   r<   r   r=   r?   r   rE   r   r   r   Útest_advanced_captureœ  s"   

û
z TestClient.test_advanced_capturec                 C   sD   | j jdddddœd\}}|  |¡ |  |d d dddœ¡ d S )	Nr/   Ú
test_eventúid:5úapp.posthog.com©ÚcompanyÚinstance)r´   r4   r÷   )r&   r<   r=   r?   ©r!   rF   rG   r   r   r   Útest_groups_capture±  s   
ý

þzTestClient.test_groups_capturec                 C   ó„   | j }| dddi¡\}}| ¡  |  |¡ |  | j¡ |  |d d d¡ |  t|d tƒ¡ |  	| 
d¡¡ |  |d d¡ d S ©Nr/   rO   rP   rQ   r2   r3   )r&   rR   r-   r=   r>   r    r?   r@   rA   rB   rC   rE   r   r   r   Útest_basic_identify¾  ó   
zTestClient.test_basic_identifyc                 C   ó¶   | j }|jddditdddƒdd\}}|  |¡ |  |d	 d
¡ |  |d d d¡ |  |d d d¡ |  |d d t¡ |  t|d	 tƒ¡ |  |d d¡ |  |d d¡ d S ©Nr/   rO   rP   rò   ró   rá   rô   rõ   r2   rö   rQ   r4   r5   r6   r7   r3   )r&   rR   r   r=   r?   r   r@   rA   rE   r   r   r   Útest_advanced_identifyÊ  ó   

ü
z!TestClient.test_advanced_identifyc                 C   r  r  )r&   Úsetr-   r=   r>   r    r?   r@   rA   rB   rC   rE   r   r   r   Útest_basic_setÝ  r  zTestClient.test_basic_setc                 C   r  r  )r&   r	  r   r=   r?   r   r@   rA   rE   r   r   r   Útest_advanced_seté  r  zTestClient.test_advanced_setc                 C   r  )Nr/   rO   rP   ú	$set_oncer2   r3   )r&   Úset_oncer-   r=   r>   r    r?   r@   rA   rB   rC   rE   r   r   r   Útest_basic_set_onceü  r  zTestClient.test_basic_set_oncec                 C   r  )Nr/   rO   rP   rò   ró   rá   rô   rõ   r2   rö   r  r4   r5   r6   r7   r3   )r&   r  r   r=   r?   r   r@   rA   rE   r   r   r   Útest_advanced_set_once  r  z!TestClient.test_advanced_set_oncec              
   C   s‚   | j  dd¡\}}|  |¡ |  |d d¡ |  |d d¡ |  |d ddi dtd	d
œ¡ |  t|d tƒ¡ |  | d¡¡ d S )NÚorganizationrú   r1   ú$groupidentifyr/   ú$organization_id:5r4   r6   T©z$group_typeú
$group_keyz
$group_setr5   r7   rÝ   r2   r3   ©	r&   Úgroup_identifyr=   r?   r   r@   rA   rB   rC   rÿ   r   r   r   Útest_basic_group_identify  s    
úþz$TestClient.test_basic_group_identifyc              
   C   s†   | j jdddd\}}|  |¡ |  |d d¡ |  |d d¡ |  |d ddi dtd	d
œ¡ |  t|d tƒ¡ |  | d¡¡ d S )Nr  rú   r/   rY   r1   r  r4   r6   Tr  r2   r3   r  rÿ   r   r   r   Ú*test_basic_group_identify_with_distinct_id/  s$   
ÿ
úþz5TestClient.test_basic_group_identify_with_distinct_idc              
   C   s†   | j jdddditdddƒdd	\}}|  |¡ |  |d
 d¡ |  |d d¡ |  |d ddddidtddœ¡ |  |d d¡ d S )Nr  rú   rO   rP   rò   ró   rá   rô   rõ   r1   r  r/   r  r4   r6   Tr  r2   rö   ©r&   r  r   r=   r?   r   rÿ   r   r   r   Útest_advanced_group_identifyD  s*   

û
úþz'TestClient.test_advanced_group_identifyc              
   C   sˆ   | j jdddditdddƒdd	d
\}}|  |¡ |  |d d¡ |  |d	 d	¡ |  |d ddddidtddœ¡ |  |d d¡ d S )Nr  rú   rO   rP   rò   ró   rá   rô   r/   )r2   r3   r/   r1   r  r4   r6   Tr  r2   rö   r  rÿ   r   r   r   Ú-test_advanced_group_identify_with_distinct_id]  s,   

ú
	úþz8TestClient.test_advanced_group_identify_with_distinct_idc                 C   s`   | j }| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d d d¡ |  |d d d¡ d S )NÚ
previousIdr/   r4   Úalias)r&   r  r-   r=   r>   r    r?   rE   r   r   r   Útest_basic_aliasx  s   
zTestClient.test_basic_aliasc                 C   s^   | j }|jddd\}}|  | j¡ | ¡  |  |¡ |  |d d¡ |  |d d d¡ d S )Nr/   úhttps://posthog.com/contact©Úurlr4   ú$current_url)r&   Úpager>   r    r-   r=   r?   rE   r   r   r   Útest_basic_page  s   
ÿzTestClient.test_basic_pagec                 C   sh   | j }tƒ }|j|dd\}}|  | j¡ | ¡  |  |¡ |  |d t|ƒ¡ |  |d d d¡ d S )Nr  r   r/   r4   r"  )	r&   r   r#  r>   r    r-   r=   r?   rA   )r!   r&   r/   rF   rG   r   r   r   Útest_basic_page_distinct_uuidŒ  s   
ÿz(TestClient.test_basic_page_distinct_uuidc                 C   sÌ   | j }|jdddditdddƒdd	\}}|  |¡ |  |d
 d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d t¡ |  t|d
 tƒ¡ |  |d d¡ |  |d d¡ d S )Nr/   r  rñ   rP   rò   ró   rá   rô   rõ   r2   rö   r4   r"  r5   r6   r7   r3   )r&   r#  r   r=   r?   r   r@   rA   rE   r   r   r   Útest_advanced_page˜  s&   

û
ÿzTestClient.test_advanced_pageÚbasic_session_idztest-session-123Ú session_id_with_other_propertiesztest-session-456Úcustom_valueFzhttps://example.com)Úcustom_propú$process_person_profiler"  Úsession_id_uuid_formatÚsession_id_numeric_stringÚ
1234567890Úsession_id_empty_stringÚ Úsession_id_with_special_charszsession-123_test.idc                 C   sÊ   | j }d|i|¥}|jdd|d\}}| ¡  |  |¡ |  | j¡ |  |d d¡ |  |d d¡ |  |d d |¡ |  |d d d¡ |  |d d	 t¡ | ¡ D ]\}	}
|  |d |	 |
¡ qTd S )
Nú$session_idr/   r0   ©r4   r1   r4   r5   r6   r7   )	r&   r<   r-   r=   r>   r    r?   r   Úitems)r!   Ú	test_nameÚ
session_idÚadditional_propertiesÚexpected_propertiesr&   r4   rF   rG   r    rP   r   r   r   Ú'test_capture_with_session_id_variations¯  s    
ÿ
ÿz2TestClient.test_capture_with_session_id_variationsc                 C   sn   | j }d}|jddd|idddœd\}}| ¡  |  |¡ |  |d	 d |¡ |  |d	 d
 dddœ¡ d S )Nzgroup-session-101r/   rù   r2  rú   rû   rü   )r4   r´   r4   r÷   ©r&   r<   r-   r=   r?   ©r!   r&   r6  rF   rG   r   r   r   Ú%test_session_id_preserved_with_groupsÞ  s   
ü

þz0TestClient.test_session_id_preserved_with_groupsc                 C   sb   | j }d}|jdd|ddœd\}}| ¡  |  |¡ |  |d d |¡ |  |d d	 d¡ d S )
Nzanonymous-session-202r/   Úanonymous_eventF)r2  r+  r3  r4   r2  r+  r:  r;  r   r   r   Ú$test_session_id_with_anonymous_eventñ  s   
ý
z/TestClient.test_session_id_with_anonymous_eventc                 C   s¢   | j }d}|jdd|ddœd\}}| ¡  |  |¡ |  | j¡ |  |d d¡ |  |d d¡ |  |d	 d
 |¡ |  |d	 d d¡ |  |d	 d d¡ d S )Nzpage-session-303r/   r  Úcontact©r2  Ú	page_typer3  r1   z	$pageviewr4   r2  r"  rA  )r&   r#  r-   r=   r>   r    r?   r;  r   r   r   Útest_page_with_session_id   s"   
ý
ÿz$TestClient.test_page_with_session_idÚscreen_eventz$screenzspecial-session-505z$screen_nameÚ
HomeScreenÚsurvey_eventzsurvey sentzsurvey-session-606Ú
survey_123Úq1z#How likely are you to recommend us?)r¸   Úquestion)ú
$survey_idz$survey_questionsrI  Úcomplex_properties_eventÚcomplex_eventzmixed-session-707úhttps://example.com/pageTé*   )r"  r+  Úcustom_propertyÚnumeric_propertyÚboolean_propertyÚcsp_violationz$csp_violationzcsp-session-789z1.0zMozilla/5.0 Test Agentzhttps://malicious.com/script.jsz
script-src)z$csp_versionr"  r+  z$raw_user_agentz$csp_document_urlz$csp_blocked_urlz$csp_violated_directivec                 C   s®   | j }d|i|¥}|jd||d\}}	| ¡  |  |¡ |  |	d |¡ |  |	d d |¡ | ¡ D ]\}
}|  |	d |
 |¡ q2|  |	d d d¡ |  |	d d t¡ d S )	Nr2  r/   r3  r1   r4   r5   r6   r7   )r&   r<   r-   r=   r?   r4  r   )r!   r5  Ú
event_namer6  r7  Úexpected_additional_propertiesr&   r4   rF   rG   r    rP   r   r   r   Ú*test_session_id_with_different_event_types  s   J
z5TestClient.test_session_id_with_different_event_typesÚ$super_properties_override_session_idzsuper-sessionrÎ   )r2  rL   zevent-session-808rL   Úno_super_properties_conflict)rL   Úversionzevent-session-909Úempty_super_propertieszevent-session-111Ú(super_properties_with_other_dollar_propszhttps://super.com)r"  rL   zevent-session-222c                 C   st   t t|d}|jddd|id\}}| ¡  |  |¡ |  |d d |¡ | ¡ D ]\}	}
|  |d |	 |
¡ q)d S )NrM   r/   rù   r2  r3  r4   )r	   r   r<   r-   r=   r?   r4  )r!   r5  rN   Úevent_session_idÚexpected_session_idÚexpected_super_propsr&   rF   rG   r    rP   r   r   r   Ú0test_session_id_with_super_properties_variationsq  s   )

ÿ
ÿz;TestClient.test_session_id_with_super_properties_variationsc                 C   sD   | j }tdƒD ]}| dddi¡\}}q| ¡  |  |j ¡ ¡ d S ©Niè  r/   rO   rP   )r&   ÚrangerR   r-   r=   ÚqueueÚempty©r!   r&   ÚirF   rG   r   r   r   Ú
test_flush¨  s
   zTestClient.test_flushc                 C   s^   | j }tdƒD ]}| dddi¡\}}q| ¡  |  |j ¡ ¡ |jD ]	}|  | 	¡ ¡ q#d S r^  )
r&   r_  rR   Úshutdownr=   r`  ra  Ú	consumersr>   Úis_alive)r!   r&   rc  rF   rG   Úconsumerr   r   r   Útest_shutdown³  s   
ÿzTestClient.test_shutdownc                 C   sD   t tdd}| d¡\}}|  |j¡ |  |j ¡ ¡ |  |¡ d S )NT)Ú	sync_moder/   )r	   r   rR   r>   rf  r=   r`  ra  )r!   r&   rF   Úmessager   r   r   Útest_synchronousÀ  s
   zTestClient.test_synchronousc                 C   sH   t tdd}| ¡  tdƒD ]}| d¡ q| d¡\}}|  |¡ d S )NrZ   )Úmax_queue_sizeé
   r/   )r	   r   Újoinr_  rR   r>   rb  r   r   r   Útest_overflowÈ  s   zTestClient.test_overflowc                 C   s   t t d¡ƒ d S )NÚunicode_key)r	   ÚsixÚur'   r   r   r   Útest_unicodeÔ  s   zTestClient.test_unicodec                 C   s(   | j  dd¡ | j  ¡  |  | j¡ d S )NiÒ  zpython event)r&   r<   r-   r>   r    r'   r   r   r   Útest_numeric_distinct_id×  s   
z#TestClient.test_numeric_distinct_idc                 C   s   t ddd d S )NÚbad_keyT)Údebugr   r'   r   r   r   Ú
test_debugÜ  r,   zTestClient.test_debugc                 C   sF   t t| jdd}tdƒD ]
}| dddi¡ q| ¡  |  | j¡ d S )NT)r%   Úgziprn  r/   rO   rP   )r	   r   Úfailr_  rR   r-   r>   r    )r!   r&   rT   r   r   r   Ú	test_gzipß  s
   zTestClient.test_gzipc                    sˆ   t tˆ jddd}‡ fdd„}tjd|d$}tdƒD ]
}| d	d
di¡ qt d¡ ˆ  	|j
d¡ W d   ƒ d S 1 s=w   Y  d S )Nrn  rá   )r%   Úflush_atÚflush_intervalc                     s   ˆ   t|d ƒd¡ d S )Nr#   rn  )r?   Úlen)ÚargsÚkwargsr'   r   r   Úmock_post_fnë  s   z;TestClient.test_user_defined_flush_at.<locals>.mock_post_fnr   )rÐ   é   r/   rO   rP   rZ   ro   )r	   r   rz  r   r   r_  rR   ÚtimeÚsleepr?   r”   )r!   r&   r  Ú	mock_postrT   r   r'   r   Útest_user_defined_flush_atæ  s   
ÿÿ
"úz%TestClient.test_user_defined_flush_atc                 C   s*   t tdd}|jD ]	}|  |jd¡ q	d S )Nrn  )rã   ©r	   r   rf  r?   rã   ©r!   r&   rh  r   r   r   Útest_user_defined_timeoutø  s   
ÿz$TestClient.test_user_defined_timeoutc                 C   s&   t tƒ}|jD ]	}|  |jd¡ qd S )Né   r‡  rˆ  r   r   r   Útest_default_timeout_15ý  s   
ÿz"TestClient.test_default_timeout_15c                 C   sN   t t| jdd}| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d¡ d S )NT©r%   Údisabledr/   r0   r  )r	   r   r$   r<   r-   r>   r    r?   rE   r   r   r   Útest_disabled  s   
zTestClient.test_disabledc                 C   s¾   t t| jdd}| dd¡}|  |¡ | ¡  | dd¡}|  |¡ | ¡  | d¡}|  |¡ | ¡  | dd¡}|  |¡ | ¡  | 	d¡}|  
|d d dœ¡ | ¡  |  |j ¡ ¡ d S )NTrŒ  r‹   Ú12345r    )rŠ   ÚfeatureFlagPayloads)r	   r   r$   Úget_feature_flagrB   Úassert_not_calledÚfeature_enabledÚget_all_flagsÚget_feature_flag_payloadÚget_all_flags_and_payloadsr?   r=   r`  ra  )r!   r–   r&   Úresponser   r   r   Ú test_disabled_with_feature_flags  s"   





z+TestClient.test_disabled_with_feature_flagsc                 C   s’   t t| jdd}| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d d¡ d|_	| dd¡\}}| ¡  |  |¡ |  | j¡ |  |d¡ d S )NFrŒ  r/   r0   r1   Tr  )
r	   r   r$   r<   r-   r=   r>   r    r?   r  rE   r   r   r   Útest_enabled_to_disabled&  s   

z#TestClient.test_enabled_to_disabledc                 C   sp   t t| jdd}| dd¡\}}| ¡  |  |d d d¡ | dddi¡\}}| ¡  |  |d d d¡ d S )	NT©r%   rë   r/   r0   r4   rÝ   rO   rP   )r	   r   r$   r<   r-   r?   rR   ©r!   r&   rT   Úcapture_msgÚidentify_msgr   r   r   Ú$test_disable_geoip_default_on_events7  s   z/TestClient.test_disable_geoip_default_on_eventsc                 C   s€   t t| jdd}|jddddœdd\}}| ¡  |  |d	 d
 d¡ |jddddidd\}}| ¡  |  d
|d	 vd¡ d S )NFrš  r/   ÚbÚd)r°   ÚcT©rë   r4   rÝ   zhttp://a.comrO   rP   )r	   r   r$   r	  r-   r?   r#  r›  r   r   r   Ú%test_disable_geoip_override_on_eventsA  s   
ÿ
ÿz0TestClient.test_disable_geoip_override_on_eventsc                 C   sB   t t| jdd}|jdddd\}}| ¡  |  d|d v¡ d S )	NTrš  r/   r0   Fr¢  rÝ   r4   )r	   r   r$   r<   r-   r=   rS   r   r   r   Ú2test_disable_geoip_method_overrides_init_on_eventsO  s   z=TestClient.test_disable_geoip_method_overrides_init_on_eventsc              
   C   sº   dddddœi|_ tt| jdd}|jdddd	 |jdd
ddi ddii dd | ¡  |jdddd	 |jdd
ddi ddii dd | ¡  | d¡ |jdd
ddi ddii dd d S )NrŠ   rŒ   TFrÚ   rš  rß   Úsome_idr¢  rà   rá   r/   râ   Úfeature_enabled_distinct_idÚall_flags_payloads_id)	rW   r	   r   r$   r‘  rè   Ú
reset_mockr“  r–  ©r!   r–   r&   r   r   r   Ú$test_disable_geoip_default_on_decideU  sX   ýÿø
ÿø


øz/TestClient.test_disable_geoip_default_on_decidezposthog.client.Pollerc                 C   s@   dd„ }||j j_ttdd}ddig|_|  | dd¡¡ d S )Nc                   S   s   t dƒ‚)Nzhttp exception)r^   r   r   r   r   Úraise_effectˆ  s   z9TestClient.test_call_identify_fails.<locals>.raise_effectrÎ   rÏ   r    Úexampler/   )rW   Ú
raiseErrorrÐ   r	   r   rÅ   r>   r“  )r!   rÖ   Ú
patch_pollr«  r&   r   r   r   Útest_call_identify_fails…  s
   
z#TestClient.test_call_identify_failsc              
   C   s  dddddœi|_ ttd| jdd}|jdd	d
ddœddidddiid |jdddd	d
ddœd	ddœd
ddœddidœdd | ¡  |jdd	d
ddœddidddiid |jdddd	d
ddœddiddiddidœdd | ¡  |jd	i d d d |jdddd	i dd	ii dd d S )NrŠ   rŒ   TFrÚ   zhttp://app2.posthog.com)rj   r%   rë   rß   r¥  rú   rû   rü   Úx1Úy1rý   ÚxÚy)r´   rä   rå   rá   )r/   r°  )r  r²  r  râ   r/   ÚoverrideÚgroup_override)rW   r	   r   r$   r‘  rè   r¨  r–  r©  r   r   r   Ú*test_default_properties_get_added_properly‘  sˆ   ýÿü
ûþõÿÿûþõÿ
øz5TestClient.test_default_properties_get_added_properly)
ÚmacOSÚdarwin©rá   é   rn  Ú
MockPythonú3.8.10zMac OS Xú10.15.7Úmac_ver)r½  r0  r0  N)
ÚWindowsÚwin32r¹  r»  r¼  r¿  Ú10Ú	win32_ver)rÁ  r0  r0  r0  NÚLinuxÚlinuxr¹  r»  r¼  z20.04NrW  c              
   C   s  t  d¡u}t  d¡W}||j_||_||_|r|	t||ƒ_|dkrEt jd||fd ddlm} |ƒ }W d  ƒ n1 s?w   Y  n	ddlm} |ƒ }||||d	œ}||ks[J ‚W d  ƒ n1 sew   Y  W d  ƒ dS W d  ƒ dS 1 s}w   Y  dS )
zATest that we can mock platform and sys for testing system_contextzposthog.client.platformzposthog.client.sysrÄ  zposthog.client.get_os_inforV   r   )Úsystem_contextN)r8   r9   r:   r;   )	r   r   Úpython_implementationrW   Úversion_infoÚplatformr‡   Úposthog.clientrÅ  )r!   Ú_nameÚsys_platformrÇ  Úexpected_runtimeÚexpected_versionÚexpected_osÚexpected_os_versionÚplatform_methodÚplatform_returnÚdistro_infoÚmock_platformÚmock_sysrÅ  ÚcontextÚexpected_contextr   r   r   Útest_mock_system_contextß  s@   7þÿþú€	üÜÿ"ÿz#TestClient.test_mock_system_contextc                 C   s¢   ddddœddidddœ|_ ttƒ}d	}d
di}ddi}| |||¡}|tdddd tdddtddd d td ddtddd d td dddœdddœksOJ ‚d S )NrŒ   TFrÚ   r‹   z{"some": "data"}ztest-id)rŠ   r  ÚerrorsWhileComputingFlagsÚ	requestIdÚtest_distinct_idÚtest_group_typeÚtest_group_idÚtest_propertyÚ
test_value)Úpayload)r    ÚenabledÚvariantÚreasonÚmetadatarÛ   rÜ   )ÚflagsrØ  rÙ  )rW   r	   r   Úget_flags_decisionr   r   )r!   r–   r&   r/   r´   rä   r—  r   r   r   Ú2test_get_decide_returns_normalized_decide_response=  sZ   ýøÿû	ÿû	ÿûíáz=TestClient.test_get_decide_returns_normalized_decide_responsec                 C   st   t ƒ - tdƒ | j ddddi¡\}}| j ¡  |  |¡ |  |d d d¡ W d   ƒ d S 1 s3w   Y  d S )Nzcontext-session-123r/   rù   r*  rP   r4   r2  )r   r   r&   r<   r-   r=   r?   rÿ   r   r   r   Ú%test_set_context_session_with_captures  s   
ÿ

"÷z0TestClient.test_set_context_session_with_capturec                 C   sn   t ƒ * tdƒ | j dd¡\}}| j ¡  |  |¡ |  |d d d¡ W d   ƒ d S 1 s0w   Y  d S )Nzpage-context-session-456r/   rL  r4   r2  )r   r   r&   r#  r-   r=   r?   rÿ   r   r   r   Ú"test_set_context_session_with_page  s   

ÿ"ùz-TestClient.test_set_context_session_with_pagec                 C   s|   t ƒ 1 tdƒ tƒ ddœ}| j dd|¡\}}| j ¡  |  |¡ |  |d d d¡ W d   ƒ d S 1 s7w   Y  d S )Nzpage-explicit-session-789Úlandingr@  r/   zhttps://example.com/landingr4   r2  )r   r   r   r&   r#  r-   r=   r?   )r!   r4   rF   rG   r   r   r   Ú6test_set_context_session_with_page_explicit_properties‹  s   þÿ

ÿ"ózATestClient.test_set_context_session_with_page_explicit_propertiesc                 C   s†   ddl m}m} |ƒ . |dƒ | j dddddœ¡\}}| j ¡  |  |¡ |  |d	 d
 d¡ W d  ƒ dS 1 s<w   Y  dS )zETest that explicit session ID overrides context session ID in capturer   )r   r   zcontext-session-overrider/   rù   zexplicit-session-overriderP   )r2  r*  r4   r2  N)Úposthog.scopesr   r   r&   r<   r-   r=   r?   )r!   r   r   rF   rG   r   r   r   Ú,test_set_context_session_override_in_capture  s   ý

ÿ"õz7TestClient.test_set_context_session_override_in_capturec                 C   sv   t dd, tdƒ | j dddi¡\}}| j ¡  |  |¡ |  |d d d¡ W d   ƒ d S 1 s4w   Y  d S )	NF)Úcapture_exceptionszidentify-session-555r/   rO   rP   rQ   r2  )r   r   r&   rR   r-   r=   r?   rÿ   r   r   r   Ú&test_set_context_session_with_identify°  s   

"øz1TestClient.test_set_context_session_with_identify)TÚ__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r$   r(   r+   r.   rH   rI   rK   rU   rf   rg   rl   rn   rz   rƒ   r‰   r   r   r—   rÉ   rØ   rÙ   ré   rí   rî   rð   rø   r   r  r  r
  r  r  r  r  r  r  r  r  r$  r%  r&  r   ÚexpandrA   r   r9  r<  r>  rB  rT  r]  rd  ri  rl  rp  rt  ru  rx  r{  r†  r‰  r‹  rŽ  r˜  r™  rž  r£  r¤  rª  r¯  r¶  r×  ræ  rç  rè  rê  rì  rî  r   r   r   r   r      sž   

6

 

j
/
7
	
ýýø


ìÿ
ûÿþöûûõù
ùóØÿ
Bûûûûéÿ
!	


/

Möæÿ
)5
5r   )rƒ  Úunittestr   r3   r   rë  r   r   r   r   rr  r   rÉ  r	   Úposthog.requestr
   Úposthog.test.test_utilsr   Úposthog.typesr   r   Úposthog.versionr   ÚTestCaser   r   r   r   r   Ú<module>   s    