
    Zi                    0   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	ej                  Z G d
 dej                  Z G d dej                  Z G d dej                  Z G 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                      e Zd Zed             Zed             Zd Zd Z ej	        d          d             Z
d Z ej	        d           ej	        d          d	                         Z ej	        d           ej	        d          d
                         Z ej	        d           ej	        d          d                         Z ej	        d           ej	        d          d                         Z ej	        d           ej	        d          d                         Z ej	        d           ej	        d          d                         Z ej	        d          d             Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Zej	                            ed           ej	        d          d                         Z ej	        d           ej	        d          d                         Z ej	        d           ej	        d          d                         Z ej	        d           ej	        d          d                         Z  ej	        d           ej	        d          d                         Z!d Z" ej	        d           ej	        d          d                          Z# ej	        d           ej	        d          d!                         Z$ ej	        d           ej	        d          d"                         Z% ej	        d          d#             Z& ej	        d          d$             Z' ej	        d          d%             Z( ej	        d          d&             Z) ej	        d           ej	        d          d'                         Z* ej	        d           ej	        d          d(                         Z+ ej	        d           ej	        d          d)                         Z, ej	        d          d*             Z- ej	        d          d+             Z. ej	        d          d,             Z/ ej	        d          d-             Z0 ej	        d          d.             Z1ej	                            ed           ej	        d          d/                         Z2 ej	        d          d0             Z3d1S )2TestLocalEvaluationc                     t           j                            t          d          | _        | j                                         d S Ncapturemockpatchobjectr   capture_patchstartclss    Z/root/projects/butler/venv/lib/python3.11/site-packages/posthog/test/test_feature_flags.py
setUpClasszTestLocalEvaluation.setUpClass   9     !J--fi@@!!!!!    c                 8    | j                                          d S Nr   stopr   s    r   tearDownClassz!TestLocalEvaluation.tearDownClass            r   c                 6    t          d||           d| _        dS zMark the failure handlerFAILTNprintfailedselfebatchs      r   set_failzTestLocalEvaluation.set_fail       far   c                 T    d| _         t          t          | j                  | _        d S NF)on_errorr(   r   r   r-   clientr*   s    r   setUpzTestLocalEvaluation.setUp"   $    .GGGr   posthog.client.getc           
         ddddddddgd	d
gddgidg| j         _        | j                             ddddi          }| j                             ddddi          }|                     |           |                     |           d S )N   Beta Featureperson-flagTgroupsregionexactUSApersonkeyoperatorvaluetyped   
propertiesrollout_percentageidnamerB   activefilterssome-distinct-idperson_propertiessome-distinct-2Canada)r3   feature_flagsget_feature_flag
assertTrueassertFalse)r*   	patch_getfeature_flag_matchnot_feature_flag_matchs       r   test_flag_person_propertiesz/TestLocalEvaluation.test_flag_person_properties&   s     &$ ,407.3W,4	!" !"+ 36
 
 %
!0 "[99-(EAR : 
 
 "&!=!=,8@T "> "
 "
 	*+++/00000r   c                    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                             ddddi                     |                     | j                             ddddi                     |                     | j                             ddddi                     |                     | j                             ddddi                     d S )Nr9   r:   r;   Tr<   locationr>   u   Straßer@   rA   rF   rG   staru   ſun)rK   rL   rB   is_simple_flagrM   rN   rO   u   straßerP   strassesun)r3   rT   rV   rU   r4   s    r   test_case_insensitive_matchingz2TestLocalEvaluation.test_case_insensitive_matchingK   s    &$"& ,607.7[,4	!" !"+ 36
 
 ,207.4X,4	!" !"+ 36
 
   "%
!H 	K(("#-y"9 )  	
 	
 	
 	K(("#-y"9 )  	
 	
 	
 	K((1ffEU )  	
 	
 	
 	K((1fe_ )  	
 	
 	
 	
 	
r   posthog.client.flagsc                    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                             dddddii                     |                     | j                             dddddii                     |                     | j                             ddddidddii                     |                     | j                             ddddidddii                     |                     | j                             ddddidddii                     |                     |j        d           dddii|_        i | j         _        |                     | j                             ddddidddii          d           |                     |j        d           d S )Nr9   r:   z
group-flagTr   rL   r>   zProject Name 1group)group_type_indexrB   rC   rD   rE   #   rG   )aggregation_group_type_indexr<   rJ   companyproject)01rO   )group_propertiesrR   zProject Name 2amazon_without_rollout)r<   rm   amazonfeatureFlagsdecide-fallback-value)	r3   rT   group_type_mappingrW   rU   rV   assertEqual
call_countreturn_value)r*   rX   patch_flagss      r   test_flag_group_propertiesz.TestLocalEvaluation.test_flag_group_properties   s   
 &#45
 9:+107.>-?,3!" !"+ 35   %
!4 09y)I)I& 	K((""+f6F-G!H )  	
 	
 	
 	K((!"+f6F-G!H )  	
 	
 	
 	K(("!#;<"+f6F-G!H	 )  	
 	
 	
 	K(("!8,"+f6F-G!H	 )  	
 	
 	
 	K((!!#;<"+f6F-G!H	 )  	
 	
 	
 	/333 \+BC$
  *,&K(("!8,"+f6F-G!H	 )   $	
 	
 	
 	/33333r   c                    dddii|_         t          t          t                    }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|_        |                     |                    ddddd                     |                     |j        d           |                     |                    ddddd                     |                     |j        d           |                     |                    dd ddd          d           |                     |j        d           |                                 |                     |                    ddddi          d           |                     |j        d           |                                 |                     |                    ddd	di          d           |                     |j        d           |                                 | 	                    |                    dd ddd!dd"                     |                     |j        d           d S )#Nrp   complex-flagrq   personal_api_keyr9   r:   Tr<   r=   r>   r?   r@   rA   rL   AloharF   rG   emailza@b.comzb@c.com   doesnt_matterrl   2r   rJ   rO   r=   rL   rP   z some-distinct-id_within_rollout?)r=   r}   z!some-distinct-id_outside_rollout?X)r=   r}   rL   r   )
ru   r   r   rT   rV   rU   rs   rt   
reset_mockrW   r*   rX   rv   r3   s       r   !test_flag_with_complex_definitionz5TestLocalEvaluation.test_flag_with_complex_definition   s    ^-DE$
  )<MNNN &% ,407.3W,4	!" !" ,207.5Y,4	!" !"+ 36 ( ,307.7-C,4	!" !"+ 35
 
 ,;07.13Z,4	!" !"+ 34
 
;(*0 02 
h 	##"-2G"D"D $  	
 	
 	
 	/333 	##2-2Y"G"G $  	
 	
 	
 	/333 	##3-2Y"G"G $  
 $	
 	
 	
 	/333    	##"#2C"8 $  
 $	
 	
 	
 	/333    	## 2xQVFW $   $		
 	
 	
 	/333    	##3#&%(	# # $ 	 		
 	
 	
 	/33333r   c                    ddddi|_         t          t          t                    }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 )Nrp   alakazam	alakazam2beta-featurebeta-feature2rz   r9   r:   r   Tr<   rK   b   cohortrB   rD   rC   rE   rF   rG   rJ      r   r=   r>   r?   r@   rA   rO   )ru   r   r   rT   rU   rs   rt   r*   rX   rv   r3   rY   s        r   %test_feature_flags_fallback_to_decidez9TestLocalEvaluation.test_feature_flags_fallback_to_deciden  s    Z+VV$
  )<MNNN &% ,0-/04,4	!" !"+ 36
 
 , && ,407.3W,4	!" !"+ 36
 
 -+ 
\ $44^EWXX+Z888/333 $44/
 
 	+[999/33333r   c                    ddddi|_         t          t          t                    }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	          }|                     |d            |                     |j        d           |                    ddd	          }|                     |d            |                     |j        d           |                    ddd	          }|                     |d            |                    ddd	          }|                     |d            |                     |j        d           d S )Nrp   r   r   r   rz   r9   r:   r   Tr<   rK   r   r   r   rF   rG   rJ   r   r   r=   r>   r?   r@   rA   rO   only_evaluate_locallyr   )ru   r   r   rT   rU   rs   rt   feature_enabledr   s        r   Mtest_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_truezaTestLocalEvaluation.test_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_true  s%    Z+VV$
  )<MNNN &% ,0-/04,4	!" !"+ 36
 
 , && ,407.3W,4	!" !"+ 36
 
 -+ 
^ $44.d 5 
 
 	+T222/333#33.d 4 
 
 	+T222/333 $44/t 5 
 
 	+T222#33/t 4 
 
 	+T222/33333r   c                 *   di i|_         t          t          t                    }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 )Nrp   rz   r9   r:   r   Tr<   r   rG   rJ   rO   r   r   )	ru   r   r   rT   rW   rU   r   rs   rt   r   s       r   Ctest_feature_flag_never_returns_undefined_during_regular_evaluationzWTestLocalEvaluation.test_feature_flag_never_returns_undefined_during_regular_evaluation  s4   
 %3B#7 )<MNNN &%*,23   
