o
    gK                    @   s   d dl Z d dlZd dlZd dlmZmZ d dlm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 G dd	 d	ejZG d
d dejZG dd dejZG dd dejZG dd dejZdS )    N)parsertz)freeze_time)Client)InconclusiveMatchErrormatch_property-relative_date_parse_for_feature_flag_matching)APIError)FAKE_TEST_API_KEYc                   @   s  e Zd Zedd Zedd Zdd Zdd Ze	d	d
d Z
e	de	d	dd Ze	de	d	dd Ze	de	d	dd Ze	de	d	dd Ze	de	d	dd Ze	de	d	dd Ze	ddd Zej	ede	ddd Zej	ede	ddd Zej	ede	dd d! Zej	ede	dd"d# Zej	ede	dd$d% Zej	ede	dd&d' Zej	ede	dd(d) Zej	ede	dd*d+ Zej	ede	dd,d- Ze	de	d	d.d/ Ze	de	d	d0d1 Ze	de	d	d2d3 Ze	d4e	d	d5d6 Z d7d8 Z!e	de	d	d9d: Z"e	de	d	d;d< Z#e	de	d	d=d> Z$e	d	d?d@ Z%e	ddAdB Z&e	d	dCdD Z'e	ddEdF Z(e	d4e	ddGdH Z)e	d4e	ddIdJ Z*e	d4e	d	dKdL Z+e	ddMdN Z,e	ddOdP Z-e	ddQdR Z.e	ddSdT Z/e	ddUdV Z0ej	ede	ddWdX Z1e	ddYdZ Z2d[S )\TestLocalEvaluationc                 C      t jtd| _| j  d S Ncapturemockpatchobjectr   capture_patchstartcls r   V/var/www/visachat/venv/lib/python3.10/site-packages/posthog/test/test_feature_flags.py
setUpClass      zTestLocalEvaluation.setUpClassc                 C      | j   d S Nr   stopr   r   r   r   tearDownClass      z!TestLocalEvaluation.tearDownClassc                 C      t d|| d| _dS zMark the failure handlerFAILTNprintfailedselfebatchr   r   r   set_fail      
zTestLocalEvaluation.set_failc                 C      d| _ tt| jd| _d S NF)on_errorr&   r   r
   r+   clientr(   r   r   r   setUp      zTestLocalEvaluation.setUpposthog.client.getc                 C   sv   dddddddddgd	d
gddgidg| j _| j jddddid}| j jddddid}| | | | d S )N   Beta Featureperson-flagTgroupsregionexactUSApersonkeyoperatorvaluetyped   
propertiesrollout_percentageidnamer?   is_simple_flagactivefilterssome-distinct-idperson_propertiessome-distinct-2Canada)r1   feature_flagsget_feature_flag
assertTrueassertFalse)r(   	patch_getfeature_flag_matchnot_feature_flag_matchr   r   r   test_flag_person_properties"   s4   


z/TestLocalEvaluation.test_flag_person_propertiesposthog.client.decidec                 C   sT  ddddddddddgd	d
gddgddg| j _ddd| j _| | j jdddddiid | | j jdddddiid | | j jddddidddiid | | j jddddidddiid | | j jddddidddiid | |jd dddii|_i | j _| | j jddddidddiidd | |jd d S )Nr6   r7   z
group-flagTr   rI   r;   zProject Name 1group)group_type_indexr?   r@   rA   rB   #   rD   )aggregation_group_type_indexr9   rG   companyproject)01rM   )group_propertiesrP   zProject Name 2amazon_without_rollout)r9   rc   amazonfeatureFlagsdecide-fallback-value)	r1   rR   group_type_mappingrU   rS   rT   assertEqual
call_countreturn_value)r(   rV   patch_decider   r   r   test_flag_group_propertiesH   s   	
	




z.TestLocalEvaluation.test_flag_group_propertiesc                 C   s  dddii|_ tttd}dddddd	d
ddgdddddgddgddddddgddgddddddgddgddgidg|_| |jdddddd | |jd | |jddddd d | |jd | |jdd!ddd dd | |jd |  | |jddddidd | |jd |  | |jddd
didd | |jd |  | 	|jdd!ddd"dd#d | |jd d S )$Nrf   complex-flagrg   personal_api_keyr6   r7   FTr9   r:   r;   r<   r=   r>   rI   AloharC   rD   emailza@b.comzb@c.com   doesnt_matterrb   2r   rG   rM   r:   rI   rN   z some-distinct-id_within_rollout?)r:   rr   z!some-distinct-id_outside_rollout?X)r:   rr   rI   rt   )
rk   r   r
   rR   rT   rS   ri   rj   
reset_mockrU   r(   rV   rl   r1   r   r   r   !test_flag_with_complex_definition   s   5z5TestLocalEvaluation.test_flag_with_complex_definitionc                 C   s   ddddi|_ tttd}dddd	d	d
ddd ddgddgidddddd	d
dddgddgddgidg|_|dd}| |d | |jd |dd}| |d | |jd d S )Nrf   alakazam	alakazam2beta-featurebeta-feature2ro   r6   r7   r~   Tr9   rH   b   cohortr?   rA   r@   rB   rC   rD   rG      r   Fr:   r;   r<   r=   r>   rM   )rk   r   r
   rR   rS   ri   rj   r(   rV   rl   r1   rW   r   r   r   %test_feature_flags_fallback_to_decide  sL   )z9TestLocalEvaluation.test_feature_flags_fallback_to_decidec                 C   s  ddddi|_ tttd}dddd	d	d
ddd ddgddgidddddd	d
dddgddgddgidg|_|jddd	d}| |d  | |jd |jddd	d}| |d  | |jd |jddd	d}| |d  |jddd	d}| |d  | |jd d S )Nrf   r{   r|   r}   ro   r6   r7   r~   Tr9   rH   r   r   r   rC   rD   rG   r   r   Fr:   r;   r<   r=   r>   rM   only_evaluate_locallyr   )rk   r   r
   rR   rS   ri   rj   feature_enabledr   r   r   r   Mtest_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_trueP  sV   *zaTestLocalEvaluation.test_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_truec              	   C   s   di i|_ tttd}ddddddg dd	gid
