o
    3Ih                    @   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
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	d0d1 Ze	de	d	d2d3 Ze	de	d	d4d5 Z e	d6e	d	d7d8 Z!d9d: Z"e	de	d	d;d< Z#e	de	d	d=d> Z$e	de	d	d?d@ Z%e	d	dAdB Z&e	ddCdD Z'e	d	dEdF Z(e	ddGdH Z)e	d6e	ddIdJ Z*e	d6e	ddKdL Z+e	d6e	d	dMdN Z,e	ddOdP Z-e	ddQdR Z.e	ddSdT Z/e	ddUdV Z0e	ddWdX Z1ej	ede	ddYdZ Z2e	dd[d\ Z3d]S )^TestLocalEvaluationc                 C      t jtd| _| j  d S Ncapturemockpatchobjectr   capture_patchstartcls r   _/home/air/sanwanet/gpt-api/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   st   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?   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&   s2   


z/TestLocalEvaluation.test_flag_person_propertiesc                 C   s   dddddddddgd	d
g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 | | j jddddid | | j jddddid d S )Nr6   r7   r8   Tr9   locationr;   u   Straßer=   r>   rC   rD   staru   ſun)rH   rI   r?   is_simple_flagrJ   rK   rL   u   straßerM   strassesun)r1   rQ   rS   rR   r2   r   r   r   test_case_insensitive_matchingK   sd   $

z2TestLocalEvaluation.test_case_insensitive_matchingposthog.client.flagsc                 C   sR  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1rL   )group_propertiesrO   zProject Name 2amazon_without_rollout)r9   rh   amazonfeatureFlagsdecide-fallback-value)	r1   rQ   group_type_mappingrT   rR   rS   assertEqual
call_countreturn_value)r(   rU   patch_flagsr   r   r   test_flag_group_properties   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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 )#Nrk   complex-flagrl   personal_api_keyr6   r7   Tr9   r:   r;   r<   r=   r>   rI   AloharC   rD   emailza@b.comzb@c.com   doesnt_matterrg   2r   rG   rL   r:   rI   rM   z some-distinct-id_within_rollout?)r:   rw   z!some-distinct-id_outside_rollout?X)r:   rw   rI   ry   )
rp   r   r
   rQ   rS   rR   rn   ro   
reset_mockrT   r(   rU   rq   r1   r   r   r   !test_flag_with_complex_definition   s   4
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gddgi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 )Nrk   alakazam	alakazam2beta-featurebeta-feature2rt   r6   r7   r   Tr9   rH   b   cohortr?   rA   r@   rB   rC   rD   rG      r   r:   r;   r<   r=   r>   rL   )rp   r   r
   rQ   rR   rn   ro   r(   rU   rq   r1   rV   r   r   r   %test_feature_flags_fallback_to_deciden  sX   
.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gddgi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 )Nrk   r   r   r   rt   r6   r7   r   Tr9   rH   r   r   r   rC   rD   rG   r   r   r:   r;   r<   r=   r>   rL   only_evaluate_locallyr   )rp   r   r
   rQ   rR   rn   ro   feature_enabledr   r   r   r   Mtest_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_true  sn   
/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g dd	gid
g|_| |dd | |dd | |dd | |jd | |dd | |jd d S )Nrk   rt   r6   r7   r   Tr9   r   rD   rG   rL   r   r   )	rp   r   r
   rQ   rT   rR   r   rn   ro   r~   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 errorrt   r   rL   r6   r   )
r	   side_effectr   r
   rQ   assertIsNonerR   rn   ro   r   r~   r   r   r   4test_feature_flag_return_none_when_decide_errors_out'  s   zHTestLocalEvaluation.test_feature_flag_return_none_when_decide_errors_outc              	   C   sd   dddii|_ ttdd}ddddd	d