$ 	00ASTTUUU//@RSSTTT 	00BTUUVVV/333//ASTTUUU/33333r   c                    t          dd          |_        t          t          t                    }g |_        |                     |                    dd                     |                     |j        d           |                     |	                    dd                     |                     |j        d           d S )Ni  zDecide errorrz   r   rO   r9   r   )
r
   side_effectr   r   rT   assertIsNonerU   rs   rt   r   r   s       r   4test_feature_flag_return_none_when_decide_errors_outzHTestLocalEvaluation.test_feature_flag_return_none_when_decide_errors_out'  s    
 #+3"?"?)<MNNN! 	&11/CUVVWWW/333&00BTUUVVV/33333r   c           	          dddii|_         t          t          d          }ddddd	d
g d	dgiddg|_        |                     |                    dd          d           |                     |j        d           d S )Nrp   r   rq   testrz   r9   r:   TrF   r<   rG   )rK   rL   rB   rM   rI   rN   ensure_experience_continuitydistinct_idru   r   r   rT   rs   rU   rt   r*   rv   r3   s      r   5test_experience_continuity_flag_not_evaluated_locallyzITestLocalEvaluation.test_experience_continuity_flag_not_evaluated_locally7  s     ^-DE$
  )FCCC &%&)*,25  15  
& 	##NMBB#	
 	
 	
 	/33333r   r   c           
      Z   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 )Nrp   	variant-1	variant-2F)r   r   disabled-featurer9   r:   r   TrF   r<   rG   rK   rL   rB   rM   rI   rN   r   r   r   rJ      r   countryUSrB   rD   r   ru   r3   rT   rs   get_all_flagsrt   r*   rv   patch_capturer3   s       r    test_get_all_flags_with_fallbackz4TestLocalEvaluation.test_get_all_flags_with_fallbackV  s]     +!,$) $
   &%&)*,25    &)*,23   &&3<t+L+L*M23  =, 
\ 	  // +!,$) 	
 	
 	
 	/3331155555r   c           	      |   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   rF   ,  rp   featureFlagPayloadsr9   r:   r   TrG   truesome-payloadr<   payloadsr   r   r   r   another-payloadrJ   r   r   r   r   r   	payload-3r   r   ru   r3   rT   rs   get_all_flags_and_payloadsrt   r   s       r   -test_get_all_flags_and_payloads_with_fallbackzATestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback  s    .9;WW47##N#N$
 $
   &%&) +-25  !
 
 & &) +-23   1!
 
 $ && 4=t+L+L*M23  !
 
 I5 
n 	--m<<=RS #!$ 	
 	
 	
 	/3331155555r   c                     ddddi|_         | j        }g |_        |                     |                    d          ddd           |                     |j        d           |                     |j        d           d S )Nrp   r   r   r   r   r9   r   r   r   s       r   2test_get_all_flags_with_fallback_empty_local_flagszFTestLocalEvaluation.test_get_all_flags_with_fallback_empty_local_flags  s     [;WW$
  !  //(;GG	
 	
 	
 	/3331155555r   c                    ddddddd|_         | j        }g |_        |                     |                    d          d         ddd           |                     |j        d	           |                     |j        d
           d S )Nr   r   r   rF   r   r   r   r   r9   r   r   r   s       r   ?test_get_all_flags_and_payloads_with_fallback_empty_local_flagszSTestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_empty_local_flags  s     .9;WW47##N#N$
 $
  !--m<<=RS 377	
 	
 	
 	/3331155555r   c           	      4   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 )Nrp   r   r   r   r9   r:   r   TrF   r<   rG   r   r   r   r   rJ   r   Fr   r   r   r   s       r   #test_get_all_flags_with_no_fallbackz7TestLocalEvaluation.test_get_all_flags_with_no_fallback  s    [;WW$
   &%&)*,25    &)*,23  ! 
> 	  //!u==	
 	
 	

 	/3331155555r   c                 :   | 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 )Nr9   r:   r   TrF   rG   r   newr   r   r   r   r   r   rJ   r   r   )r3   rT   rs   r   rt   )r*   rv   r   r3   
basic_flagdisabled_flags         r   0test_get_all_flags_and_payloads_with_no_fallbackzDTestLocalEvaluation.test_get_all_flags_and_payloads_with_no_fallback6  s   
 "!"% ').1  E
 

 

& "% ')./  N
 

 
$  
 	--m<<=RSU#	
 	
 	

 	/3331155555r   c           
      Z   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 )Nrp   r   r   r   r9   r:   r   TrF   r<   rG   r   r   r   r   rJ   r   r   r   r   r   r   r   Fr   r   r   s       r   >test_get_all_flags_with_fallback_but_only_local_evaluation_setzRTestLocalEvaluation.test_get_all_flags_with_fallback_but_only_local_evaluation_setk  sQ    [;WW$
   &%&)*,25    &)*,23   &&3<t+L+L*M23  =, 
\ 	  d KK!u==	
 	
 	
 	/3331155555r   c                    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i           |                     |j        d           |                     |j        d           d S )Nr   r   r   rF   r   r   r9   r:   r   TrG   r   r   r   r   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   )r*   rv   r   r3   flag_1flag_2flag_3s          r   Ktest_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_setz_TestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_set  s    .9;WW47##N#N$
 $
  "!"% ').1  N
 

 
& "% ')./  -
 

 
$ "" 094'H'H&I./  K
 

 
$  
 	--T .  #% ^,		
 	
 	
 	/3331155555r   c           	      $   | 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 )Nr9   r:   r   TrF   r<   rG   r   r   r   r   rJ   r   Fr   )r3   rT   rs   r   rt   r   s       r   #test_compute_inactive_flags_locallyz7TestLocalEvaluation.test_compute_inactive_flags_locally  s     &%&)*,25    &)*,23  ! 
> 	  //!u==	
 	
 	

 	/33311555
 &%&)*,25    &)*,25  ! 
> 	  //"==	
 	
 	

 	/3331155555r   c                    t          t          t                    }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|_        |                    ddd d d d d          }|                     |d           |                     |j        d           |                     |j        d           |                    ddddd d!d          }|                     |d           d S )"Nrz   r9   rL   r:   rB   r   rM   TrN   r<   latestBuildVersionr@   z.+regexrB   rE   rD   rC   latestBuildVersionMajor23gtlatestBuildVersionMinor31latestBuildVersionPatchrk   rF   )variantrH   rI   rO   )r   r   r   r   rP   Fr   z24.32.12432rl   )r   r   rK   rT   rU   rs   rt   r   s        r   /test_feature_flags_local_evaluation_None_valueszCTestLocalEvaluation.test_feature_flags_local_evaluation_None_valuesI  s    )<MNNN A~$'+ ,@,4-107	!" !" ,E,4-104	!" !" ,E,4-104	!" !" ,E,4-004	!" !"'+4 369 !') 
V $44&*+/+/+/	  5 	
 	
 	+U333/333-q111#44&/+/+/+.	  5 	
 	
 	+T22222r   c                 ,   t          t          t                    }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|_        |                    ddddi          }|                     |d           |                     |j        d            |                     |j        d            |                    ddd	dd!          }|                     |d           |                     |j        d            |                     |j        d            |                    ddd	dd"          }|                     |d           |                     |j        d            |                     |j        d            d S )#Nrz   r   r:   r   Tr<   r=   r>   r?   r@   rA   rK   r   r   r   rF   rG   rJ   ORr9   rB   rD   rE   nationUKrE   valuesANDotherthing98rl   rO   rP   Fr   r=   r   r=   r   )r   r   rT   cohortsrU   rs   rt   r   s        r   /test_feature_flags_local_evaluation_for_cohortszCTestLocalEvaluation.test_feature_flags_local_evaluation_for_cohorts  sk    )<MNNN &% ,407.3W,4	!" !" ,0-/04,4	!" !"+ 36   
>  1h??'$+"& (	     '$+") (	 
 

 
4 $44.8TBR 5 
 
 	+U333/333-q111#44).$?? 5 
 
 	+T222/333-q111#44).AA 5 
 

 	+T222/333-q11111r   c                    t          t          t                    }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|_        |                    ddddi          }|                     |d            |                     |j        d!           |                     |j        d!           |                    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 S )%Nrz   r   r:   r   Tr<   r=   r>   r?   r@   rA   rK   r   r   r   rF   rG   rJ   r   r9   r   r   r   r   r   r   r   )rB   rC   rD   rE   negationr   rO   rP   Fr   r   r   thing2)r   r   rT   r   rU   rs   rt   r   r   s        r   7test_feature_flags_local_evaluation_for_negated_cohortszKTestLocalEvaluation.test_feature_flags_local_evaluation_for_negated_cohorts  s   
 )<MNNN &% ,407.3W,4	!" !" ,0-/04,4	!" !"+ 36   