g|_| |dd | |dd | |dd | |jd | |dd | |jd d S )Nrf   ro   r6   r7   r~   Tr9   r   rD   rG   rM   r   r   )	rk   r   r
   rR   rU   rS   r   ri   rj   ry   r   r   r   Ctest_feature_flag_never_returns_undefined_during_regular_evaluation  s*   
zWTestLocalEvaluation.test_feature_flag_never_returns_undefined_during_regular_evaluationc                 C   sb   t dd|_tttd}g |_| |dd | |jd | |	dd | |jd d S )Ni  zDecide errorro   r   rM   r6   r   )
r	   side_effectr   r
   rR   assertIsNonerS   ri   rj   r   ry   r   r   r   4test_feature_flag_return_none_when_decide_errors_out  s   zHTestLocalEvaluation.test_feature_flag_return_none_when_decide_errors_outc              
   C   sf   dddii|_ ttdd}ddddd	d
dg d
dgid	dg|_| |ddd | |jd d S )Nrf   r~   rg   testro   r6   r7   FTrC   r9   rD   )rH   rI   r?   rJ   rK   rF   rL   ensure_experience_continuitydistinct_id)rk   r   r
   rR   rT   rS   ri   rj   r(   rl   r1   r   r   r   5test_experience_continuity_flag_not_evaluated_locally  s&   zITestLocalEvaluation.test_experience_continuity_flag_not_evaluated_locallyr   c                 C   s   dddddi|_ | j}ddddd	d
dg d
dgidddddd	dg ddgidddddd	ddddgddgidg|_| |ddddd | |jd | |jd d S )Nrf   	variant-1	variant-2F)r~   r   disabled-featurer6   r7   r~   TrC   r9   rD   rH   rI   r?   rJ   rK   rF   rL   r   r   r   rG      r   countryUSr?   rA   r   rk   r1   rR   ri   get_all_flagsrj   r(   rl   patch_capturer1   r   r   r    test_get_all_flags_with_fallback  s^   
1
z4TestLocalEvaluation.test_get_all_flags_with_fallbackc              
   C   s   ddddddd|_ | j}ddd	d