g d	dgiddg|_| |ddd | |jd d S )Nrk   r   rl   testrt   r6   r7   TrC   r9   rD   )rH   rI   r?   rJ   rF   rK   ensure_experience_continuitydistinct_idrp   r   r
   rQ   rn   rR   ro   r(   rq   r1   r   r   r   5test_experience_continuity_flag_not_evaluated_locally7  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g d
dgiddddd	dg ddgi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 )Nrk   	variant-1	variant-2F)r   r   disabled-featurer6   r7   r   TrC   r9   rD   rH   rI   r?   rJ   rF   rK   r   r   r   rG      r   countryUSr?   rA   r   rp   r1   rQ   rn   get_all_flagsro   r(   rq   patch_capturer1   r   r   r    test_get_all_flags_with_fallbackV  sf   
.z4TestLocalEvaluation.test_get_all_flags_with_fallbackc              	   C   s   ddddddd|_ | j}ddd	d
dg ddgddidddddd
g ddgddi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   ,  rk   featureFlagPayloadsr6   r7   r   TrD   truesome-payloadr9   payloadsr   r   r   r   another-payloadrG   r   r   r   r   r   	payload-3r   r   rp   r1   rQ   rn   get_all_flags_and_payloadsro   r   r   r   r   -test_get_all_flags_and_payloads_with_fallback  sd   
7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 )Nrk   r   r   r   r   r6   r   r   r   r   r   r   2test_get_all_flags_with_fallback_empty_local_flags  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_flags  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
g d	dgidddddd
g ddgidg|_| |dddd | |jd | |jd d S )Nrk   r   r   r   r6   r7   r   TrC   r9   rD   r   r   r   r   rG   r   Fr   r   r   r   r   r   r   #test_get_all_flags_with_no_fallback  sB   
z7TestLocalEvaluation.test_get_all_flags_with_no_fallbackc                 C   s   | j }ddd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 ddi | |jd | |jd d S )Nr6   r7   r   TrC   rD   r   newr   r   r   r   r   r   rG   r   r   )r1   rQ   rn   r   ro   )r(   rq   r   r1   
basic_flagdisabled_flagr   r   r   0test_get_all_flags_and_payloads_with_no_fallback6  sF   zDTestLocalEvaluation.test_get_all_flags_and_payloads_with_no_fallbackc              
   C   s   ddddi|_ | j}ddddd	d
g d	dgidddddd
g ddgi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 )Nrk   r   r   r   r6   r7   r   TrC   r9   rD   r   r   r   r   rG   r   r   r   r   r   r   r   Fr   r   r   r   r   r   >test_get_all_flags_with_fallback_but_only_local_evaluation_setk  sX   

.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g ddgddidd}dddd
g ddgddidd}dddd
dddgddgddidd}|||g|_| |jdd
dd d	di | |jd | |jd d S )Nr   r   r   rC   r   r   r6   r7   r   TrD   r   r   r   r   r   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   )r(   rq   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g ddgi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g ddgi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   TrC   r9   rD   r   r   r   r   rG   r   Fr   )r1   rQ   rn   r   ro   r   r   r   r   #test_compute_inactive_flags_locally  sz   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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 d S )"Nrt   r6   rI   r7   r?   r   rJ   TrK   r9   latestBuildVersionr=   z.+regexr?   rB   rA   r@   latestBuildVersionMajor23gtlatestBuildVersionMinor31latestBuildVersionPatchrf   rC   )variantrE   rF   rL   )r   r   r   r   rM   Fr   z24.32.12432rg   )r   r
   rH   rQ   rR   rn   ro   r   r   r   r   /test_feature_flags_local_evaluation_None_valuesI  sr   +zCTestLocalEvaluation.test_feature_flags_local_evaluation_None_valuesc                 C   s@  t tt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 )#Nrt   r   r7   r   Tr9   r:   r;   r<   r=   r>   rH   r   r   r   rC   rD   rG   ORr6   r?   rA   rB   nationUKrB   valuesANDotherthing98rg   rL   rM   Fr   r:   r   r:   r   )r   r
   rQ   cohortsrR   rn   ro   r   r   r   r   /test_feature_flags_local_evaluation_for_cohorts  s~   