>  1h??'$+"& (	     '$+") ($(  
 
6 $44.8TBR 5 
 
 	+U333/333-q111#44).$?? 5 
 
 	+T222/333-q111#44).AA 5 
 
 	/333-q111   #44).BB 5 
 

 	+T222/333-q11111r   zposthog.client.Pollerc                 @   ddddddddd	dgd
did|_         t          t          d          }t          d          5  |                                 d d d            n# 1 swxY w Y   |                     t          |j                  d           |                     |j        d         d         d           |                     |j        d
di           |                     |j	        
                                d           |                     |j        d           d S )Nr9   r:   r   T)rK   rL   rB   rM   r   zAlpha Featurezalpha-featureFrk   ri   )flagsrr   r   rz   z2020-01-01T12:01:00.0000Zr   rB   z2020-01-01T12:01:00+00:00)ru   r   r   r   load_feature_flagsrs   lenrT   rr   _last_feature_flag_poll	isoformatrt   )r*   rX   
patch_pollr3   s       r   test_load_feature_flagsz+TestLocalEvaluation.test_load_feature_flagsN  s    *)"	  +*#	  $'	"2"
 "
	" )FCCC455 	( 	(%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(V122A666-a07HHH2S)4DEEE*44668S	
 	
 	
 	.22222s   AA#&A#c                 R   t          t          t                    }|                     dd          5 }|                                 |                     |j        d         d           d d d            n# 1 swxY w Y   d|_        |                     t          |j                   d S )Nrz   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   rs   outputdebugassertRaisesr
   )r*   r3   logss      r   !test_load_feature_flags_wrong_keyz5TestLocalEvaluation.test_load_feature_flags_wrong_keym  s    )<MNNN__Yg_66 	$%%'''A @  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 (F$=>>>>>s   6A55A9<A9c           	          t          t                    }ddddddg ddgidg|_        |                     |                    dd	                     |                     |j        d
           d S )Nr9   r:   r   TrF   r<   rG   r   r   r   r   r   rT   rV   r   rs   rt   r   s       r   test_feature_enabled_simplez/TestLocalEvaluation.test_feature_enabled_simpley  s     )** &%&)*,25   
" 	..~}MMNNN/33333r   c           	          t          t                    }ddddddg ddgidg|_        |                     |                    dd	                     |                     |j        d           d S )
Nr9   r:   r   Tr   r<   rG   r   r   )r   r   rT   rW   r   rs   rt   r   s       r   $test_feature_enabled_simple_is_falsez8TestLocalEvaluation.test_feature_enabled_simple_is_false  s     )** &%&'*,23   
" 	//NNOOO/33333r   c           	          t          t                    }ddddd dg d dgidg|_        |                     |                    dd                     |                     |j        d	           d S )
Nr9   r:   r   Tr<   rG   r   r   r   r	  r   s       r   =test_feature_enabled_simple_is_true_when_rollout_is_undefinedzQTestLocalEvaluation.test_feature_enabled_simple_is_true_when_rollout_is_undefined  s    
 )** &%&**,26   
" 	..~}MMNNN/33333r   c           	          t          t          | j                  }ddddddg ddgid	g|_        |                     |                    dd
                     d S )N)project_api_keyr1   r9   r:   r   TrF   r<   rG   r   r   )r   r   r-   rT   rV   r   r*   rX   r3   s      r   0test_feature_enabled_simple_with_project_api_keyzDTestLocalEvaluation.test_feature_enabled_simple_with_project_api_key  s    (9DMRRR &%&)*,25   
" 	..~}MMNNNNNr   c           	          dddii|_         t          t          d          }ddddd	d
g d	dgidg|_        |                     |                    dd                     |                     |j        d           d S )Nrp   r   r   r   rz   r9   r:   TrF   r<   rG   r   r   r   )ru   r   r   rT   rV   r   rs   rt   r   s      r   *test_feature_enabled_request_multi_variatez>TestLocalEvaluation.test_feature_enabled_request_multi_variate  s    $2^[4Q#R )FCCC &%&)*,25   
" 	..~}MMNNN/33333r   c                     t          t                    }ddddddg igidg|_        |                     |                    dd                     d S )	Nr9   r:   r   Tr<   rH   rJ   r   )r   r   rT   rV   r   r  s      r   6test_feature_enabled_simple_without_rollout_percentagezJTestLocalEvaluation.test_feature_enabled_simple_without_rollout_percentage  ss    )** &%("  
 	..~}MMNNNNNr   c                    dddii|_         t          t          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 )Nrp   r   r   r   rz   r9   r:   TrF   rG   variants2   )rB   rI   r   r<   multivariater   r   r   r   r   s      r   test_get_feature_flagz)TestLocalEvaluation.test_get_feature_flag  s    $2^[4Q#R )FCCC &%&) +-25  #$/rJJ$/rJJ%%   
. 	##NMBBK	
 	
 	
 	/33333r   c                    t          t                    }g |_        di i|_        |                     |                    dd                     t          dd          |_        |                     |                    dd                     d S )Nrp   doesnt-existr   i  zdecide error)	r   r   rT   ru   rW   r   r
   r   r   r*   rv   r   r3   s       r   !test_feature_enabled_doesnt_existz5TestLocalEvaluation.test_feature_enabled_doesnt_exist'  s     )**!$2B#7 //NNOOO"*3"?"?&00OOPPPPPr   c                     t          t          d          }g |_        dddii|_        |                     |                    dd                     d S )Nr   rz   rp   zfeature-flagTr   )r   r   rT   ru   rV   r   r  s       r   "test_personal_api_key_doesnt_existz6TestLocalEvaluation.test_personal_api_key_doesnt_exist3  sY     )FCCC!$2^T4J#K ..~}MMNNNNNr   c                     d }||j         j        _        t          t          d          }g |_        |                     |                    dd                     d S )Nc                       t          d          )Nzhttp exception)	Exception r   r   raise_effectzGTestLocalEvaluation.test_load_feature_flags_error.<locals>.raise_effect@  s    ,---r   r   rz   r  r   )ru   
raiseErrorr   r   r   rT   rW   r   )r*   rX   r   r'  r3   s        r   test_load_feature_flags_errorz1TestLocalEvaluation.test_load_feature_flags_error=  sg    	. 	. 	. 9E	)5)FCCC!//NNOOOOOr   c                    dddii|_         t          t          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|_        |                     |                    ddd
di          d           |                     |                    dd          d           |                     |j        d            d S )!Nrp   r   r   r   rz   r9   r:   TrF   r}   r@   test@posthog.comr>   r   second-variantrH   rI   r   r  first-variantrI   r   r  First VariantrB   rL   rI   Second Variant   third-variantThird Variantr  r   test_idrP   
example_idr   r   r   s      r   ,test_get_feature_flag_with_variant_overridesz@TestLocalEvaluation.test_get_feature_flag_with_variant_overridesI  sz   $2^[4Q#R )FCCC &%&) ,3,4-?07	!" !"+ 36'7  02oNN  #'6(768  (8(868  (7(768 %%!# #* *, 
Z 	###*,>"? $  
 	
 	
 	
 	##NLAA?	
 	
 	
 	/33333r   c                    dddii|_         t          t          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|_        |                     |                    ddd
di          d           |                     |                    ddd
di          d           |                     |j        d            d S )!Nrp   r   r   r   rz   r9   r:   TrF   r}   r@   r+  r>   r   r,  r-  r.  r  r/  r  r0  r1  r2  r3  r4  r5  r  r   r6  rP   r7  r   r   r   s      r   )test_flag_with_clashing_variant_overridesz=TestLocalEvaluation.test_flag_with_clashing_variant_overrides  s   $2^[4Q#R )FCCC &%&) ,3,4-?07	!" !"+ 36'7   ,3,4-?07	!" !"+ 36'6  02oNN5: #'6(768  (8(868  (7(768 %%;0 07 79 
t 	###*,>"? $  
 	
 	
 	
 	###*,>"? $  
 	
 	
 	
 	/33333r   c                    dddii|_         t          t          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|_        |                     |                    ddd
di           d           |                     |                    dd!          d           |                     |j        d"           d S )#Nrp   r   r   r   rz   r9   r:   TrF   r}   r@   r+  r>   r   	second???r-  r  first??r/  r  r.  r0  r1  r,  r2  r3  r4  r5  r  r   r6  rP   r7  r   r   r   s      r   (test_flag_with_invalid_variant_overridesz<TestLocalEvaluation.test_flag_with_invalid_variant_overrides  s{   $2^[4Q#R )FCCC &%&) ,3,4-?07	!" !"+ 36'2  02iHH  #'6(768  (8(868  (7(768 %%!# #* *, 
Z 	###*,>"? $  
 	
 	
 	
 	##NLAACS	
 	
 	
 	/33333r   c                    dddii|_         t          t          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|_        |                     |                    ddddi          d           |                     |                    dd           d           |                     |                    dd!          d           |                     |j        d"           d S )#Nrp   r   r   r   rz   r9   r:   TrF   rI   r}   r@   r+  r>   r   r,  r-  r  r4  r/  r  r.  r0  r1  r2  r3  r5  r  r   r6  rP   r7  
another_idr   r   r   s      r   )test_flag_with_multiple_variant_overridesz=TestLocalEvaluation.test_flag_with_multiple_variant_overrides  s   $2^[4Q#R )FCCC &%&) 1# ,3,4-?07	!" !"+ 36'7  02oNN#( #'6(768  (8(868  (7(768 %%)' '. .0 
b 	###*,>"? $  
 	
 	
 	
 	##NLAA?	
 	
 	
 	##NLAACS	
 	
 	
 	/33333r   c           	      T   dddddddgdd	gd
dgddidd}|g| j         _        |                     | j                             ddddi          d           |                     | j                             dddddi          d           |                     |j        d           d S )Nr9   r:   r;   Tr=   r>   r?   r@   rA   rF   rG   r   r   r   rJ   rO   rP   match_valuerQ   r   r3   rT   rs   get_feature_flag_payloadrt   )r*   rv   r   s      r   (test_boolean_feature_flag_payloads_localz<TestLocalEvaluation.test_boolean_feature_flag_payloads_local^  s     "  (0,3*/(0	 ' /2
 
 $SM 
 

, &0L!K001hPUEV 1   		
 	
 	
 	K00" #+U"3	 1   	
 	
 	
 	/33333r   c           	         ddiddid|_         |                     | j                            ddddi          d           |                     | j                            dddddi	          d           |                     |j        d
           |                     |j        d           |                                 d S )Nr;   Tr   r   rO   r=   r?   rP   rC  r   r9   )ru   rs   r3   rF  rt   r   )r*   rv   r   s      r   (test_boolean_feature_flag_payload_decidez<TestLocalEvaluation.test_boolean_feature_flag_payload_decide  s     +D1$13#7$
 $
  	K001hPUEV 1   		
 	
 	
 	K00" #+U"3	 1   	
 	
 	
 	/33311555  """""r   c                    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                             ddddi          d d!i           |                     | j                             dddddi"          d d!i           |                     | j                             dddddi"          d#           |                     |j        d$           d S )%Nr9   r:   r   TrF   r}   r@   r+  r>   r   r<  r-  r  r=  r/  r  r.  r0  r1  r,  r2  r3  r4  r5  z"some-payload"z{"a": "json"})r.  r4  )r<   r  r   r   r6  rP   ajsonrC  r   r   rE  )r*   rv   multivariate_flags      r   'test_multivariate_feature_flag_payloadsz;TestLocalEvaluation.test_multivariate_feature_flag_payloads  s    "!"% (/(0);,3	 ' /2#.  ,.)DD  #2$324  $4$424  $3$324 !!( &6%4 G' '.
 .
^ &7$7!K00#*,>"? 1  
 &M	
 	
 	
 	K00+#*,>"?	 1   &M	
 	
 	
 	K00+#*,>"?	 1   	
 	
 	
 	/33333r   N)4__name__
__module____qualname__classmethodr   r!   r-   r5   r   r   r[   rb   rw   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)  r8  r:  r>  rA  rG  rI  rN  r&  r   r   r   r      s	       " " ["
 ! ! [!  
H H H TZ$%%"1 "1 &%"1H?
 ?
 ?
B TZ&''TZ$%%\4 \4 &% ('\4| TZ&''TZ$%%~4 ~4 &% ('~4@ TZ&''TZ$%%>4 >4 &% ('>4@ TZ&''TZ$%%P4 P4 &% ('P4d TZ&''TZ$%%4 4 &% ('4B TZ&''TZ$%%4 4 &% ('4 TZ&''4 4 ('4< 
Zvy))TZ&''@6 @6 (' *)@6D 
Zvy))TZ&''E6 E6 (' *)E6N 
Zvy))TZ&''6 6 (' *)6  
Zvy))TZ&''6 6 (' *)6" 
Zvy))TZ&''*6 *6 (' *)*6X 
Zvy))TZ&''16 16 (' *)16f 
Zvy))TZ&'':6 :6 (' *):6x 
Zvy))TZ&''I6 I6 (' *)I6V 
Zvy))TZ&''O6 O6 (' *)O6b TZ&''TZ$%%G3 G3 &% ('G3R TZ&''TZ$%%R2 R2 &% ('R2h TZ&''TZ$%%`2 `2 &% ('`2D TZ'((TZ$%%3 3 &% )(3:
? 
? 
? TZ&''TZ$%%4 4 &% ('4, TZ&''TZ$%%4 4 &% ('4, TZ&''TZ$%%4 4 &% ('40 TZ$%%O O &%O* TZ&''4 4 ('40 TZ$%%O O &%O& TZ&''4 4 ('4@ TZ'((TZ&''Q Q (' )(Q TZ'((TZ&''O O (' )(O TZ'((TZ$%%P P &% )(P TZ&''<4 <4 ('<4| TZ&''N4 N4 ('N4` TZ&''<4 <4 ('<4| TZ&''C4 C4 ('C4J TZ&'')4 )4 (')4V 
Zvy))TZ&''# # (' *)#2 TZ&''N4 N4 ('N4 N4 N4r   r   c                   t    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
 ed
          d             Zd Zd ZdS )TestMatchPropertiesNc                 B    ||d}||                     d|i           |S )Nr   rC   )update)r*   rB   rD   rC   results        r   propertyzTestMatchProperties.property  s1    u--MM:x0111r   c                    |                      dd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |dd i                     |                     t
                    5  t          |ddi           t          |i            d d d            n# 1 swxY w Y   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                      dg d	d          }|                     t          |dd
i                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t
                    5  t          |ddi           d d d            d S # 1 swxY w Y   d S )NrB   rD   r   value2 key2r>   rB   rD   rC   value1rZ  value3r_  r`  value4rX  rV   r   rW   r  r   )r*   
property_a
property_b
property_cs       r   test_match_properties_exactz/TestMatchProperties.test_match_properties_exact  s   ]]uG]<<
zE73CDDEEE
UH4EFFGGG
UBK@@AAA
UDMBBCCC566 	+ 	+:'8999:r***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ]]uGg]NN
zE73CDDEEE
UH4EFFGGG]];;;g # 
 

 	zE83DEEFFFzE83DEEFFFzE83DEEFFF
UH4EFFGGG566 	: 	::'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   #C55C9<C9*I

IIc                 F   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |dd i                     |                      dg 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
                    5  t          |ddi           t          |ddi           d d d            d S # 1 swxY w Y   d S )NrB   rD   is_notr]  rZ  r[  r^  ra  value5value6r`  r_  r\  rb  )r*   rc  re  s      r   test_match_properties_not_inz0TestMatchProperties.test_match_properties_not_in  sQ   ]]uGh]OO
zE83DEEFFFzE2;??@@@zE4=AABBB]];;;h # 
 

 	zE83DEEFFFzE83DEEFFFzE83DEEFFFzE2;??@@@zE4=AABBB
UH4EFFGGG
UH4EFFGGG
UH4EFFGGG566 	; 	;:'8999:'9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   $%HHHc                    |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |dd i                     |                     t
                    5  t          |ddi           t          |i            d d d            d S # 1 swxY w Y   d S )NrB   is_setr]  rD   rZ  r[  r\  rb  )r*   rc  s     r   test_match_properties_is_setz0TestMatchProperties.test_match_properties_is_set4  s;   ]]uHx]PP
zE73CDDEEEzE83DEEFFFzE2;??@@@
UDMBBCCC566 	+ 	+:'8999:r***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   #C77C;>C;c                    |                      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dd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     d S )NrB   valUe	icontainsr]  rD   rZ  r`  vaLue4343tfvalue5Alakazam{   3C  val3threerX  rV   r   rW   )r*   rc  rd  s      r   test_match_properties_icontainsz3TestMatchProperties.test_match_properties_icontains?  s   ]]uGk]RR
zE73CDDEEEzE83DEEFFFzE83DEEFFFzE83DEEFFFzE=3IJJKKK
UJ4GHHIII
UCLAABBB]]uC+]NN
zE3<@@AAAzE3<@@AAAzE6?CCDDD
UG4DEEFFFFFr   c                    |                      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                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     d S )NrB   z\.com$r   r]  z	value.comz
value2.com	value2comz.com343tfvalue5rt  ru  valuecomz	value\comrv  rw  rx  ry  z?*rD   rZ     4rz  r*   rc  rd  re  
property_ds        r   test_match_properties_regexz/TestMatchProperties.test_match_properties_regexQ  s   ]]uI]PP
zE;3GHHIIIzE<3HIIJJJ
UK4HIIJJJ
U<M4NOOPPP
UJ4GHHIII
UCLAABBB
UJ4GHHIII
UL4IJJKKK]]uC']JJ
zE3<@@AAAzE3<@@AAAzE6?CCDDD
UG4DEEFFF ]]uD7]KK

UG4DEEFFF
UH4EFFGGG ]]uA]HH
zE3<@@AAAzE1:>>???
UG4DEEFFFFFr   c                 >	   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |dd	i                     |                      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                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                      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                     |                      ddd
          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     d S )NrB   r9   r   r]  r   r   r   r   ltrl   rv  gte43lte414244,   *   3029100rF   123aloha123z      rz  )r*   rc  rd  re  r  
property_e
property_fs          r   $test_match_properties_math_operatorsz8TestMatchProperties.test_match_properties_math_operatorsp  s.   ]]uA]EE
zE1:>>???zE1:>>???
UAJ??@@@
UBK@@AAAzE4=AABBB]]uA]EE
zE1:>>???zE2;??@@@zE2;??@@@
UAJ??@@@
UCLAABBB
UCLAABBB]]uA]FF
zE1:>>???zE1:>>???
UAJ??@@@
UBK@@AAAzE3<@@AAA]]uD5]II
zE4=AABBBzE4=AABBBzE4=AABBB
UDMBBCCC
UBK@@AAAzE2;??@@@]]uD4]HH
zE4=AABBB 	zE5>BBCCC
UCLAABBB]]uJ]NN

UENCCDDD
UCLAABBB 	zE3<@@AAAAAr   c                 	   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |dt          j        ddd	          i                     |                     t          |dt          j        ddd	d
dd          i                     |                     t          |dt          j        ddd	d
ddt          j        d                    i                     |                     t          |dt          j        d          i                     | 	                    t          |ddi                     | 
                    t                    5  t          |dd
i           d d d            n# 1 swxY w Y   | 
                    t                    5  t          |ddi           d d d            n# 1 swxY w Y   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |dt          j        ddd	          i                     |                     t          |dt          j        d          i                     | 	                    t          |ddi                     | 
                    t                    5  t          |ddi           d d d            n# 1 swxY w Y   |                      ddd          }| 
                    t                    5  t          |dd
i           d d d            n# 1 swxY w Y   |                      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 )NrB   
2022-05-01is_date_beforer]  
2022-03-01
2022-04-30  r  r~   r9   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)rX  rV   r   datetimedater   gettzr   parserW   r  r   r  s        r   "test_match_property_date_operatorsz6TestMatchProperties.test_match_property_date_operators  s   ]]\4D # 
 

 	zE<3HIIJJJzE<3HIIJJJzE8=qRT;U;U3VWWXXX:x/@q"aQRTU/V/V'WXX	
 	
 	
 	8,aQ1RXo5N5N   		
 		
 		
 	zE6<;U;U3VWWXXX
UL4IJJKKK 566 	3 	3:qz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 566 	: 	::x'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]]\O # 
 

 	zE<3HIIJJJzE<3HIIJJJ:x/@q"/M/M'NOO	
 	
 	
 	zE6<;U;U3VWWXXX
UL4IJJKKK 566 	: 	::x'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]]uDCS]TT
566 	3 	3:qz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]]9DT # 
 

 	
UL4IJJKKKzE<3HIIJJJ:/K'LMM	
 	
 	
 	:/K'LMM	
 	
 	
 	:/K'LMM	
 	
 	
 	:/K'LMM	
 	
 	
 	:/K'LMM	
 	
 	
 	
 	
sH   F==GG"HHHL<<M M 9NNNr  c                    |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |dt          j        ddd	d
dd          i                     |                     t          |dt          j        ddd	          i                     |                     t          |dt          j        ddd	ddd          i                     |                     t          |dt          j        ddd	d
ddt          j        d                    i                     |                     t          |dt          j	        d          i                     |                     t          |ddi                     | 
                    t                    5  t          |dd
i           d d d            n# 1 swxY w Y   | 
                    t                    5  t          |ddi           d d d            n# 1 swxY w Y   |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |dt          j        ddd	          i                     |                     t          |dt          j	        d          i                     |                     t          |ddi                     | 
                    t                    5  |                     t          |ddi                     d d d            n# 1 swxY w Y   |                      ddd          }| 
                    t                    5  |                     t          |dd
i                     d d d            n# 1 swxY w Y   |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |ddi                     |                      ddd          }|                     t          |ddi                     |                     t          |dd i                     |                      dd!d          }|                     t          |dd"i                     |                     t          |dd#i                     |                     t          |dd$i                     |                      dd%d          }|                     t          |dd&i                     |                     t          |dd'i                     |                      dd(d          }	|                     t          |	dd)i                     |                     t          |	dd*i                     |                      dd+d          }
|                     t          |
ddi                     |                     t          |
dd,i                     |                      dd-d          }|                     t          |ddi                     |                     t          |dd.i                     |                     t          |dd/i                     |                      dd0d          }|                     t          |ddi                     |                     t          |dd1i                     |                      dd%d          }|                     t          |dd2i                     |                     t          |dd3i                     |                      dd(d          }|                     t          |ddi                     |                     t          |dd*i                     |                     t          |dd4i                     |                     t          |dd5i                     |                     t          |dd6i                     d S )7NrB   z-6hr  r]  r  r  r  r  r~   r9   r   r      r  r  r  r  1hr  r  r  r  12dr  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)rX  rV   r   r  rW   r  r   r  r   r  r  r   )r*   rc  rd  re  r  r  r  
property_g
property_h
property_i
property_j
property_k
property_l
property_m
property_ns                  r   +test_match_property_relative_date_operatorsz?TestMatchProperties.test_match_property_relative_date_operators  sb
   ]]uEDT]UU
zE<3HIIJJJzE<3HIIJJJ:x/@q"aQRTU/V/V'WXX	
 	
 	
 	:x}T1b/I/I'JKK	
 	
 	
 	UH$5dAr2q!$L$LM 	
 	
 	

 	8,aQ1RXo5N5N   		
 		
 		
 	zE6<;U;U3VWWXXX
UL4IJJKKK 566 	3 	3:qz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 566 	: 	::x'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]]uD?]SS
zE<3HIIJJJzE<3HIIJJJ:x/@q"/M/M'NOO	
 	
 	
 	zE6<;U;U3VWWXXX
UL4IJJKKK 566 	L 	L^J8IJJKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L ]]uD?]SS
566 	E 	E^J
CCDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	zE<3HIIJJJ ]]uEDT]UU

UL4IJJKKKzE<3HIIJJJ:/J'KLL	
 	
 	
 	:/J'KLL	
 	
 	
 	:/J'KLL	
 	
 	

 ]]uDCS]TT

U<Q4RSSTTTzE;P3QRRSSS]]uEDT]UU
zE;P3QRRSSS
U<Q4RSSTTT]]uDCS]TT
zE;P3QRRSSS
U<Q4RSSTTT
U<Q4RSSTTT]]uDCS]TT
zE;P3QRRSSS
U<Q4RSSTTT]]uDCS]TT
zE;P3QRRSSS
U<Q4RSSTTT]]uF_]UU
zE;P3QRRSSS
U<Q4RSSTTT]]uD?]SS
zE;P3QRRSSSzE;P3QRRSSS
U<Q4RSSTTT]]uF_]UU
zE;P3QRRSSS
U<Q4RSSTTT]]uD?]SS
zE;P3QRRSSS
U<Q4RSSTTT]]uD?]SS
zE;P3QRRSSSzE;P3QRRSSS
U<Q4RSSTTT
U<Q4RSSTTT
U<Q4RSSTTTTTsH   G99G= G=H==II&NNN&O::O>O>c                    |                      ddd          }|                     t          |dd i                     |                     t          |ddi                     |                      dd d          }|                     t          |dd i                     |                      ddd          }|                     t          |dd i                     |                     t          |dd	i                     |                      dd
d          }|                     t          |dd i                     |                      ddd          }|                     t          |dd i                     |                      ddd          }|                     t          |dd i                     |                      ddd          }|                     t          |dd i                     |                      ddd          }|                     t          |dd i                     |                      ddd          }	|                     t          |	dd i                     |                      ddd          }
|                     t          |
dd i                     |                      ddd          }|                     t          |dd i                     |                      ddd          }|                     t
                    5  |                     t          |ddi                     d d d            d S # 1 swxY w Y   d S )NrB   nonerh  r]  nonrm  norq  smhNor   r9   r   r  xyzr  Oor  r  r  r  random)rX  rW   r   rV   r  r   )r*   rc  rd  re  r  property_d_lower_caser  r  r  r  r  r  r  s                r   +test_none_property_value_with_all_operatorsz?TestMatchProperties.test_none_property_value_with_all_operatorsk	  s   ]]uFX]NN

UDMBBCCCzE5>BBCCC]]uD8]LL

UDMBBCCC]]uD;]OO

UDMBBCCC
UENCCDDD]]uD7]KK

UDMBBCCC $%tg V V(=t}MMNNN]]uA]EE

UDMBBCCC]]uA]EE

UDMBBCCC]]uEE]JJ

UDMBBCCC]]uD5]II

UDMBBCCC]]\4D # 
 

 	
UDMBBCCC]]\O # 
 

 	
UDMBBCCC]]\4D # 
 

 566 	L 	L^J8IJJKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   &MMMc                    |                      ddd          }|                     t                    5 }t          |ddi           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )NrB   r  
is_unknownr]  r  zUnknown operator is_unknown)rX  r  r   r   rs   str	exception)r*   rc  exception_contexts      r   test_unknown_operatorz)TestMatchProperties.test_unknown_operator	  s    ]]uL<]XX
566 	::K:x'8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:!+,,.K	
 	
 	
 	
 	
s   AAAr   )rO  rP  rQ  rX  rf  rk  rn  r{  r  r  r  r   r  r  r  r&  r   r   rT  rT    s           : : :<; ; ;.	+ 	+ 	+G G G$G G G>1B 1B 1BfK
 K
 K
Z [xU xU xUt,L ,L ,L\
 
 
 
 
r   rT  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestRelativeDateParsingc                    t          d          5  t          d          J t          d          J t          d          J t          d          J t          d          J t          d          J t          d          J t          d	          J t          d
          J t          d          J t          d          J 	 d d d            d S # 1 swxY w Y   d S )N2020-01-01T12:01:20.1340Zrl   1xz1.2y1z1sz123344000.134mbazinga000bello000hello000h1000h)r   r	   r4   s    r   test_invalid_inputz*TestRelativeDateParsing.test_invalid_input	  si   455 	V 	V@EEMMM@FFNNN@HHPPP@FFNNN@FFNNN=>NOOWWW@KKSSS@LLTTT@LLTTT@HHTTT@IIUUUU	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vs   B<CC!Cc                 J    t          d          J t          d          J d S )N1000000h100000000000000000y)r	   r4   s    r   test_overflowz%TestRelativeDateParsing.test_overflow	  s1    <ZHHPPP9:OPPXXXXXr   c                 j   t          d          5  t          d          t          j        dddddddt          j        d          	          k    sJ t          d
          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          d          k    sJ t          d          t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r    r9         p UTCr  2h
   24h        30h   48hr~   1dr  r   r	   r  r   r  r4   s    r   test_hour_parsingz)TestRelativeDateParsing.test_hour_parsing	  s   455  	E  	E@ "aB2vbhuoo     
 A "aB2vbhuoo     
 A "b"b!R     
 A "b"aBrx     
 A "b"b!R      A >tDDE E E E A >tDDE E E E E= 	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	Es   F
F((F,/F,c                 &   t          d          5  t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r  r  r9   r  r  r  r  r  r~   7dr3  14d   30dr   r  r  r4   s    r   test_day_parsingz(TestRelativeDateParsing.test_day_parsing	  sk   455 	E 	E@ "b"b!R     
 A "b"b!R     
 A "b"b!R     
 A "b"b!R     
 A "b!RBrx      A >tDDE E E E E7	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E   E(FF
F
c                 &   t          d          5  t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          j        dddddddt          j        d	          
          k    sJ t          d          t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r  r3  r9   r  r  r  r  2wr  4wr  8wr  r  r  r  r4   s    r   test_week_parsingz)TestRelativeDateParsing.test_week_parsing	  sk   455 	E 	E@ "b"b!R     
 A "b"b!R     
 A "b!RBrx     
 A "b!RBrx      A "b!RBrx     
 A >tDDE E E E E7	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Er  c                 :   t          d          5  t          d          t          j        dddddddt          j        d          	          k    sJ t          d
          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          d          k    sJ 	 d d d            n# 1 swxY w Y   t          d          5  t          d          t          j        ddddddt          j        d          	          k    sJ t          d
          t          j        ddddddt          j        d          	          k    sJ t          d          t          j        ddddddt          j        d          	          k    sJ t          d          t          j        ddddddt          j        d          	          k    sJ t          d          t          j        ddddddt          j        d          	          k    sJ t          d          t          d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r  r9   r  r  r  r  2mr  4m	   8mr  r  12mz2020-04-03T00:00:00r  r   r   r      r  r  r4   s    r   test_month_parsingz*TestRelativeDateParsing.test_month_parsing
  s   455 	E 	E@ "b!RBrx     
 A "b!RBrx     
 A "aB2vbhuoo     
 A "aB2vbhuoo      A "aB2vbhuoo     
 A >tDDE E E E E7	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E> .// 	E 	E@ "4Aq!QrxOOOP P P P A "4Aq!QrxOOOP P P P A "4Q1aPPPQ Q Q Q A "4Aq!QrxOOOP P P P A "4Aq!QrxOOOP P P P A >tDDE E E E E#	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es%   E(FF	F	E#LLLc                 `   t          d          5  t          d          t          j        dddddddt          j        d          	          k    sJ t          d
          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ t          d          t          j        dddddddt          j        d          	          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r9   r  r  r  r  r  2yi  4yi  8yi  r  r4   s    r   test_year_parsingz)TestRelativeDateParsing.test_year_parsingR
  s   455 	 	@ "aB2vbhuoo     
 A "aB2vbhuoo     
 A "aB2vbhuoo     
 A "aB2vbhuoo      !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   DD##D'*D'N)
rO  rP  rQ  r  r  r  r  r   r  r  r&  r   r   r  r  	  s        V V V"
 
 
!E !E !EFE E E@E E E@3E 3E 3Ej    r   r  c                   &   e Zd Zej                            ed           ej        d          d                         Zej                            ed           ej        d          d                         Zej                            ed           ej        d          d                         Z	 ej        d          d             Z
ej                            ed           ej        d          d                         Zej                            ed           ej        d          d                         Z ej        d	d
          ej                            ed           ej        d          d                                     ZdS )TestCaptureCallsr   rc   c           	         dddii|_         t          t          t                    }ddddd	d
ddgddgidg|_        |                     |                    ddddd                     |                     |j        d           |                    dddddddi d            |	                                 |                     |                    ddddd                     |                     |j        d           |	                                 |                     |                    ddddd                     |                     |j        d           |                    dddddddi d            |	                                 |                     |                    dddddd                     |                     |j        d           |	                                 |                     |                    dddddddi          d           |                     |j        d           |                     |j        d           |                    dddddddddid            d S ) Nrp   decide-flagdecide-valuerz   r9   r:   ry   Tr<   r=   r?   r   rF   rG   rJ   rO   r|   r   rP   $feature_flag_called$feature_flag$feature_flag_responselocally_evaluated$feature/complex-flagr<   disable_geoipr   some-distinct-id2zsome-distinct-id345F)rQ   send_feature_flag_eventsorganizationorg1)rQ   r<   )r  r  r  $feature/decide-flag)
ru   r   r   rT   rV   rU   rs   rt   assert_called_withr   r   s       r   test_capture_is_calledz'TestCaptureCalls.test_capture_is_calledk
  s    %3]N4S#T )<MNNN &%3;e+L+L*M25   
" 	##"-2G"D"D $  	
 	
 	
 	11555(("!/*.%))-	   	) 	
 	
 	
 	  """ 	##"-2G"D"D $  	
 	
 	
 	11555  """ 	###-2G"D"D $  	
 	
 	
 	11555(("!/*.%))-	   	) 	
 	
 	
 	  """ 	##%-2G"D"D).	 $  	
 	
 	
 	11555  """ 	###-2G"D"D&/	 $   	
 	
 	
 	/33311555(("!.*8%*(6	  #F+ 	) 	
 	
 	
 	
 	
r   c                 H   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           |                    dddddddddddi d            d S )Nr  Tzdecide-variantdescriptionMatched condition set 1   r  )rK   versionrB   enabledr   reasonmetadata
false-flagFno_matching_conditionzNo matching condition)coder#  condition_indexr9   r   )r  r+  $18043bf7-9cf6-44cd-b959-9662ee20d371r   	requestIdrO   r  )r  r  r  r  $feature_flag_reason$feature_flag_id$feature_flag_version$feature_flag_request_idr  )ru   r   r   rs   rU   rt   r   r   s       r   (test_capture_is_called_with_flag_detailsz9TestCaptureCalls.test_capture_is_called_with_flag_details
  s>    )#/%'@ !#%! !    ($# 7'>+/   #$! !  8 @;$
 $
 > )**##M3EFFHX	
 	
 	
 	11555(("!.*:%*(8(A$&)+,R	 	  	) 	
 	
 	
 	
 	
r   c                 <   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           |                    ddddddddddddid	i d            d S )Nzdecide-flag-with-payloadTmatched_conditionr   r$  )r-  r.  r#  r%  r  z{"foo": "bar"})rK   r&  payloadr'  r/  r0  rO   foobarr9   r  F)	r  r  r  z!$feature/decide-flag-with-payloadr2  r3  r4  r5  z$feature_flag_payloadr  )ru   r   r   rs   rF  rt   r   r   s       r   4test_capture_is_called_with_flag_details_and_payloadzETestCaptureCalls.test_capture_is_called_with_flag_details_and_payload  s    +5## 3+,'@  !#%#3! !- -" @%$
 $
 ( )**++*,>  EN		
 	
 	
 	11555(("!;*.%*59(A$&)+,R*/
 
  	) 	
 	
 	
 	
 	
r   c           	         dddii|_         t          t          t                    }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|_        |                     |                    ddd
di                     |j                            d          }|d         dk    sJ |d         d         dk    sJ |d         d         du sJ |d         d         du sJ |d         d         du sJ d|d         vsJ d|d         vsJ d S ) Nrp   r  r  rz   r9   r:   ry   Tr<   r=   r?   r   rF   rG   rJ   r   zGamma Featuresimple-flagrO   rP   F)blockeventr  rH   r  r  r  r  z$feature/simple-flagz$active_feature_flags)ru   r   r   rT   rV   rU   queueget)r*   rv   r3   msgs       r   1test_capture_is_called_but_does_not_add_all_flagszBTestCaptureCalls.test_capture_is_called_but_does_not_add_all_flagsK  s   $2]N4S#T )<MNNN &%3;e+L+L*M25   '$*,25   
> 	## 2xQVFW $  	
 	
 	
 lU++7|55555< 1^CCCC< !9:dBBBB< !45====< !89TAAAA%S->>>>>&c,.???????r   c           	         ddiddid|_         t          t          t                    }dddddd	d
dgddgidg|_        |                    ddd
dd           |                     |j        d           |                    dddddddi d            |                                 |                                 |                    ddd
dd           |                     |j        d           |                                 |                    ddd
dd           |                     |j        d           |                    dddddddi d            |                                 d S )Nr;   Tr   r   api_keyr{   r9   r:   r<   r=   r?   r   rF   rG   rJ   rO   r|   r   )rB   r   rQ   r  )r  r  r  z$feature/person-flagr  r   r  )	ru   r   r   rT   rF  rs   rt   r   r   r   s       r   2test_capture_is_called_in_get_feature_flag_payloadzCTestCaptureCalls.test_capture_is_called_in_get_feature_flag_payload~  s8    +D1$13#7$
 $
   1DUVVV &$3;e+L+L*M25   
$ 	''*).@@ 	( 	
 	
 	
 	11555(("!.*.%)(,	   	) 	
 	
 	
 	  """    	''*).@@ 	( 	
 	
 	
 	11555  """ 	''+).@@ 	( 	
 	
 	
 	11555(("!.*.%)(,	   	) 	
 	
 	
 	  """""r   c           	          dddii|_         t          t          t          d          }ddddd	d
ddgddgidg|_        |                    dddddd           |                    dddddddi d           d S )Nrp   r  r  T)r{   r  r9   r:   ry   r<   r=   r?   r   rF   rG   rJ   rO   r|   r   F)rQ   r  r  r  r  )ru   r   r   rT   rU   r   r   s       r   (test_disable_geoip_get_flag_capture_callz9TestCaptureCalls.test_disable_geoip_get_flag_capture_call  s     %3]N4S#T 0AQU
 
 

 &%3;e+L+L*M25   
" 	).@@	 	  	
 	
 	
 	(("!/*.%))-	   	) 	
 	
 	
 	
 	
r   zposthog.client.MAX_DICT_SIZErF   c           
      b   t          t          t                    }dddddg ddgid	g|_        t          d
          D ]o}d| }|                    d|ddd           |                    |ddddddi d            |                     t          |j                  |dz  dz              pd S )Nrz   r9   r:   ry   Tr<   rF   rG   rJ     rO   r?   r|   r   rP   r  r  r  )	r   r   rT   rangerU   r   rs   r   #distinct_ids_feature_flags_reported)r*   rv   r   r3   ir   s         r   0test_capture_multiple_users_doesnt_out_of_memoryzATestCaptureCalls.test_capture_multiple_users_doesnt_out_of_memory  s-    )<MNNN &%*,25   
" t 	 	A0Q00K##-2G"D"D $   
 ,,&%3.2)--1	  " -    F>??S1   )	 	r   N)rO  rP  rQ  r   r   r   r   r!  r6  r<  rD  rH  rJ  rP  r&  r   r   r  r  j
  s       	Zvy))TZ&''o
 o
 (' *)o
b 
Zvy))TZ&''5
 5
 (' *)5
n 
Zvy))TZ&''0
 0
 (' *)0
d TZ&''0@ 0@ ('0@d 
Zvy))TZ&''S# S# (' *)S#j 
Zvy))TZ&''(
 (
 (' *)(
T TZ.44	Zvy))TZ&''+ + (' *) 54+ + +r   r  c                   @   e Zd Zed             Zed             Zd Zd Z ej	        d          d             Z
 ej	        d          d             Z ej	        d          d	             Z ej	        d          d
             Z ej	        d          d             ZdS )TestConsistencyc                     t           j                            t          d          | _        | j                                         d S r   r   r   s    r   r   zTestConsistency.setUpClass3  r   r   c                 8    | j                                          d S r   r   r   s    r   r!   zTestConsistency.tearDownClass9  r"   r   c                 6    t          d||           d| _        dS r$   r&   r)   s      r   r-   zTestConsistency.set_fail=  r.   r   c                 T    d| _         t          t          | j                  | _        d S r0   r2   r4   s    r   r5   zTestConsistency.setUpB  r6   r   r7   c                 
   dddddg ddgidg| j         _        g d	}t          d
          D ]U}d| }| j                             d|          }||         r|                     |           @|                     |           Vd S )Nr9   r:   r>  Tr<   -   rG   rJ   (  FTTFTFFTFTFTTFTFFFTTFTFFTFTTFFFTTTTFFFFFFTTFTTFFFTTFFFFTFTFTFTTFTFTFTTFFTFFTFTFFTFFFTTFTTFTTTTTFTTFFTTTTFFTFTTTFFFFFTFFTTTFFTFTFFTFFFFFFFFTTFFTFFTTFFTFTFTTTFFFTFFFFTTFTTFTFTTFTFTTTFTFFTTFTFTTFFTTTTFTTFFTFTFFTTFTFTFFFFFFFTFTTFFTFTFFFTFTFFFTFFTFTTFFFFTFFFFFFFFFFFFFTTFTFTTFTFTFFFTTTTFFFFFTTTFFTTFFFFFTFTTTTFTTTFFTFTFFTTTFTFFFTTFTFTFTTTTTFFTFTFTTTFTFTTFTTTTTFFFFFTFTFFTTFFFTFTTTTFFFFTTFFTTFTTTTFTTTFFTTFFTFFTFFFFFFFFFFTTFFTFFTFTFFTFFFFFFTFFFFFFFFFTTTFFFTFTFFFTFFFFFFFTFFFFFFFFTFTFTTTFFFTTTFTFTTFFFTFFFFTFTFTTFTFFFTFFTTFTFFFFFFTTFFTFFTTTFFFTFFFFTFTFFFTFTTFTFTFTFFTFFTFTFTFTFFTTTTFTFFFFFTFFTFFTTFFFFTTTFFTFFTTTTFFFTFFFTFFTTTTFFTTFTFTFFTTFTTTTFFTFFTTFTFTFFTFFFFTTTFTFFTFFTFFFFTFTFTTFFTFTTTFFFFTTFTFFFTFFFFTTTFFFTTTTFTTFTTTFTFFTFTTTTFTFTFTFFTTFFTFTFFFFTFTFFFTTTFFFTFTTFFFFFTFTFFTTFTTTTFFTFFTFTFTTFFFTFTTFFFTFTFTTFTFFTFFFTTTFFFFFTFFTTTTTFFFFFFFFTTTFFTTFTTFTFTFFFTFFTFFTTTTFFTFTTFFTFFTTFTFFTTTFFFFFTFTFFFFFTTFTTTFFFFTTTTFTTFTFTFTFFFFTTTTFFTFTTFFFFFFTFTFTTFFTTTTFFTFTTFFTTTFTFFTTFFFTFFTFFFTTTTFTFTFTFTFFTFFTFTTrL  distinct_id_)r3   rT   rM  r   rV   rW   r*   rX   resultsrO  
distinctIDrY   s         r   test_simple_flag_consistencyz,TestConsistency.test_simple_flag_consistencyF  s     &$bKKL 
%
!i
 i
 i
V t 	5 	5A+++J!%!<!<]J!W!Wqz 5 23333  !34444	5 	5r   c                 P   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|          }||         r|                     |||                    G|                     |           ]d S )Nr9   r:   zmultivariate-flagT7   rG   r  r.  r0  r  r1  r,  r2  r  r4  r5  fourth-variantzFourth Variantr  fifth-variantzFifth Variantr  rJ   (  r,  r,  r.  FFr,  r.  FFFr.  r4  Fr.  r,  r.  FFr`  r.  Fr4  FFFr.  r.  r.  r.  r.  r.  r4  Fr4  r,  r.  Fr4  FFr.  r,  Fr.  r.  r,  Fr.  FFr.  r.  r.  r,  r.  Fr,  r,  r4  r,  r.  Fr.  r,  r`  Fr.  r.  r.  Fr.  r,  Fr4  FFFFFFr.  ra  Fr,  r.  r,  Fr4  r4  FFFFr4  FFr.  r.  Fr4  r4  Fr4  r,  r4  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.  FFFr4  r.  FFr.  FFFFr.  FFFFFFFr.  r.  r4  r.  r.  FFr.  FFra  r,  Fr,  Fr.  r4  r.  ra  r4  FFr`  FFFFr4  FFr4  Fr.  r,  r,  r,  Fr.  r4  r.  r.  FFFFFr.  r.  r.  r,  FFFr,  FFr.  Fr.  FFr.  r.  r.  r.  r4  r.  r4  r.  r.  r,  r4  r4  Fr,  r.  Fr,  r.  Fr.  FFr.  ra  r.  FFFFr.  r.  r,  Fr,  r4  r4  Fr.  r4  FFr.  Fr4  r.  Fr4  r.  r.  Fr.  r,  r,  r.  FFFr,  FFr.  r.  Fr4  Fr.  Fr4  Fr4  r,  r.  FFr.  r4  r.  r,  ra  FFr.  FFFr4  Fr,  r.  FFFFr4  FFr4  FFr.  r4  FFr.  FFr`  r`  r4  r,  r.  r4  ra  Fr.  ra  Fr.  r.  r.  FFFr,  ra  r,  r.  r.  r,  FFr4  Fr,  ra  Fr4  r.  FFr`  FFr,  FFr.  r`  r.  r,  FFFr.  r4  r4  Fr.  r.  r.  Fr.  Fr.  r4  r4  FFr.  FFr,  r,  r.  r.  r.  Fra  r.  FFFr,  r4  r.  r`  r.  r4  Fr.  r.  Fr4  r.  r.  r4  Fr`  ra  r.  r.  FFFr.  r.  r.  Fr.  r.  r,  r.  Fr.  r,  r.  Fr.  r,  Fr.  r.  Fr.  Fr.  Fr.  FFFr4  r4  r.  FFr,  r4  r.  r.  FFFr,  r.  Fr.  r4  Fr.  FFFr.  r4  r4  FFFFr4  r`  r`  r.  r,  Fr.  Fr,  r.  r4  Fr4  Fr.  r.  r4  FFFr`  r,  r.  FFr.  r`  Fr.  r4  r.  FFr4  Fr.  Fr.  r.  r4  r,  r`  Fr.  FFFFr,  r.  r,  Fr.  Fr.  r.  Fr.  r.  r,  r4  r.  r.  r.  FFFr4  Fr.  r.  r.  r4  r.  r.  r,  r.  ra  r`  r.  r,  Fr`  FFFr`  FFr4  FFFr.  r4  r4  r,  r.  r,  r.  Fr.  FFFFFr.  r.  Fr,  FFr.  Fr,  r.  r.  r.  r4  r,  FFra  r4  FFr.  FFFr.  r,  r4  r4  FFr.  Fr4  r.  FFFFr`  r.  FFFr4  FFr,  r.  FFr,  r4  r.  r.  Fr.  r.  FFr,  r4  r,  r4  FFr.  FFr.  Fr,  FFFFr.  Fr4  Fr.  FFr,  r4  r,  r`  r.  r.  r.  Fr.  Fr,  FFFFFr.  FFFFFr.  Fr,  FFFFr,  Fr.  Fr4  FFr.  r4  Fr4  FFr,  Fr.  r,  r.  FFFFFr,  FFr.  r4  Fr.  FFFFFr.  r,  FFFr.  r.  ra  FFFr.  Fr4  FFr,  FFFFFr`  r,  r.  r,  Fr,  Fr,  Fr.  Fr.  r.  Fr,  Fr.  Fra  Fr.  r.  FFFr.  Fr.  r4  FFr.  r.  FFra  FFr4  Fr4  r.  r.  r4  r4  Fr.  FFFFFr.  FFFFr,  r.  r,  r.  Fra  r.  FFr`  r.  r.  FFr`  r.  Fr,  r4  r4  r.  r.  FFFr.  r.  r.  Fr4  r4  r4  FFr.  r.  Fr,  FFr,  Fr4  r.  r,  ra  r.  r.  Fr.  ra  FFFr4  r.  r.  r,  r`  r.  r,  r.  FFFr,  r4  FFr.  FFFFFFr.  r.  Fr4  Fr.  Fr4  r4  r.  r.  Fr,  Fr,  r.  FFFr,  Fr4  Fr.  ra  r.  r.  FFr.  FFFr.  r`  r.  r.  r.  ra  FFFr,  FFFr.  r.  FFr.  r.  r,  r.  r.  r.  r.  r.  r4  r.  Fr,  FFr4  r,  r4  Fr.  r4  r,  r.  r4  FFr.  r.  FFFr.  r4  r,  r.  r.  r.  Fr4  r,  r4  FFr4  r.  Fr.  rL  rY  )r3   rT   rM  rU   rs   rW   rZ  s         r   "test_multivariate_flag_consistencyz2TestConsistency.test_multivariate_flag_consistencyI  sW    &*.0KKL"'6(768  (8(868  (7(768  (8(867  (7(767 +%% % %'%
!Ri
 i
 i
V t 		5 		5A+++J!%!=!=#Z" " qz 5  !3WQZ@@@@  !34444		5 		5r   rc   c                 j   di i|_         t          t          t                    }ddddg ddgid	g|_        |                     |                    dd
                     |                     |                    dd
                     |                     |                    dd
                     d S )Nrp   rF  r9   Beta-FeatureTr<   rF   rG   rK   rB   rM   rN   user1r   BETA-FEATURE)ru   r   r   rT   rV   r   rW   r*   mock_decider3   s      r    test_feature_flag_case_sensitivez0TestConsistency.test_feature_flag_case_sensitivej  s     B$
   1DUVVV %bLLM	 	 
 	..~wGGHHH//HHIII//HHIIIIIr   c                    ddidddiid|_         t          t          t                    }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 )Nrd  TsomerD   r   rF  r9   rF   rG   r   r   re  rf  r   rg  )ru   r   r   rT   rs   rF  r   rh  s      r   (test_feature_flag_payload_case_sensitivez8TestConsistency.test_feature_flag_payload_case_sensitive  s    ,T2$2VW4E#F$
 $
 
  1DUVVV %.0LLM 1! 	
 
 
 	++NGDDvwFW	
 	
 	
 	&99.'RRSSS&99.'RRSSSSSr   c                    ddidddiid|_         t          t          t                    }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 ]T}|                     |                    |d                     | 	                    |                    |d                     Ud S )Nrd  Trl  rD   r   rF  r9   rF   rG   r   r   re  rf  )r   rg  zbEtA-FeAtUrE)
ru   r   r   rT   rV   r   rs   rF  rW   r   )r*   ri  r3   
test_casescases        r   ,test_feature_flag_case_sensitive_consistencyz<TestConsistency.test_feature_flag_case_sensitive_consistency  sP    ,T2$2VW4E#F$
 $
 
  1DUVVV %.0LLM 1! 	
 
 
  	..~wGGHHH++NGDDvwFW	
 	
 	

 FEE
 	N 	NDV33D'BBCCCf==dGLLMMMM	N 	Nr   N)rO  rP  rQ  rR  r   r!   r-   r5   r   r   r]  rb  rj  rm  rq  r&  r   r   rR  rR  2  sI       " " ["
 ! ! [!  
H H H TZ$%%@5 @5 &%@5D  TZ$%%^5 ^5 &%^5@! TZ&''J J ('J, TZ&''T T ('T8 TZ&'' N  N (' N  N  Nr   rR  )r  unittestr   dateutilr   r   	freezegunr   posthog.clientr   posthog.feature_flagsr   r   r	   posthog.requestr
   posthog.test.test_utilsr   TestCaser   rT  r  r  rR  r&  r   r   <module>rz     s              ! ! ! ! ! ! ! ! ! ! ! !         
 % $ $ $ $ $ 5 5 5 5 5 5b4 b4 b4 b4 b4(+ b4 b4 b4J?h
 h
 h
 h
 h
(+ h
 h
 h
VE E E E Eh/ E E EPE E E E Ex( E E EPM"N M"N M"N M"N M"Nh' M"N M"N M"N M"N M"Nr   