ddg ddgddidddddd
dg ddgddidddddd
ddddgddgddiddg|_| |dd ddd | |jd | |jd d S )Nr   r   r}   rC   ,  rf   featureFlagPayloadsr6   r7   r~   FTrD   truesome-payloadr9   payloadsr   r   r   r   another-payloadrG   r   r   r   r   r   	payload-3r   r   rk   r1   rR   ri   get_all_flags_and_payloadsrj   r   r   r   r   -test_get_all_flags_and_payloads_with_fallback  sj   
:zATestLocalEvaluation.test_get_all_flags_and_payloads_with_fallbackc                 C   sT   ddddi|_ | j}g |_| |dddd | |jd | |jd d S )Nrf   r   r   r}   r   r6   r   r   r   r   r   r   2test_get_all_flags_with_fallback_empty_local_flagsi  s   zFTestLocalEvaluation.test_get_all_flags_with_fallback_empty_local_flagsc                 C   s`   ddddddd|_ | j}g |_| |dd ddd | |jd	 | |jd
 d S )Nr   r   r}   rC   r   r   r   r   r6   r   r   r   r   r   r   ?test_get_all_flags_and_payloads_with_fallback_empty_local_flagsv  s   zSTestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_empty_local_flagsc              
   C   s   ddddi|_ | j}ddddd	d
dg d
dgidddddd	dg ddgidg|_| |dd	dd | |jd | |jd d S )Nrf   r   r   r}   r6   r7   r~   FTrC   r9   rD   r   r   r   r   rG   r   r~   r   r   r   r   r   r   #test_get_all_flags_with_no_fallback  s>   !z7TestLocalEvaluation.test_get_all_flags_with_no_fallbackc              	   C   s   ddddi|_ | j}ddddd	d
g d
dgddidd}ddddd	g ddgddidd}||g|_||d|_| |dd ddi | |jd | |jd d S )Nrf   r   r   r}   r6   r7   r~   FTrC   rD   r   newr   r   r   r   r   r   rG   r   r   r   rk   r1   rR   feature_flags_by_keyri   r   rj   )r(   rl   r   r1   
basic_flagdisabled_flagr   r   r   0test_get_all_flags_and_payloads_with_no_fallback  sL   zDTestLocalEvaluation.test_get_all_flags_and_payloads_with_no_fallbackc                 C   s   ddddi|_ | j}ddddd	d
dg d
dgidddddd	dg ddgidddddd	ddddgddgidg|_| |jdd	dd	dd | |jd | |jd d S )Nrf   r   r   r}   r6   r7   r~   FTrC   r9   rD   r   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   >test_get_all_flags_with_fallback_but_only_local_evaluation_set  s\   
1zRTestLocalEvaluation.test_get_all_flags_with_fallback_but_only_local_evaluation_setc              	   C   s   ddddddd|_ | j}ddd	d
ddg ddgddidd}dddd
dg ddgddidd}dddd
ddddgddgddidd}|||g|_|||d|_| |jdddd d	di | |jd | |jd d S ) Nr   r   r}   rC   r   r   r6   r7   r~   FTrD   r   r   r   r   r   r   r   r   rG   r   r   r   r   r   r   )r~   r   r   r   r   r   r   )r(   rl   r   r1   flag_1flag_2flag_3r   r   r   Ktest_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_set%  sn   
z_TestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_setc              
   C   s   | j }dddddddg ddgid	d
dddddg ddgidg|_| |dddd | |jd | |jd dddddddg ddgid	d
dddddg ddgidg|_| |dddd | |jd | |jd d S )Nr6   r7   r~   FTrC   r9   rD   r   r   r   r   rG   r   r   )r1   rR   ri   r   rj   r   r   r   r   #test_compute_inactive_flags_locallyr  sv   !!z7TestLocalEvaluation.test_compute_inactive_flags_locallyc                 C   s   t ttd}t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gddgiig|_|jddd d d d dd}| |d | |jd | |jd |jdddd d!d"dd}d S )#Nro   r6   rI   r7   r?   r~   rJ   TrK   rL   r9   latestBuildVersionr=   z.+regexr?   rB   rA   r@   latestBuildVersionMajor23gtlatestBuildVersionMinor31latestBuildVersionPatchra   rC   )variantrE   rF   rM   )r   r   r   r   rN   Fr   z24.32..12432rb   )r   r
   rH   rR   rS   ri   rj   r   r   r   r   /test_feature_flags_local_evaluation_None_values  sR   
zCTestLocalEvaluation.test_feature_flags_local_evaluation_None_valuesc                 C   sB  t ttd}dddddddd	d
gddddd ddgddgidg|_ddddddd	dgddgdddd	dgddgdd|_|jddddid}| |d | |jd  | |jd  |jddd
dd!d}| |d | |jd  | |jd  |jddd
dd"d}| |d | |jd  | |jd  d S )#Nro   r   r7   r~   FTr9   r:   r;   r<   r=   r>   rH   r   r   r   rC   rD   rG   ORr6   r?   rA   rB   nationUKrB   valuesANDotherthing98rb   rM   rN   r   r:   r   r:   r   )r   r
   rR   cohortsrS   ri   rj   r   r   r   r   /test_feature_flags_local_evaluation_for_cohorts  sf   	

zCTestLocalEvaluation.test_feature_flags_local_evaluation_for_cohortsc                 C   s~  t ttd}dddddddd	d
gddddd ddgddgidg|_ddddddd	dgddgdddd	dgdddgdd|_|jddddid }| |d | |jd! | |jd! |jddd
dd"d }| |d | |jd! | |jd! |jddd
dd#d }| |jd | |jd! |  |jddd
d$d#d }| |d | |jd! | |jd! d S )%Nro   r   r7   r~   FTr9   r:   r;   r<   r=   r>   rH   r   r   r   rC   rD   rG   r   r6   r   r   r   r   r   r   r   )r?   r@   rA   rB   negationr   rM   rN   r   r   r   thing2)r   r
   rR   r   rS   ri   rj   rx   r   r   r   r   7test_feature_flags_local_evaluation_for_negated_cohorts@  st   	

zKTestLocalEvaluation.test_feature_flags_local_evaluation_for_negated_cohortszposthog.client.Pollerc                 C   s   ddddddddd	dgd
did|_ ttdd}td |  W d    n1 s-w   Y  | t|jd | |jd d d | |jd
di | |j	
 d | |jd d S )Nr6   r7   r~   T)rH   rI   r?   rK   r   zAlpha Featurezalpha-featureFra   r_   )flagsrh   r   ro   z2020-01-01T12:01:00.0000Zr   r?   z2020-01-01T12:01:00+00:00)rk   r   r
   r   load_feature_flagsri   lenrR   rh   _last_feature_flag_poll	isoformatrj   )r(   rV   
patch_pollr1   r   r   r   test_load_feature_flags  s   

z+TestLocalEvaluation.test_load_feature_flagsc                 C   sl   t ttd}| jddd}|  | |jd d W d    n1 s%w   Y  d|_| t|j d S )Nro   posthogERROR)levelr   zERROR:posthog:[FEATURE FLAGS] Error loading feature flags: To use feature flags, please set a valid personal_api_key. More information: https://posthog.com/docs/api/overviewT)	r   r
   
assertLogsr   ri   outputdebugassertRaisesr	   )r(   r1   logsr   r   r   !test_load_feature_flags_wrong_key  s   z5TestLocalEvaluation.test_load_feature_flags_wrong_keyc              
   C   sP   t t}dddddddg ddgidg|_| |dd	 | |jd
 d S )Nr6   r7   r~   TrC   r9   rD   r   r   r   r   r
   rR   rT   r   ri   rj   ry   r   r   r   test_feature_enabled_simple  "   z/TestLocalEvaluation.test_feature_enabled_simplec              
   C   sP   t t}dddddddg ddgidg|_| |dd	 | |jd d S )
Nr6   r7   r~   Tr   r9   rD   r   r   )r   r
   rR   rU   r   ri   rj   ry   r   r   r   $test_feature_enabled_simple_is_false  r   z8TestLocalEvaluation.test_feature_enabled_simple_is_falsec              
   C   sP   t t}dddddd dg d dgidg|_| |dd | |jd	 d S )
Nr6   r7   r~   Tr9   rD   r   r   r   r   ry   r   r   r   =test_feature_enabled_simple_is_true_when_rollout_is_undefined  r   zQTestLocalEvaluation.test_feature_enabled_simple_is_true_when_rollout_is_undefinedc              
   C   sH   t t| jd}dddddddg ddgid	g|_| |dd
 d S )N)project_api_keyr/   r6   r7   r~   TrC   r9   rD   r   r   )r   r
   r+   rR   rT   r   r(   rV   r1   r   r   r   0test_feature_enabled_simple_with_project_api_key  s    zDTestLocalEvaluation.test_feature_enabled_simple_with_project_api_keyc              
   C   sb   dddii|_ ttdd}ddddd	d
dg d
dgidg|_| |dd | |jd d S )Nrf   r~   r   r   ro   r6   r7   FTrC   r9   rD   r   r   r   )rk   r   r
   rR   rT   r   ri   rj   r   r   r   r   *test_feature_enabled_request_multi_variate  s$   z>TestLocalEvaluation.test_feature_enabled_request_multi_variatec                 C   s>   t t}dddddddg igidg|_| |dd d S )	Nr6   r7   r~   Tr9   rE   rG   r   )r   r
   rR   rT   r   r   r   r   r   6test_feature_enabled_simple_without_rollout_percentage-  s   zJTestLocalEvaluation.test_feature_enabled_simple_without_rollout_percentagec                 C   sz   dddii|_ ttdd}ddddd	d
g d
dgdddddddgiddg|_| |ddd | |jd d S )Nrf   r~   r   r   ro   r6   r7   FTrC   rD   variants2   )r?   rF   r   r9   multivariater   r   r   rk   r   r
   rR   ri   rS   rj   r   r   r   r   test_get_feature_flagB  s,   z)TestLocalEvaluation.test_get_feature_flagc                 C   sL   t t}g |_di i|_| |dd tdd|_| |dd d S )Nrf   doesnt-existr   i  zdecide error)	r   r
   rR   rk   rU   r   r	   r   r   r(   rl   r   r1   r   r   r   !test_feature_enabled_doesnt_existb  s   
z5TestLocalEvaluation.test_feature_enabled_doesnt_existc                 C   s6   t tdd}g |_dddii|_| |dd d S )Nr   ro   rf   zfeature-flagTr   )r   r
   rR   rk   rT   r   r   r   r   r   "test_personal_api_key_doesnt_existn  s   z6TestLocalEvaluation.test_personal_api_key_doesnt_existc                 C   s:   dd }||j j_ttdd}g |_| |dd d S )Nc                   S   s   t d)Nzhttp exception)	Exceptionr   r   r   r   raise_effect{  s   zGTestLocalEvaluation.test_load_feature_flags_error.<locals>.raise_effectr   ro   r   r   )rk   
raiseErrorr   r   r
   rR   rU   r   )r(   rV   r   r   r1   r   r   r   test_load_feature_flags_errorx  s
   
z1TestLocalEvaluation.test_load_feature_flags_errorc                 C   s   dddii|_ ttdd}ddddd	d
dddddgd
dddddgdddddddddddddgiddg|_| |jddddidd | |dd d | |jd! d S )"Nrf   r~   r   r   ro   r6   r7   FTrC   rr   r=   test@posthog.comr;   r   second-variantrE   rF   r   r   first-variantrF   r   r   First Variantr?   rI   rF   Second Variant   third-variantThird Variantr   r   test_idrN   
example_idr   r   r   r   r   r   ,test_get_feature_flag_with_variant_overrides  <   


z@TestLocalEvaluation.test_get_feature_flag_with_variant_overridesc                 C   s   dddii|_ ttdd}ddddd	d
dddddgd
dddddddgd
dddddgdddddddddddddgiddg|_| |jddddidd | |jdd ddidd | |jd! d S )"Nrf   r~   r   r   ro   r6   r7   FTrC   rr   r=   r  r;   r   r  r  r  r   r  r   r  r	  r
  r  r  r  r   r   r  rN   r  r   r   r   r   r   r   )test_flag_with_clashing_variant_overrides  sL   



%z=TestLocalEvaluation.test_flag_with_clashing_variant_overridesc                 C   s   dddii|_ ttdd}ddddd	d
dddddgd
dddddgdddddddddddddgiddg|_| |jdd ddid!d | |dd"d | |jd# d S )$Nrf   r~   r   r   ro   r6   r7   FTrC   rr   r=   r  r;   r   	second???r  r   first??r  r   r  r  r	  r  r
  r  r  r  r   r   r  rN   r  r   r   r   r   r   r   (test_flag_with_invalid_variant_overrides  r  z<TestLocalEvaluation.test_flag_with_invalid_variant_overridesc                 C   s   dddii|_ ttdd}ddddd	d
dd
idddddgd
dddddgdddddddddddddgiddg|_| |jddddid d | |dd!d | |dd"d | |jd# d S )$Nrf   r~   r   r   ro   r6   r7   FTrC   rF   rr   r=   r  r;   r   r  r  r   r  r  r   r  r  r	  r
  r  r  r   r   r  rN   r  
another_idr   r   r   r   r   r   )test_flag_with_multiple_variant_overrides
  sB   


!z=TestLocalEvaluation.test_flag_with_multiple_variant_overridesc              
   C   s   ddddddddgdd	gd
dgddidd}|g| j _d|i| j _| | j jddddidd | | j jdddddidd | |jd d S )Nr6   r7   r8   Tr:   r;   r<   r=   r>   rC   rD   r   r   r   rG   rM   rN   match_valuerO   r   r1   rR   r   ri   get_feature_flag_payloadrj   )r(   rl   r   r   r   r   (test_boolean_feature_flag_payloads_local8  s@   

z<TestLocalEvaluation.test_boolean_feature_flag_payloads_localc                 C   sz   ddiddid|_ | | jjddddidd | | jjdddddid	d | |jd
 | |jd |  d S )Nr8   Tr   r   rM   r:   r<   rN   r  r   r6   )rk   ri   r1   r  rj   rx   )r(   rl   r   r   r   r   (test_boolean_feature_flag_payload_decidec  s    
z<TestLocalEvaluation.test_boolean_feature_flag_payload_decidec                 C   s   ddddddddd	d
dgddddddgdddddddddddddgidddiddd}|g| j _d|i| j _| | j jdd dd	id!ddi | | j jdd ddd	id"ddi | | j jdd ddd	id"d | |jd# d S )$Nr6   r7   r~   FTrC   rr   r=   r  r;   r   r  r  r   r  r  r   r  r  r	  r  r
  r  r  r  r   ajson)r  r  )r9   r   r   r   r  rN   r  r   r  )r(   rl   multivariate_flagr   r   r   'test_multivariate_feature_flag_payloadsx  sV   




z;TestLocalEvaluation.test_multivariate_feature_flag_payloadsN)3__name__
__module____qualname__classmethodr   r   r+   r3   r   r   rY   rm   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   r   r  r  r  r  r  r  r  r!  r   r   r   r   r      s    


%Yr7A 
=J)4;KO4EP






(
3
(
-
*r   c                   @   sn   e Zd Zd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dd Zdd ZdS )TestMatchPropertiesNc                 C   s$   ||d}|d ur| d|i |S )Nr   r@   )update)r(   r?   rA   r@   resultr   r   r   property  s   
zTestMatchProperties.propertyc                 C   sz  | j ddd}| t|ddi | t|ddi | t|ddi | t|dd i | t t|ddi t|i  W d    n1 sKw   Y  | j dddd}| t|ddi | t|ddi | j dg d	dd}| t|dd
i | t|ddi | t|ddi | t|ddi | t t|ddi W d    d S 1 sw   Y  d S )Nr?   rA   r   value2 key2r;   r?   rA   r@   value1r*  value3r/  r0  value4r)  rT   r   rU   r   r   )r(   
property_a
property_b
property_cr   r   r   test_match_properties_exact  s(   "z/TestMatchProperties.test_match_properties_exactc                 C   sL  | j dddd}| t|ddi | t|ddi | t|dd i | j dg ddd}| t|ddi | t|dd	i | t|dd
i | t|ddi | t|dd i | t|ddi | t|ddi | t|ddi | t t|ddi t|ddi W d    d S 1 sw   Y  d S )Nr?   rA   is_notr-  r*  r+  r.  r1  value5value6r0  r/  r,  r2  )r(   r3  r5  r   r   r   test_match_properties_not_in  s"   "z0TestMatchProperties.test_match_properties_not_inc                 C   s   | j dddd}| t|ddi | t|ddi | t|ddi | t|dd i | t t|ddi t|i  W d    d S 1 sMw   Y  d S )Nr?   is_setr-  rA   r*  r+  r,  r2  )r(   r3  r   r   r   test_match_properties_is_set  s   "z0TestMatchProperties.test_match_properties_is_setc                 C   s   | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|dd	i | t|dd
i | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi d S )Nr?   valUe	icontainsr-  rA   r*  r0  vaLue4343tfvalue5Alakazam{   3C  val3threer)  rT   r   rU   )r(   r3  r4  r   r   r   test_match_properties_icontains  s   z3TestMatchProperties.test_match_properties_icontainsc                 C   s  | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|dd	i | t|dd
i | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi d S )Nr?   z\.com$r   r-  z	value.comz
value2.comz.com343tfvalue5rA  rB  valuecomz	value\comrC  rD  rE  rF  z?*rA   r*     4rG  r(   r3  r4  r5  
property_dr   r   r   test_match_properties_regex  s(   z/TestMatchProperties.test_match_properties_regexc                 C   s  | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|dd	i | j ddd
d}| t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | j ddd
d}| t|ddi | t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi d S )Nr?   r6   r   r-  r   r   r   r   ltrb   rC  gte43lte414244,   *   3029100rC   123aloha123z      rG  )r(   r3  r4  r5  rM  
property_e
property_fr   r   r   $test_match_properties_math_operators$  sD   z8TestMatchProperties.test_match_properties_math_operatorsc                 C   s  | j dddd}| t|ddi | t|ddi | t|dtddd	i | t|dtddd	d
ddi | t|dtjddd	d
ddtddi | t|dtdi | 	t|ddi | 
t t|dd
i W d    n1 sw   Y  | 
t t|ddi W d    n1 sw   Y  | j dddd}| t|ddi | t|ddi | t|dtddd	i | t|dtdi | 	t|ddi | 
t t|ddi W d    n1 sw   Y  | j dddd}| 
t t|dd
i W d    n	1 s!w   Y  | j dddd}| 	t|ddi | t|ddi | t|ddi | t|ddi | 	t|ddi | t|ddi | 	t|ddi d S )Nr?   
2022-05-01is_date_beforer-  
2022-03-01
2022-04-30  rJ  rs   r6   r   r   Europe/Madridtzinfo
2022-05-30abcdefis_date_after
2022-05-02     z2022-04-05 12:34:12 +01:00
2022-03-30z2022-04-05 12:34:11 +01:00z2022-04-05 12:34:13 +01:00z2022-04-05 11:34:11 +00:00z2022-04-05 11:34:13 +00:00)r)  rT   r   datetimedater   gettzr   parserU   r   r   rL  r   r   r   "test_match_property_date_operatorsW  sN   $"z6TestMatchProperties.test_match_property_date_operatorsrd  c                 C   s  | j dddd}| t|ddi | t|ddi | t|dtddd	d
ddi | t|dtddd	i | t|dtddd	dddi | t|dtjddd	d
ddtddi | t|dt	di | t|ddi | 
t t|dd
i W d    n1 sw   Y  | 
t t|ddi W d    n1 sw   Y  | j dddd}| t|ddi | t|ddi | t|dtddd	i | t|dt	di | t|ddi | 
t | t|ddi W d    n	1 sw   Y  | j dddd}| 
t | t|dd
i W d    n	1 s:w   Y  | t|ddi | j dddd}| t|ddi | t|ddi | t|ddi | t|ddi | t|ddi | j dddd}| t|ddi | t|ddi | j dddd}| t|ddi | t|dd i | j dd!dd}| t|dd"i | t|dd#i | t|dd$i | j dd%dd}| t|dd&i | t|dd'i | j dd(dd}	| t|	dd)i | t|	dd*i | j dd+dd}
| t|
ddi | t|
dd,i | j dd-dd}| t|ddi | t|dd.i | t|dd/i | j dd0dd}| t|ddi | t|dd1i | j dd%dd}| t|dd2i | t|dd3i | j dd(dd}| t|ddi | t|dd*i | t|dd4i | t|dd5i | t|dd6i d S )7Nr?   z-6hre  r-  rf  rg  rh  rJ  rs   r6   r   r      ri  rj  rl  rm  1hrn  ro  rp  rq  12drr  z2022-04-05 12:34:11+01:00z2022-04-19 01:34:11+02:00z2022-04-19 02:00:01+02:00z2022-05-01 00:00:00z2022-04-30 22:00:00z-1dz2022-04-29 23:59:00z2022-04-30 00:00:011wz2022-04-23 00:00:00z2022-04-24 00:00:00z2022-04-24 00:00:011mz2022-03-01 00:00:00z2022-04-05 00:00:001yz2021-04-28 00:00:00z2021-05-01 00:00:01122hz2022-04-23 01:00:002dz2022-04-29 00:00:01z2022-04-29 00:00:00z-02wz2022-04-16 00:00:00z2022-04-01 00:00:01z2022-04-01 00:00:00z2021-05-01 00:00:00z2021-04-30 00:00:00z2021-03-01 12:13:00)r)  rT   r   rs  rU   rt  r   ru  r   rv  r   r   )r(   r3  r4  r5  rM  ra  rb  
property_g
property_h
property_i
property_j
property_k
property_l
property_m
property_nr   r   r   +test_match_property_relative_date_operators  s   $$ z?TestMatchProperties.test_match_property_relative_date_operatorsc                 C   s  | j dddd}| t|dd i | t|ddi | j dd dd}| t|dd i | j dddd}| t|dd i | t|dd	i | j dd
dd}| t|dd i | j dddd}| t|dd i | j dddd}| t|dd i | j dddd}| t|dd i | j dddd}| t|dd i | j dddd}	| t|	dd i | j dddd}
| t|
dd i | j dddd}| t|dd i | j dddd}| t | t|ddi W d    d S 1 sw   Y  d S )Nr?   noner7  r-  nonr;  nor>  smhNor   r6   r   rP  xyzrR  OorT  rd  re  rn  random)r)  rU   r   rT   r   r   )r(   r3  r4  r5  rM  property_d_lower_casera  rb  r  r  r  r  r  r   r   r   +test_none_property_value_with_all_operators  s8   "z?TestMatchProperties.test_none_property_value_with_all_operatorsc                 C   s^   | j dddd}| t}t|ddi W d    n1 sw   Y  | t|jd d S )Nr?   rd  
is_unknownr-  r  zUnknown operator is_unknown)r)  r   r   r   ri   str	exception)r(   r3  exception_contextr   r   r   test_unknown_operator  s
   z)TestMatchProperties.test_unknown_operatorr   )r"  r#  r$  r)  r6  r:  r<  rH  rN  rc  rw  r   r  r  r  r   r   r   r   r&    s    
34
f(r&  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestRelativeDateParsingc                 C   s   t da tdd u sJ tdd u sJ tdd u sJ tdd u s%J tdd u s-J tdd u s5J tdd u s=J td	d u sEJ td
d u sMJ tdd usUJ tdd us]J W d    d S 1 shw   Y  d S )N2020-01-01T12:01:20.1340Zrb   1xz1.2y1z1sz123344000.134mbazinga000bello000hello000h1000h)r   r   r2   r   r   r   test_invalid_input"  s   
"z*TestRelativeDateParsing.test_invalid_inputc                 C   s$   t dd u sJ t dd u sJ d S )N1000000h100000000000000000y)r   r2   r   r   r   test_overflow1  s   z%TestRelativeDateParsing.test_overflowc                 C   s2  t d tdtjdddddddtdd	ksJ td
tjdddddddtdd	ks1J tdtjdddddddtdd	ksGJ tdtjdddddddtdd	ks]J tdtjdddddddtdd	kssJ tdtdks}J tdtdksJ W d    d S 1 sw   Y  d S )Nr  ry    r6         p UTCrj  2h
   24h        30h   48hrs   1dr  r   r   rs  r   ru  r2   r   r   r   test_hour_parsing5  s6   






"z)TestRelativeDateParsing.test_hour_parsingc                 C   s  t d tdtjdddddddtd	d
ksJ tdtjdddddddtd	d
ks1J tdtjdddddddtd	d
ksGJ tdtjdddddddtd	d
ks]J tdtjdddddddtd	d
kssJ tdtdks}J W d    d S 1 sw   Y  d S )Nr  r  r  r  r  r6   r  r  r  rj  r  rs   7dr  14d   30dr   r{  r  r2   r   r   r   test_day_parsingN  s(   





"z(TestRelativeDateParsing.test_day_parsingc                 C   s  t d tdtjdddddddtd	d
ksJ tdtjdddddddtd	d
ks1J tdtjdddddddtd	d
ksGJ tdtjdddddddtd	d
ks]J tdtjdddddddtd	d
kssJ tdtdks}J W d    d S 1 sw   Y  d S )Nr  r{  r  r  r  r6   r  r  r  rj  2wr  4wrJ  8wr  r  r|  r  r2   r   r   r   test_week_parsingd  s(   





"z)TestRelativeDateParsing.test_week_parsingc                 C   s0  t d tdtjdddddddtdd	ksJ td
tjdddddddtdd	ks1J tdtjdddddddtdd	ksGJ tdtjdddddddtdd	ks]J tdtjdddddddtdd	kssJ tdtdks}J W d    n1 sw   Y  t d} tdtjddddddtdd	ksJ td
tjddddddtdd	ksJ tdtjddddddtdd	ksJ tdtjddddddtdd	ksJ tdtjddddddtdd	ksJ tdtdksJ W d    d S 1 sw   Y  d S )Nr  r|  r  r  r6   r  r  r  rj  2mr  4m	   8mrp  r}  12mz2020-04-03T00:00:00r  r   r   r      rJ  r  r2   r   r   r   test_month_parsingz  sX   












$z*TestRelativeDateParsing.test_month_parsingc                 C   s   t da tdtjdddddddtdd	ksJ td
tjdddddddtdd	ks1J tdtjdddddddtdd	ksGJ tdtjdddddddtdd	ks]J W d    d S 1 shw   Y  d S )Nr  r}  r  r6   r  r  r  r  rj  2yi  4yi  8yi  r  r2   r   r   r   test_year_parsing  s   




"z)TestRelativeDateParsing.test_year_parsingN)
r"  r#  r$  r  r  r  r  r  r  r  r   r   r   r   r  !  s    +r  c                   @   s   e Zd Zejededdd Zejededdd Zejededdd Z	ed	d
ejededdd Z
dS )TestCaptureCallsr   rZ   c              	   C   s  dddii|_ tttd}ddddd	d
dddgddgidg|_| |jdddddd | |jd |jdddd	d	d	di d d |	  | |jdddddd | |jd |	  | |jdddddd | |jd |jdddd	d	d	di d d |	  | |jddddddd | |jd |	  | |jdddddddidd | |jd | |jd |jdddddddddid d d S ) Nrf   decide-flagdecide-valuero   r6   r7   rn   FTr9   r:   r<   r   rC   rD   rG   rM   rq   rv   rN   $feature_flag_called$feature_flag$feature_flag_responselocally_evaluatedz$feature/complex-flagr9   disable_geoipr   some-distinct-id2zsome-distinct-id345)rO   send_feature_flag_eventsorganizationorg1)rO   r9   )r  r  r  z$feature/decide-flag)
rk   r   r
   rR   rT   rS   ri   rj   assert_called_withrx   r   r   r   r   test_capture_is_called  s   
	
z'TestCaptureCalls.test_capture_is_calledc              	   C   s  ddiddid|_ tttd}dddddd	d
ddgddgidg|_|jdddddd | |jd |jddddddddi d d |  |  |jdddddd | |jd |  |jdddddd | |jd |jddddddddi d d |  d S )Nr8   Tr   r   )api_keyrp   r6   r7   Fr9   r:   r<   r   rC   rD   rG   rM   rq   rv   )r?   r   rO   r  )r  r  z$feature_flag_payloadr  z$feature/person-flagr  r   r  )	rk   r   r
   rR   r  ri   rj   r  rx   r   r   r   r   2test_capture_is_called_in_get_feature_flag_payload$	  sr   
zCTestCaptureCalls.test_capture_is_called_in_get_feature_flag_payloadc              	   C   s   dddii|_ tttdd}dddd	dd
dddgddgidg|_|jdddddd	d |jdddddddi d	d d S )Nrf   r  r  T)rp   r  r6   r7   rn   Fr9   r:   r<   r   rC   rD   rG   rM   rq   rv   )rO   r  r  r  r  )rk   r   r
   rR   rS   r  r   r   r   r   (test_disable_geoip_get_flag_capture_callv	  s@   

z9TestCaptureCalls.test_disable_geoip_get_flag_capture_callzposthog.client.MAX_DICT_SIZErC   c              	   C   s   t ttd}ddddddg dd	gid
g|_tdD ].}d| }|jd|dddd |j|ddddddi d d | t|j|d d  qd S )Nro   r6   r7   rn   FTr9   rC   rD   rG     rM   r<   rq   rv   rN   r  r  r  )	r   r
   rR   rangerS   r  ri   r   #distinct_ids_feature_flags_reported)r(   rl   r   r1   ir   r   r   r   0test_capture_multiple_users_doesnt_out_of_memory	  s<   
zATestCaptureCalls.test_capture_multiple_users_doesnt_out_of_memoryN)r"  r#  r$  r   r   r   r   r  r  r  r  r   r   r   r   r    s    lP
)r  c                   @   sX   e Zd Zedd Zedd Zdd Zdd Ze	d	d
d Z
e	d	dd ZdS )TestConsistencyc                 C   r   r   r   r   r   r   r   r   	  r   zTestConsistency.setUpClassc                 C   r   r   r   r   r   r   r   r   	  r    zTestConsistency.tearDownClassc                 C   r!   r"   r$   r'   r   r   r   r+   	  r,   zTestConsistency.set_failc                 C   r-   r.   r0   r2   r   r   r   r3   	  r4   zTestConsistency.setUpr5   c              	   C   st   ddddddg ddgidg| j _g d	}td
D ]}d| }| j d|}|| r2| | q| | qd S )Nr6   r7   zsimple-flagTr9   -   rD   rG   (  FTTFTFFTFTFTTFTFFFTTFTFFTFTTFFFTTTTFFFFFFTTFTTFFFTTFFFFTFTFTFTTFTFTFTTFFTFFTFTFFTFFFTTFTTFTTTTTFTTFFTTTTFFTFTTTFFFFFTFFTTTFFTFTFFTFFFFFFFFTTFFTFFTTFFTFTFTTTFFFTFFFFTTFTTFTFTTFTFTTTFTFFTTFTFTTFFTTTTFTTFFTFTFFTTFTFTFFFFFFFTFTTFFTFTFFFTFTFFFTFFTFTTFFFFTFFFFFFFFFFFFFTTFTFTTFTFTFFFTTTTFFFFFTTTFFTTFFFFFTFTTTTFTTTFFTFTFFTTTFTFFFTTFTFTFTTTTTFFTFTFTTTFTFTTFTTTTTFFFFFTFTFFTTFFFTFTTTTFFFFTTFFTTFTTTTFTTTFFTTFFTFFTFFFFFFFFFFTTFFTFFTFTFFTFFFFFFTFFFFFFFFFTTTFFFTFTFFFTFFFFFFFTFFFFFFFFTFTFTTTFFFTTTFTFTTFFFTFFFFTFTFTTFTFFFTFFTTFTFFFFFFTTFFTFFTTTFFFTFFFFTFTFFFTFTTFTFTFTFFTFFTFTFTFTFFTTTTFTFFFFFTFFTFFTTFFFFTTTFFTFFTTTTFFFTFFFTFFTTTTFFTTFTFTFFTTFTTTTFFTFFTTFTFTFFTFFFFTTTFTFFTFFTFFFFTFTFTTFFTFTTTFFFFTTFTFFFTFFFFTTTFFFTTTTFTTFTTTFTFFTFTTTTFTFTFTFFTTFFTFTFFFFTFTFFFTTTFFFTFTTFFFFFTFTFFTTFTTTTFFTFFTFTFTTFFFTFTTFFFTFTFTTFTFFTFFFTTTFFFFFTFFTTTTTFFFFFFFFTTTFFTTFTTFTFTFFFTFFTFFTTTTFFTFTTFFTFFTTFTFFTTTFFFFFTFTFFFFFTTFTTTFFFFTTTTFTTFTFTFTFFFFTTTTFFTFTTFFFFFFTFTFTTFFTTTTFFTFTTFFTTTFTFFTTFFFTFFTFFFTTTTFTFTFTFTFFTFFTFTTr  distinct_id_)r1   rR   r  r   rT   rU   r(   rV   resultsr  
distinctIDrW   r   r   r   test_simple_flag_consistency	  s0          r
z,TestConsistency.test_simple_flag_consistencyc                 C   s   dddddg ddgdd	d
ddddddddddddddddddgiddg| j _g d}tdD ] }d| }| j d|}|| rQ| |||  q6| | q6d S )Nr6   r7   zmultivariate-flagFT7   rD   r   r  r  r   r	  r  r
  r  r  r  fourth-variantzFourth Variantrp  fifth-variantzFifth Variantr   rG   (  r  r  r  FFr  r  FFFr  r  Fr  r  r  FFr  r  Fr  FFFr  r  r  r  r  r  r  Fr  r  r  Fr  FFr  r  Fr  r  r  Fr  FFr  r  r  r  r  Fr  r  r  r  r  Fr  r  r  Fr  r  r  Fr  r  Fr  FFFFFFr  r  Fr  r  r  Fr  r  FFFFr  FFr  r  Fr  r  Fr  r  r  FFr  r  FFr  FFFFr  r  r  FFFr  r  Fr  r  FFFFFFFFFr  r  r  r  r  r  r  r  r  Fr  r  r  r  Fr  r  Fr  FFFr  r  FFr  FFFFr  FFFFFFFr  r  r  r  r  FFr  FFr  r  Fr  Fr  r  r  r  r  FFr  FFFFr  FFr  Fr  r  r  r  Fr  r  r  r  FFFFFr  r  r  r  FFFr  FFr  Fr  FFr  r  r  r  r  r  r  r  r  r  r  r  Fr  r  Fr  r  Fr  FFr  r  r  FFFFr  r  r  Fr  r  r  Fr  r  FFr  Fr  r  Fr  r  r  Fr  r  r  r  FFFr  FFr  r  Fr  Fr  Fr  Fr  r  r  FFr  r  r  r  r  FFr  FFFr  Fr  r  FFFFr  FFr  FFr  r  FFr  FFr  r  r  r  r  r  r  Fr  r  Fr  r  r  FFFr  r  r  r  r  r  FFr  Fr  r  Fr  r  FFr  FFr  FFr  r  r  r  FFFr  r  r  Fr  r  r  Fr  Fr  r  r  FFr  FFr  r  r  r  r  Fr  r  FFFr  r  r  r  r  r  Fr  r  Fr  r  r  r  Fr  r  r  r  FFFr  r  r  Fr  r  r  r  Fr  r  r  Fr  r  Fr  r  Fr  Fr  Fr  FFFr  r  r  FFr  r  r  r  FFFr  r  Fr  r  Fr  FFFr  r  r  FFFFr  r  r  r  r  Fr  Fr  r  r  Fr  Fr  r  r  FFFr  r  r  FFr  r  Fr  r  r  FFr  Fr  Fr  r  r  r  r  Fr  FFFFr  r  r  Fr  Fr  r  Fr  r  r  r  r  r  r  FFFr  Fr  r  r  r  r  r  r  r  r  r  r  r  Fr  FFFr  FFr  FFFr  r  r  r  r  r  r  Fr  FFFFFr  r  Fr  FFr  Fr  r  r  r  r  r  FFr  r  FFr  FFFr  r  r  r  FFr  Fr  r  FFFFr  r  FFFr  FFr  r  FFr  r  r  r  Fr  r  FFr  r  r  r  FFr  FFr  Fr  FFFFr  Fr  Fr  FFr  r  r  r  r  r  r  Fr  Fr  FFFFFr  FFFFFr  Fr  FFFFr  Fr  Fr  FFr  r  Fr  FFr  Fr  r  r  FFFFFr  FFr  r  Fr  FFFFFr  r  FFFr  r  r  FFFr  Fr  FFr  FFFFFr  r  r  r  Fr  Fr  Fr  Fr  r  Fr  Fr  Fr  Fr  r  FFFr  Fr  r  FFr  r  FFr  FFr  Fr  r  r  r  r  Fr  FFFFFr  FFFFr  r  r  r  Fr  r  FFr  r  r  FFr  r  Fr  r  r  r  r  FFFr  r  r  Fr  r  r  FFr  r  Fr  FFr  Fr  r  r  r  r  r  Fr  r  FFFr  r  r  r  r  r  r  r  FFFr  r  FFr  FFFFFFr  r  Fr  Fr  Fr  r  r  r  Fr  Fr  r  FFFr  Fr  Fr  r  r  r  FFr  FFFr  r  r  r  r  r  FFFr  FFFr  r  FFr  r  r  r  r  r  r  r  r  r  Fr  FFr  r  r  Fr  r  r  r  r  FFr  r  FFFr  r  r  r  r  r  Fr  r  r  FFr  r  Fr  r  r  )r1   rR   r  rS   ri   rU   r  r   r   r   "test_multivariate_flag_consistency  s@   





       r
z2TestConsistency.test_multivariate_flag_consistencyN)r"  r#  r$  r%  r   r   r+   r3   r   r   r  r  r   r   r   r   r  	  s&    


        r  )rs  unittestr   dateutilr   r   	freezegunr   posthog.clientr   posthog.feature_flagsr   r   r   posthog.requestr	   posthog.test.test_utilsr
   TestCaser   r&  r  r  r  r   r   r   r   <module>   s@                 /  s   