zCTestLocalEvaluation.test_feature_flags_local_evaluation_for_cohortsc                 C   s|  t tt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 )%Nrt   r   r7   r   Tr9   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   rL   rM   Fr   r   r   thing2)r   r
   rQ   r   rR   rn   ro   r}   r   r   r   r   7test_feature_flags_local_evaluation_for_negated_cohorts  s   

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?   rJ   r   zAlpha Featurezalpha-featureFrf   rd   )flagsrm   r   rt   z2020-01-01T12:01:00.0000Zr   r?   z2020-01-01T12:01:00+00:00)rp   r   r
   r   load_feature_flagsrn   lenrQ   rm   _last_feature_flag_poll	isoformatro   )r(   rU   
patch_pollr1   r   r   r   test_load_feature_flagsN  s0   


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 )Nrt   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   rn   outputdebugassertRaisesr	   )r(   r1   logsr   r   r   !test_load_feature_flags_wrong_keym  s   z5TestLocalEvaluation.test_load_feature_flags_wrong_keyc              	   C   sN   t t}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
   rQ   rS   r   rn   ro   r~   r   r   r   test_feature_enabled_simpley      z/TestLocalEvaluation.test_feature_enabled_simplec              	   C   sN   t t}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
   rQ   rT   r   rn   ro   r~   r   r   r   $test_feature_enabled_simple_is_false  r   z8TestLocalEvaluation.test_feature_enabled_simple_is_falsec              	   C   sN   t t}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   r~   r   r   r   =test_feature_enabled_simple_is_true_when_rollout_is_undefined  s    zQTestLocalEvaluation.test_feature_enabled_simple_is_true_when_rollout_is_undefinedc              	   C   sF   t t| j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+   rQ   rS   r   r(   rU   r1   r   r   r   0test_feature_enabled_simple_with_project_api_key  s   zDTestLocalEvaluation.test_feature_enabled_simple_with_project_api_keyc              	   C   s`   dddii|_ ttdd}ddddd	d
g d	dgidg|_| |dd | |jd d S )Nrk   r   r   r   rt   r6   r7   TrC   r9   rD   r   r   r   )rp   r   r
   rQ   rS   r   rn   ro   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g igidg|_| |dd d S )	Nr6   r7   r   Tr9   rE   rG   r   )r   r
   rQ   rS   r   r   r   r   r   6test_feature_enabled_simple_without_rollout_percentage  s   zJTestLocalEvaluation.test_feature_enabled_simple_without_rollout_percentagec                 C   sx   dddii|_ tt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 )Nrk   r   r   r   rt   r6   r7   TrC   rD   variants2   )r?   rF   r   r9   multivariater   r   r   r   r   r   r   r   test_get_feature_flag  s.   z)TestLocalEvaluation.test_get_feature_flagc                 C   sL   t t}g |_di i|_| |dd tdd|_| |dd d S )Nrk   doesnt-existr   i  zdecide error)	r   r
   rQ   rp   rT   r   r	   r   r   r(   rq   r   r1   r   r   r   !test_feature_enabled_doesnt_exist'  s   
z5TestLocalEvaluation.test_feature_enabled_doesnt_existc                 C   s6   t tdd}g |_dddii|_| |dd d S )Nr   rt   rk   zfeature-flagTr   )r   r
   rQ   rp   rS   r   r   r   r   r   "test_personal_api_key_doesnt_exist3  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   rt   r   r   )rp   
raiseErrorr   r   r
   rQ   rT   r   )r(   rU   r   r  r1   r   r   r   test_load_feature_flags_error=  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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 )!Nrk   r   r   r   rt   r6   r7   TrC   rw   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_idrM   
example_idr   r   r   r   r   r   ,test_get_feature_flag_with_variant_overridesI  `   -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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 )!Nrk   r   r   r   rt   r6   r7   TrC   rw   r=   r  r;   r   r  r  r	  r   r
  r   r  r  r  r  r  r  r   r   r  rM   r  r   r   r   r   r   r   )test_flag_with_clashing_variant_overrides  s|   :	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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 )#Nrk   r   r   r   rt   r6   r7   TrC   rw   r=   r  r;   r   	second???r  r   first??r
  r   r	  r  r  r  r  r  r  r  r   r   r  rM   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	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 )#Nrk   r   r   r   rt   r6   r7   TrC   rF   rw   r=   r  r;   r   r  r  r   r  r
  r   r	  r  r  r  r  r  r   r   r  rM   r  
another_idr   r   r   r   r   r   )test_flag_with_multiple_variant_overrides  sj   1z=TestLocalEvaluation.test_flag_with_multiple_variant_overridesc              	   C   s   dddddddgdd	gd
dgddidd}|g| 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   rL   rM   match_valuerN   r   r1   rQ   rn   get_feature_flag_payloadro   )r(   rq   r   r   r   r   (test_boolean_feature_flag_payloads_local^  sB   

	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   rL   r:   r<   rM   r  r   r6   )rp   rn   r1   r  ro   r}   )r(   rq   r   r   r   r   (test_boolean_feature_flag_payload_decide  s*   
	z<TestLocalEvaluation.test_boolean_feature_flag_payload_decidec                 C   s   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dd}|g| 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   TrC   rw   r=   r  r;   r   r  r  r   r  r
  r   r	  r  r  r  r  r  r  r  z"some-payload"z{"a": "json"})r	  r  )r9   r   r   r   r  rM   ajsonr  r   r   r  )r(   rq   multivariate_flagr   r   r   'test_multivariate_feature_flag_payloads  s   
/	z;TestLocalEvaluation.test_multivariate_feature_flag_payloadsN)4__name__
__module____qualname__classmethodr   r   r+   r3   r   r   rX   r^   rr   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   r      s    


$A^ @R!
BG,3<KQITb



 


>
P
>
E
+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-  value3r2  r3  value4r,  rS   r   rT   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_notr0  r-  r.  r1  r4  value5value6r3  r2  r/  r5  )r(   r6  r8  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_setr0  rA   r-  r.  r/  r5  )r(   r6  r   r   r   test_match_properties_is_set4  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	icontainsr0  rA   r-  r3  vaLue4343tfvalue5Alakazam{   3C  val3threer,  rS   r   rT   )r(   r6  r7  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 | 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   r0  z	value.comz
value2.com	value2comz.com343tfvalue5rD  rE  valuecomz	value\comrF  rG  rH  rI  z?*rA   r-     4rJ  r(   r6  r7  r8  
property_dr   r   r   test_match_properties_regexQ  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   r0  r   r   r   r   ltrg   rF  gte43lte414244,   *   3029100rC   123aloha123z      rJ  )r(   r6  r7  r8  rQ  
property_e
property_fr   r   r   $test_match_properties_math_operatorsp  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_beforer0  
2022-03-01
2022-04-30  rN  rx   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,  rS   r   datetimedater   gettzr   parserT   r   r   rP  r   r   r   "test_match_property_date_operators  s~   
z6TestMatchProperties.test_match_property_date_operatorsrh  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-6hri  r0  rj  rk  rl  rN  rx   r6   r   r      rm  rn  rp  rq  1hrr  rs  rt  ru  12drv  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,  rS   r   rw  rT   rx  r   ry  r   rz  r   r   )r(   r6  r7  r8  rQ  re  rf  
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?   noner:  r0  nonr>  norA  smhNor   r6   r   rT  xyzrV  OorX  rh  ri  rr  random)r,  rT   r   rS   r   r   )r(   r6  r7  r8  rQ  property_d_lower_casere  rf  r  r  r  r  r  r   r   r   +test_none_property_value_with_all_operatorsk	  sD   "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?   rh  
is_unknownr0  r  zUnknown operator is_unknown)r,  r   r   r   rn   str	exception)r(   r6  exception_contextr   r   r   test_unknown_operator	  s   
z)TestMatchProperties.test_unknown_operatorr   )r%  r&  r'  r,  r9  r=  r?  rK  rR  rg  r{  r   r  r  r  r   r   r   r   r)    s    
3M
z.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.1340Zrg   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_overflow	  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  r}    r6         p UTCrn  2h
   24h        30h   48hrx   1dr  r   r   rw  r   ry  r2   r   r   r   test_hour_parsing	  s^   

"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  rn  r  rx   7dr  14d   30dr   r  r  r2   r   r   r   test_day_parsing	  sT   

"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  rn  2wr  4wrN  8wr  r  r  r  r2   r   r   r   test_week_parsing	  sT   

"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  rn  2mr  4m	   8mrt  r  12mz2020-04-03T00:00:00r  r   r   r      rN  r  r2   r   r   r   test_month_parsing
  s   


$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  rn  2yi  4yi  8yi  r  r2   r   r   r   test_year_parsingR
  s<   

"z)TestRelativeDateParsing.test_year_parsingN)
r%  r&  r'  r  r  r  r  r  r  r  r   r   r   r   r  	  s    #  5r  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	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   r_   c                 C   s  dddii|_ ttt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 ) Nrk   decide-flagdecide-valuert   r6   r7   rs   Tr9   r:   r<   r   rC   rD   rG   rL   rv   r{   rM   $feature_flag_called$feature_flag$feature_flag_responselocally_evaluated$feature/complex-flagr9   disable_geoipr   some-distinct-id2zsome-distinct-id345F)rN   send_feature_flag_eventsorganizationorg1)rN   r9   )r  r  r  $feature/decide-flag)
rp   r   r
   rQ   rS   rR   rn   ro   assert_called_withr}   r   r   r   r   test_capture_is_calledk
  s   
	
z'TestCaptureCalls.test_capture_is_calledc                 C   s   dddddidddd	d
dd ddd ddddd	ddd|_ tt}| |ddd | |jd |jdddddddddddi d d d S )Nr  Tzdecide-variantdescriptionMatched condition set 1   r]  )rH   versionr?   enabledr   reasonmetadata
false-flagFno_matching_conditionzNo matching condition)coder  condition_indexr6   r   )r  r  $18043bf7-9cf6-44cd-b959-9662ee20d371r   	requestIdrL   r  )r  r  r  r  $feature_flag_reason$feature_flag_id$feature_flag_version$feature_flag_request_idr  )rp   r   r
   rn   rR   ro   r  r   r   r   r   (test_capture_is_called_with_flag_details
  sV   

z9TestCaptureCalls.test_capture_is_called_with_flag_detailsc                 C   s   dddd ddddddd	d
didd|_ tt}| |ddddi | |jd |jddddddddddddid	i d d d S )Nzdecide-flag-with-payloadTmatched_conditionr   r  )r  r  r  r  r]  z{"foo": "bar"})rH   r  payloadr  r  r  rL   foobarr6   r  F)	r  r  r  z!$feature/decide-flag-with-payloadr  r  r  r  z$feature_flag_payloadr  )rp   r   r
   rn   r  ro   r  r   r   r   r   4test_capture_is_called_with_flag_details_and_payload  sP   
zETestCaptureCalls.test_capture_is_called_with_flag_details_and_payloadc              	   C   s  dddii|_ tttd}ddddd	d
ddgddgidddddd	g ddgidg|_| |jddd
did |jjdd}|d dksJJ |d d dksTJ |d d du s^J |d d du shJ |d d du srJ d|d vszJ d|d vsJ d S ) Nrk   r  r  rt   r6   r7   rs   Tr9   r:   r<   r   rC   rD   rG   r   zGamma Featuresimple-flagrL   rM   F)blockeventr  rE   r  r  r  r  z$feature/simple-flagz$active_feature_flags)rp   r   r
   rQ   rS   rR   queueget)r(   rq   r1   msgr   r   r   1test_capture_is_called_but_does_not_add_all_flagsK  sL   

zBTestCaptureCalls.test_capture_is_called_but_does_not_add_all_flagsc                 C   s  ddiddid|_ ttt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 |  d S )Nr8   Tr   r   api_keyru   r6   r7   r9   r:   r<   r   rC   rD   rG   rL   rv   r{   )r?   r   rN   r  )r  r  r  z$feature/person-flagr  r   r  )	rp   r   r
   rQ   r  rn   ro   r  r}   r   r   r   r   2test_capture_is_called_in_get_feature_flag_payload~  sx   
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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 )Nrk   r  r  T)ru   r  r6   r7   rs   r9   r:   r<   r   rC   rD   rG   rL   rv   r{   F)rN   r  r  r  r  )rp   r   r
   rQ   rR   r  r   r   r   r   (test_disable_geoip_get_flag_capture_call  sB   

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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 )Nrt   r6   r7   rs   Tr9   rC   rD   rG     rL   r<   rv   r{   rM   r  r  r  )	r   r
   rQ   rangerR   r  rn   r   #distinct_ids_feature_flags_reported)r(   rq   r   r1   ir   r   r   r   0test_capture_multiple_users_doesnt_out_of_memory  sF   
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   r   r   r  j
  s,    q72
2U
*r  c                   @   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	dd Ze	d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   3  r   zTestConsistency.setUpClassc                 C   r   r   r   r   r   r   r   r   9  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   B  r4   zTestConsistency.setUpr5   c                 C   sr   dddddg ddgidg| j _g d	}td
D ]}d| }| j d|}|| r1| | q| | qd S )Nr6   r7   r  Tr9   -   rD   rG   (  FTTFTFFTFTFTTFTFFFTTFTFFTFTTFFFTTTTFFFFFFTTFTTFFFTTFFFFTFTFTFTTFTFTFTTFFTFFTFTFFTFFFTTFTTFTTTTTFTTFFTTTTFFTFTTTFFFFFTFFTTTFFTFTFFTFFFFFFFFTTFFTFFTTFFTFTFTTTFFFTFFFFTTFTTFTFTTFTFTTTFTFFTTFTFTTFFTTTTFTTFFTFTFFTTFTFTFFFFFFFTFTTFFTFTFFFTFTFFFTFFTFTTFFFFTFFFFFFFFFFFFFTTFTFTTFTFTFFFTTTTFFFFFTTTFFTTFFFFFTFTTTTFTTTFFTFTFFTTTFTFFFTTFTFTFTTTTTFFTFTFTTTFTFTTFTTTTTFFFFFTFTFFTTFFFTFTTTTFFFFTTFFTTFTTTTFTTTFFTTFFTFFTFFFFFFFFFFTTFFTFFTFTFFTFFFFFFTFFFFFFFFFTTTFFFTFTFFFTFFFFFFFTFFFFFFFFTFTFTTTFFFTTTFTFTTFFFTFFFFTFTFTTFTFFFTFFTTFTFFFFFFTTFFTFFTTTFFFTFFFFTFTFFFTFTTFTFTFTFFTFFTFTFTFTFFTTTTFTFFFFFTFFTFFTTFFFFTTTFFTFFTTTTFFFTFFFTFFTTTTFFTTFTFTFFTTFTTTTFFTFFTTFTFTFFTFFFFTTTFTFFTFFTFFFFTFTFTTFFTFTTTFFFFTTFTFFFTFFFFTTTFFFTTTTFTTFTTTFTFFTFTTTTFTFTFTFFTTFFTFTFFFFTFTFFFTTTFFFTFTTFFFFFTFTFFTTFTTTTFFTFFTFTFTTFFFTFTTFFFTFTFTTFTFFTFFFTTTFFFFFTFFTTTTTFFFFFFFFTTTFFTTFTTFTFTFFFTFFTFFTTTTFFTFTTFFTFFTTFTFFTTTFFFFFTFTFFFFFTTFTTTFFFFTTTTFTTFTFTFTFFFFTTTTFFTFTTFFFFFFTFTFTTFFTTTTFFTFTTFFTTTFTFFTTFFFTFFTFFFTTTTFTFTFTFTFFTFFTFTTr  distinct_id_)r1   rQ   r  r   rS   rT   r(   rU   resultsr  
distinctIDrV   r   r   r   test_simple_flag_consistencyF  s.          r
z,TestConsistency.test_simple_flag_consistencyc                 C   s   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|}|| rP| |||  q5| | q5d S )Nr6   r7   zmultivariate-flagT7   rD   r   r	  r  r   r  r  r  r  r  r  fourth-variantzFourth Variantrt  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   rQ   r  rR   rn   rT   r  r   r   r   "test_multivariate_flag_consistencyI  s`   
)       r
z2TestConsistency.test_multivariate_flag_consistencyr_   c                 C   sn   di i|_ tttd}ddddg ddgid	g|_| |dd
 | |dd
 | |dd
 d S )Nrk   r  r6   Beta-FeatureTr9   rC   rD   rH   r?   rJ   rK   user1r   BETA-FEATURE)rp   r   r
   rQ   rS   r   rT   r(   mock_decider1   r   r   r    test_feature_flag_case_sensitivej  s   z0TestConsistency.test_feature_flag_case_sensitivec                 C   s   ddidddiid|_ tttd}dddg dd	gd
ddiiddg|_| |ddddi | |dd | |dd d S )Nr  TsomerA   r   r  r6   rC   rD   r   r   r  r  r   r  )rp   r   r
   rQ   rn   r  r   r  r   r   r   (test_feature_flag_payload_case_sensitive  s$   

z8TestConsistency.test_feature_flag_payload_case_sensitivec                 C   s   ddidddiid|_ tttd}dddg dd	gd
ddiiddg|_| |dd | |ddddi g d}|D ]}| ||d | 	||d qAd S )Nr  Tr  rA   r   r  r6   rC   rD   r   r   r  r  )r   r  zbEtA-FeAtUrE)
rp   r   r
   rQ   rS   r   rn   r  rT   r   )r(   r  r1   
test_casescaser   r   r   ,test_feature_flag_case_sensitive_consistency  s,   

z<TestConsistency.test_feature_flag_case_sensitive_consistencyN)r%  r&  r'  r(  r   r   r+   r3   r   r   r  r  r  r  r   r   r   r   r   r
  2  sB    


        

        (

r
  )rw  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>   sH                   t   . I   K