
    Ki                    B   S SK r S SKrS SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr   " S S	\R$                  5      r " S
 S\R$                  5      r " S S\R$                  5      r " S S\R$                  5      r " S S\R$                  5      rg)    N)parsertz)freeze_time)Client)InconclusiveMatchErrormatch_property-relative_date_parse_for_feature_flag_matching)APIError)FAKE_TEST_API_KEYc                   x   \ rS rSr\S 5       r\S 5       rS rS r\	R                  " S5      S 5       rS r\	R                  " S	5      \	R                  " S5      S
 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      S 5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  R)                  \S5      \	R                  " S	5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r\	R                  " S	5      \	R                  " S5      S 5       5       r \	R                  " S	5      \	R                  " S5      S 5       5       r!\	R                  " S5      \	R                  " S5      S 5       5       r"S  r#\	R                  " S	5      \	R                  " S5      S! 5       5       r$\	R                  " S	5      \	R                  " S5      S" 5       5       r%\	R                  " S	5      \	R                  " S5      S# 5       5       r&\	R                  " S5      S$ 5       r'\	R                  " S	5      S% 5       r(\	R                  " S5      S& 5       r)\	R                  " S	5      S' 5       r*\	R                  " S5      \	R                  " S	5      S( 5       5       r+\	R                  " S5      \	R                  " S	5      S) 5       5       r,\	R                  " S5      \	R                  " S5      S* 5       5       r-\	R                  " S	5      S+ 5       r.\	R                  " S	5      S, 5       r/\	R                  " S	5      S- 5       r0\	R                  " S	5      S. 5       r1\	R                  " S	5      S/ 5       r2\	R                  R)                  \S5      \	R                  " S	5      S0 5       5       r3\	R                  " S	5      S1 5       r4S2r5g3)4TestLocalEvaluation   c                     [         R                  R                  [        S5      U l        U R                  R                  5         g Ncapturemockpatchobjectr   capture_patchstartclss    a/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/posthog/test/test_feature_flags.py
setUpClassTestLocalEvaluation.setUpClass   /     !JJ--fi@!    c                 8    U R                   R                  5         g Nr   stopr   s    r   tearDownClass!TestLocalEvaluation.tearDownClass        r   c                 *    [        SX5        SU l        gzMark the failure handlerFAILTNprintfailedselfebatchs      r   set_failTestLocalEvaluation.set_fail       far   c                 L    SU l         [        [        U R                  S9U l        g NF)on_errorr+   r   r   r0   clientr-   s    r   setUpTestLocalEvaluation.setUp"       .Gr   posthog.client.getc           
         SSSSSSSS/S	S
./SS./0S./U R                   l        U R                   R                  SSSS0S9nU R                   R                  SSSS0S9nU R                  U5        U R	                  U5        g )N   Beta Featureperson-flagTgroupsregionexactUSApersonkeyoperatorvaluetyped   
propertiesrollout_percentageidnamerG   activefilterssome-distinct-idperson_propertiessome-distinct-2Canada)r7   feature_flagsget_feature_flag
assertTrueassertFalse)r-   	patch_getfeature_flag_matchnot_feature_flag_matchs       r   test_flag_person_properties/TestLocalEvaluation.test_flag_person_properties&   s     &$ ,407.3W,4	!"+ 36
%
!0 "[[99-(EAR : 
 "&!=!=,8@T "> "
 	*+/0r   c                    SSSSSSSSS/S	S
./SS.SSS/S	S
./SS./0S./U R                   l        U R                  U R                   R                  SSSS0S95        U R                  U R                   R                  SSSS0S95        U R                  U R                   R                  SSSS0S95        U R                  U R                   R                  SSSS0S95        g )Nr>   r?   r@   TrA   locationrC   u   StraßerE   rF   rK   rL   staru   ſun)rP   rQ   rG   is_simple_flagrR   rS   rT   u   straßerU   strassesun)r7   rY   r[   rZ   r8   s    r   test_case_insensitive_matching2TestLocalEvaluation.test_case_insensitive_matchingK   sE    &$"& ,607.7[,4	!"+ 36
 ,207.4X,4	!"+ 36
 "%
!H 	KK(("#-y"9 ) 	
 	KK(("#-y"9 ) 	
 	KK((1ffEU ) 	
 	KK((1fe_ ) 	
r   posthog.client.flagsc                 d   SSSSSSSSS/S	S
./SS./S.S./U R                   l        SSS.U R                   l        U R                  U R                   R	                  SSSSS00S95        U R                  U R                   R	                  SSSSS00S95        U R                  U R                   R	                  SSSS0SSS00S95        U R                  U R                   R	                  SSSS0SSS00S95        U R                  U R                   R	                  SSSS0SSS00S95        U R                  UR                  S5        SSS00Ul        0 U R                   l        U R                  U R                   R	                  SSSS0SSS00S9S5        U R                  UR                  S5        g )Nr>   r?   z
group-flagTr   rQ   rC   zProject Name 1group)group_type_indexrG   rH   rI   rJ   #   rL   )aggregation_group_type_indexrA   rO   companyproject)01rT   )group_propertiesrW   zProject Name 2amazon_without_rollout)rA   rt   amazonfeatureFlagsdecide-fallback-value)	r7   rY   group_type_mappingr\   rZ   r[   assertEqual
call_countreturn_value)r-   r]   patch_flagss      r   test_flag_group_properties.TestLocalEvaluation.test_flag_group_properties   sE   
 &#45
 9:+107.>-?,3!"+ 35%
!4 09y)I& 	KK((""+f6F-G!H ) 	
 	KK((!"+f6F-G!H ) 	
 	KK(("!#;<"+f6F-G!H	 ) 	
 	KK(("!8,"+f6F-G!H	 ) 	
 	KK((!!#;<"+f6F-G!H	 ) 	
 	//3 \+BC$
  *,&KK(("!8,"+f6F-G!H	 )  $	
 	//3r   c                    SSS00Ul         [        [        [        S9nSSSSSS	S
S/SS.SS
S/SS./SS.SS
SS/SS./SS.SS
SS/SS./SS./0S./Ul        U R	                  UR                  SSSSS.S95        U R                  UR                  S5        U R	                  UR                  SSSSS.S95        U R                  UR                  S5        U R                  UR                  SS SSS.S9S5        U R                  UR                  S5        UR                  5         U R                  UR                  SSSS0S9S5        U R                  UR                  S5        UR                  5         U R                  UR                  SSS	S0S9S5        U R                  UR                  S5        UR                  5         U R                  UR                  SS SSS!SS".S95        U R                  UR                  S5        g )#Nrw   complex-flagrx   personal_api_keyr>   r?   TrA   rB   rC   rD   rE   rF   rQ   AloharK   rL   emailza@b.comzb@c.com   doesnt_matterrs   2r   rO   rT   rB   rQ   rU   z some-distinct-id_within_rollout?)rB   r   z!some-distinct-id_outside_rollout?X)rB   r   rQ   r   )
r|   r   r   rY   r[   rZ   rz   r{   
reset_mockr\   r-   r]   r}   r7   s       r   !test_flag_with_complex_definition5TestLocalEvaluation.test_flag_with_complex_definition   s    ^-DE$
  )<MN &% ,407.3W,4	!" ,207.5Y,4	!"+ 36( ,307.7-C,4	!"+ 35
 ,;07.13Z,4	!"+ 34
;(*02 
h 	##"-2G"D $ 	
 	//3 	##2-2Y"G $ 	
 	//3 	##3-2Y"G $ 
 $	
 	//3  	##"#2C"8 $ 
 $	
 	//3  	## 2xQVFW $  $		
 	//3  	##3#&%(	# $ 		
 	//3r   c                    SSSS.0Ul         [        [        [        S9nSSSS	S
SSS SS./SS./0S.SSSS	S
SSS/SS./SS./0S./Ul        UR	                  SS5      nU R                  US5        U R                  UR                  S5        UR	                  SS5      nU R                  US5        U R                  UR                  S5        g )Nrw   alakazam	alakazam2beta-featurebeta-feature2r   r>   r?   r   TrA   rP   b   cohortrG   rI   rH   rJ   rK   rL   rO      r   rB   rC   rD   rE   rF   rT   )r|   r   r   rY   rZ   rz   r{   r-   r]   r}   r7   r^   s        r   %test_feature_flags_fallback_to_decide9TestLocalEvaluation.test_feature_flags_fallback_to_deciden  s8    Z+V$
  )<MN &% ,0-/04,4	!"+ 36
, && ,407.3W,4	!"+ 36
-+ 
\ $44^EWX+Z8//3 $44/
 	+[9//3r   c                 \   SSSS.0Ul         [        [        [        S9nSSSS	S
SSS SS./SS./0S.SSSS	S
SSS/SS./SS./0S./Ul        UR	                  SSS	S9nU R                  US 5        U R                  UR                  S5        UR                  SSS	S9nU R                  US 5        U R                  UR                  S5        UR	                  SSS	S9nU R                  US 5        UR                  SSS	S9nU R                  US 5        U R                  UR                  S5        g )Nrw   r   r   r   r   r>   r?   r   TrA   rP   r   r   r   rK   rL   rO   r   r   rB   rC   rD   rE   rF   rT   only_evaluate_locallyr   )r|   r   r   rY   rZ   rz   r{   feature_enabledr   s        r   Mtest_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_trueaTestLocalEvaluation.test_feature_flags_dont_fallback_to_decide_when_only_local_evaluation_is_true  s    Z+V$
  )<MN &% ,0-/04,4	!"+ 36
, && ,407.3W,4	!"+ 36
-+ 
^ $44.d 5 
 	+T2//3#33.d 4 
 	+T2//3 $44/t 5 
 	+T2#33/t 4 
 	+T2//3r   c                    S0 0Ul         [        [        [        S9nSSSSS/ SS	./0S
./Ul        U R	                  UR                  SS5      5        U R	                  UR                  SS5      5        U R	                  UR                  SS5      5        U R                  UR                  S5        U R	                  UR                  SS5      5        U R                  UR                  S5        g )Nrw   r   r>   r?   r   TrA   r   rL   rO   rT   r   r   )	r|   r   r   rY   r\   rZ   r   rz   r{   r   s       r   Ctest_feature_flag_never_returns_undefined_during_regular_evaluationWTestLocalEvaluation.test_feature_flag_never_returns_undefined_during_regular_evaluation  s    
 %3B#7 )<MN &%*,23 
$ 	00ASTU//@RST 	00BTUV//3//ASTU//3r   c                 L   [        SS5      Ul        [        [        [        S9n/ Ul        U R                  UR                  SS5      5        U R                  UR                  S5        U R                  UR                  SS5      5        U R                  UR                  S5        g )Ni  zDecide errorr   r   rT   r>   r   )
r
   side_effectr   r   rY   assertIsNonerZ   rz   r{   r   r   s       r   4test_feature_flag_return_none_when_decide_errors_outHTestLocalEvaluation.test_feature_flag_return_none_when_decide_errors_out'  s    
 #+3"?)<MN! 	&11/CUVW//3&00BTUV//3r   c           	          SSS00Ul         [        [        SS9nSSSSS	S
/ S	S./0SS./Ul        U R	                  UR                  SS5      S5        U R	                  UR                  S5        g )Nrw   r   rx   testr   r>   r?   TrK   rA   rL   )rP   rQ   rG   rR   rN   rS   ensure_experience_continuitydistinct_idr|   r   r   rY   rz   rZ   r{   r-   r}   r7   s      r   5test_experience_continuity_flag_not_evaluated_locallyITestLocalEvaluation.test_experience_continuity_flag_not_evaluated_locally7  s     ^-DE$
  )FC &%&)*,25 15 
& 	##NMB#	
 	//3r   r   c           
      V   SSSSS.0Ul         U R                  nSSSS	S
S/ S
S./0S.SSSS	S/ SS./0S.SSSS	SSSS./SS./0S./Ul        U R                  UR	                  S5      SSSS.5        U R                  UR
                  S5        U R                  UR
                  S5        g )Nrw   	variant-1	variant-2F)r   r   disabled-featurer>   r?   r   TrK   rA   rL   rP   rQ   rG   rR   rN   rS   r   r   r   rO      r   countryUSrG   rI   r   r|   r7   rY   rz   get_all_flagsr{   r-   r}   patch_capturer7   s       r    test_get_all_flags_with_fallback4TestLocalEvaluation.test_get_all_flags_with_fallbackV  s     +!,$)$
   &%&)*,25  &)*,23 &&3<t+L*M23=, 
\ 	  / +!,$)	
 	//31115r   c           	      r   SSS.SSS.S.Ul         U R                  nSSS	S
S/ SS./SS0S.S.SSSS
/ SS./SS0S.S.SSSS
SSS./SS./SS0S.S./Ul        U R                  UR	                  S5      S   SSS.5        U R                  UR
                  S5        U R                  UR
                  S5        g )Nr   r   r   rK   ,  rw   featureFlagPayloadsr>   r?   r   TrL   truesome-payloadrA   payloadsr   r   r   r   another-payloadrO   r   r   r   r   r   	payload-3r   r   r|   r7   rY   rz   get_all_flags_and_payloadsr{   r   s       r   -test_get_all_flags_and_payloads_with_fallbackATestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback  s@    .9;W47##N$
   &%&) +-25 !
& &) +-23  1!
$ && 4=t+L*M23 !
I5 
n 	--m<=RS #!$	
 	//31115r   c                     SSSS.0Ul         U R                  n/ Ul        U R                  UR	                  S5      SSS.5        U R                  UR
                  S5        U R                  UR
                  S5        g )Nrw   r   r   r   r   r>   r   r   r   s       r   2test_get_all_flags_with_fallback_empty_local_flagsFTestLocalEvaluation.test_get_all_flags_with_fallback_empty_local_flags  s}     [;W$
  !  /(;G	
 	//31115r   c                    SSS.SSS.S.Ul         U R                  n/ Ul        U R                  UR	                  S5      S   SSS.5        U R                  UR
                  S	5        U R                  UR
                  S
5        g )Nr   r   r   rK   r   r   r   r   r>   r   r   r   s       r   ?test_get_all_flags_and_payloads_with_fallback_empty_local_flagsSTestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_empty_local_flags  s     .9;W47##N$
  !--m<=RS 37	
 	//31115r   c           	      0   SSSS.0Ul         U R                  nSSSSS	S
/ S	S./0S.SSSSS
/ SS./0S./Ul        U R                  UR	                  S5      SSS.5        U R                  UR
                  S5        U R                  UR
                  S5        g )Nrw   r   r   r   r>   r?   r   TrK   rA   rL   r   r   r   r   rO   r   Fr   r   r   r   s       r   #test_get_all_flags_with_no_fallback7TestLocalEvaluation.test_get_all_flags_with_no_fallback  s     [;W$
   &%&)*,25  &)*,23! 
> 	  /!u=	

 	//31115r   c                 0   U R                   nSSSSS/ SS./SS0S	.S
.nSSSS/ SS./SS0S	.S.nUU/Ul        U R                  UR                  S5      S   SS05        U R                  UR                  S5        U R                  UR                  S5        g )Nr>   r?   r   TrK   rL   r   newr   r   r   r   r   r   rO   r   r   )r7   rY   rz   r   r{   )r-   r}   r   r7   
basic_flagdisabled_flags         r   0test_get_all_flags_and_payloads_with_no_fallbackDTestLocalEvaluation.test_get_all_flags_and_payloads_with_no_fallback6  s    
 "!"% ').1 E


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

 	//31115r   c           
      P   SSSS.0Ul         U R                  nSSSSS	S
/ S	S./0S.SSSSS
/ SS./0S.SSSSS
SSS./SS./0S./Ul        U R                  UR	                  SSS9SSS.5        U R                  UR
                  S5        U R                  UR
                  S5        g )Nrw   r   r   r   r>   r?   r   TrK   rA   rL   r   r   r   r   rO   r   r   r   r   r   r   r   Fr   r   r   s       r   >test_get_all_flags_with_fallback_but_only_local_evaluation_setRTestLocalEvaluation.test_get_all_flags_with_fallback_but_only_local_evaluation_setk  s    [;W$
   &%&)*,25  &)*,23 &&3<t+L*M23=, 
\ 	  d K!u=	
 	//31115r   c                 z   SSS.SSS.S.Ul         U R                  nSSS	S
S/ SS./SS0S.S.nSSSS
/ SS./SS0S.S.nSSSS
SSS./SS./SS0S.S.nUUU/Ul        U R                  UR	                  SS
S9S   S	S05        U R                  UR
                  S5        U R                  UR
                  S5        g )Nr   r   r   rK   r   r   r>   r?   r   TrL   r   r   r   r   r   r   r   r   rO   r   r   r   r   r   r   r   r   r   r   )r-   r}   r   r7   flag_1flag_2flag_3s          r   Ktest_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_set_TestLocalEvaluation.test_get_all_flags_and_payloads_with_fallback_but_only_local_evaluation_set  sX    .9;W47##N$
  "!"% ').1 N

& "% ')./ -

$ "" 094'H&I./ K

$  
 	--T . #% ^,		
 	//31115r   c           	         U R                   nSSSSSS/ SS./0S.S	SS
SS/ SS./0S./Ul        U R                  UR                  S5      SSS.5        U R                  UR                  S5        U R                  UR                  S5        SSSSSS/ SS./0S.S	SS
SS/ SS./0S./Ul        U R                  UR                  S5      SSS.5        U R                  UR                  S5        U R                  UR                  S5        g )Nr>   r?   r   TrK   rA   rL   r   r   r   r   rO   r   Fr   )r7   rY   rz   r   r{   r   s       r   #test_compute_inactive_flags_locally7TestLocalEvaluation.test_compute_inactive_flags_locally  s{     &%&)*,25  &)*,23! 
> 	  /!u=	

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

 	//31115r   c                    [        [        [        S9n[        SSSSSSSS	S
S SSSSS.SSSSS.SSSSS.SSSSS./SS./00/Ul        UR	                  SSS S S S S.S9nU R                  US5        U R                  UR                  S5        U R                  UR                  S5        UR	                  SSSSS S!S.S9nU R                  US5        g )"Nr   r>   rQ   r?   rG   r   rR   TrS   rA   latestBuildVersionrE   z.+regexrG   rJ   rI   rH   latestBuildVersionMajor23gtlatestBuildVersionMinor31latestBuildVersionPatchrr   rK   )variantrM   rN   rT   )r   r   r   r   rU   Fr   z24.32.12432rs   )r   r   rP   rY   rZ   rz   r{   r   s        r   /test_feature_flags_local_evaluation_None_valuesCTestLocalEvaluation.test_feature_flags_local_evaluation_None_valuesI  sX    )<MN A~$'+ ,@,4-107	!" ,E,4-104	!" ,E,4-104	!" ,E,4-004	!"'+4 369!') 
V $44&*+/+/+/	 5 	
 	+U3//3--q1#44&/+/+/+.	 5 	
 	+T2r   c                    [        [        [        S9nSSSSSSSS	/S
S.SSS SS./SS./0S./Ul        SSSSS.SSS/S
S./S.SSSS/S
S./S.S.Ul        UR	                  SSSS0S9nU R                  US5        U R                  UR                  S 5        U R                  UR                  S 5        UR	                  SSS	SS!.S9nU R                  US5        U R                  UR                  S 5        U R                  UR                  S 5        UR	                  SSS	SS".S9nU R                  US5        U R                  UR                  S 5        U R                  UR                  S 5        g )#Nr   r   r?   r   TrA   rB   rC   rD   rE   rF   rP   r   r   r   rK   rL   rO   ORr>   rG   rI   rJ   nationUKrJ   valuesANDotherthing98rs   rT   rU   Fr   rB   r   rB   r  )r   r   rY   cohortsrZ   rz   r{   r   s        r   /test_feature_flags_local_evaluation_for_cohortsCTestLocalEvaluation.test_feature_flags_local_evaluation_for_cohorts  s    )<MN &% ,407.3W,4	!" ,0-/04,4	!"+ 36 
>  1h?'$+"& (	   '$+") (	

4 $44.8TBR 5 
 	+U3//3--q1#44).$? 5 
 	+T2//3--q1#44).A 5 

 	+T2//3--q1r   c                    [        [        [        S9nSSSSSSSS	/S
S.SSS SS./SS./0S./Ul        SSSSS.SSS/S
S./S.SSSS/S
SS./S.S.Ul        UR	                  SSSS0S9nU R                  US 5        U R                  UR                  S!5        U R                  UR                  S!5        UR	                  SSS	SS".S9nU R                  US5        U R                  UR                  S!5        U R                  UR                  S!5        UR	                  SSS	SS#.S9nU R                  UR                  S5        U R                  UR                  S!5        UR                  5         UR	                  SSS	S$S#.S9nU R                  US5        U R                  UR                  S!5        U R                  UR                  S!5        g )%Nr   r   r?   r   TrA   rB   rC   rD   rE   rF   rP   r   r   r   rK   rL   rO   r   r>   r   r   r   r   r  r  r  )rG   rH   rI   rJ   negationr  rT   rU   Fr   r  r  thing2)r   r   rY   r  rZ   rz   r{   r   r   s        r   7test_feature_flags_local_evaluation_for_negated_cohortsKTestLocalEvaluation.test_feature_flags_local_evaluation_for_negated_cohorts  sW   
 )<MN &% ,407.3W,4	!" ,0-/04,4	!"+ 36 
>  1h?'$+"& (	   '$+") ($(
6 $44.8TBR 5 
 	+U3//3--q1#44).$? 5 
 	+T2//3--q1#44).A 5 
 	//3--q1 #44).B 5 

 	+T2//3--q1r   zposthog.client.Pollerc                    SSSSS.SSSS	S./S
S0S.Ul         [        [        SS9n[        S5         UR	                  5         S S S 5        U R                  [        UR                  5      S5        U R                  UR                  S   S   S5        U R                  UR                  S
S05        U R                  UR                  R                  5       S5        U R                  UR                  S5        g ! , (       d  f       N= f)Nr>   r?   r   T)rP   rQ   rG   rR   r   zAlpha Featurezalpha-featureFrr   rp   )flagsry   r   r   z2020-01-01T12:01:00.0000Zr   rG   z2020-01-01T12:01:00+00:00)r|   r   r   r   load_feature_flagsrz   lenrY   ry   _last_feature_flag_poll	isoformatr{   )r-   r]   
patch_pollr7   s       r   test_load_feature_flags+TestLocalEvaluation.test_load_feature_flagsN  s    *)"	 +*#	 $'	"2"
	" )FC45%%' 6V112A6--a07H22S)4DE**4468S	
 	..2 65s   C77
Dc                 (   [        [        [        S9nU R                  SSS9 nUR                  5         U R	                  UR
                  S   S5        S S S 5        SUl        U R                  [        UR                  5        g ! , (       d  f       N6= f)Nr   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  rz   outputdebugassertRaisesr
   )r-   r7   logss      r   !test_load_feature_flags_wrong_key5TestLocalEvaluation.test_load_feature_flags_wrong_keym  sz    )<MN__Yg_6$%%'A @ 7 (F$=$=> 76s   0B
Bc           	          [        [        5      nSSSSSS/ SS./0S./Ul        U R                  UR	                  SS	5      5        U R                  UR                  S
5        g )Nr>   r?   r   TrK   rA   rL   r   r   r   r   r   rY   r[   r   rz   r{   r   s       r   test_feature_enabled_simple/TestLocalEvaluation.test_feature_enabled_simpley  sx     )* &%&)*,25 
" 	..~}MN//3r   c           	          [        [        5      nSSSSSS/ SS./0S./Ul        U R                  UR	                  SS	5      5        U R                  UR                  S5        g )
Nr>   r?   r   Tr   rA   rL   r   r   )r   r   rY   r\   r   rz   r{   r   s       r   $test_feature_enabled_simple_is_false8TestLocalEvaluation.test_feature_enabled_simple_is_false  sz     )* &%&'*,23 
" 	//NO//3r   c           	          [        [        5      nSSSSS S/ S S./0S./Ul        U R                  UR	                  SS5      5        U R                  UR                  S	5        g )
Nr>   r?   r   TrA   rL   r   r   r   r%  r   s       r   =test_feature_enabled_simple_is_true_when_rollout_is_undefinedQTestLocalEvaluation.test_feature_enabled_simple_is_true_when_rollout_is_undefined  sx    
 )* &%&**,26 
" 	..~}MN//3r   c           	          [        [        U R                  S9nSSSSSS/ SS./0S	./Ul        U R	                  UR                  SS
5      5        g )N)project_api_keyr5   r>   r?   r   TrK   rA   rL   r   r   )r   r   r0   rY   r[   r   r-   r]   r7   s      r   0test_feature_enabled_simple_with_project_api_keyDTestLocalEvaluation.test_feature_enabled_simple_with_project_api_key  sf    (9DMMR &%&)*,25 
" 	..~}MNr   c           	          SSS00Ul         [        [        SS9nSSSSS	S
/ S	S./0S./Ul        U R	                  UR                  SS5      5        U R                  UR                  S5        g )Nrw   r   r   r   r   r>   r?   TrK   rA   rL   r   r   r   )r|   r   r   rY   r[   r   rz   r{   r   s      r   *test_feature_enabled_request_multi_variate>TestLocalEvaluation.test_feature_enabled_request_multi_variate  s    $2^[4Q#R )FC &%&)*,25 
" 	..~}MN//3r   c                     [        [        5      nSSSSSS/ 0/0S./Ul        U R                  UR	                  SS5      5        g )	Nr>   r?   r   TrA   rM   rO   r   )r   r   rY   r[   r   r0  s      r   6test_feature_enabled_simple_without_rollout_percentageJTestLocalEvaluation.test_feature_enabled_simple_without_rollout_percentage  s\    )* &%(" 
 	..~}MNr   c                     SSS00Ul         [        [        SS9nSSSSS	/ S	S
./SSSS.SSS./0S.S./Ul        U R	                  UR                  SS5      S5        U R	                  UR                  S5        g )Nrw   r   r   r   r   r>   r?   TrK   rL   variants2   )rG   rN   r   rA   multivariater   r   r   r   r   s      r   test_get_feature_flag)TestLocalEvaluation.test_get_feature_flag  s    $2^[4Q#R )FC &%&) +-25 #$/rJ$/rJ%% 
. 	##NMBK	
 	//3r   c                     [        [        5      n/ Ul        S0 0Ul        U R	                  UR                  SS5      5        [        SS5      Ul        U R                  UR                  SS5      5        g )Nrw   doesnt-existr   i  zdecide error)	r   r   rY   r|   r\   r   r
   r   r   r-   r}   r  r7   s       r   !test_feature_enabled_doesnt_exist5TestLocalEvaluation.test_feature_enabled_doesnt_exist'  si     )*!$2B#7 //NO"*3"?&00OPr   c                     [        [        SS9n/ Ul        SSS00Ul        U R	                  UR                  SS5      5        g )Nr   r   rw   zfeature-flagTr   )r   r   rY   r|   r[   r   rB  s       r   "test_personal_api_key_doesnt_exist6TestLocalEvaluation.test_personal_api_key_doesnt_exist3  sD     )FC!$2^T4J#K ..~}MNr   c                     S nX1R                   R                  l        [        [        SS9n/ Ul        U R                  UR                  SS5      5        g )Nc                      [        S5      e)Nzhttp exception)	Exception r   r   raise_effectGTestLocalEvaluation.test_load_feature_flags_error.<locals>.raise_effect@  s    ,--r   r   r   rA  r   )r|   
raiseErrorr   r   r   rY   r\   r   )r-   r]   r  rL  r7   s        r   test_load_feature_flags_error1TestLocalEvaluation.test_load_feature_flags_error=  sL    	. 9E))5)FC!//NOr   c                 \   SSS00Ul         [        [        SS9nSSSSS	S
SSSS./S	SS.SSS./SSSSS.SSSS.SSSS./0S.S./Ul        U R	                  UR                  SSS
S0S9S5        U R	                  UR                  SS5      S5        U R	                  UR                  S 5        g )!Nrw   r   r   r   r   r>   r?   TrK   r   rE   test@posthog.comrC   r   second-variantrM   rN   r   r;  first-variantrN   r   r:  First VariantrG   rQ   rN   Second Variant   third-variantThird Variantr<  r   test_idrU   
example_idr   r   r   s      r   ,test_get_feature_flag_with_variant_overrides@TestLocalEvaluation.test_get_feature_flag_with_variant_overridesI  s)   $2^[4Q#R )FC &%&) ,3,4-?07	!"+ 36'7 02oN  #'6(768 (8(868 (7(768%%!#*, 
Z 	###*,>"? $ 
 	
 	##NLA?	
 	//3r   c                 t   SSS00Ul         [        [        SS9nSSSSS	S
SSSS./S	SS.S
SSSS./S	SS.SSS./SSSSS.SSSS.SSSS./0S.S./Ul        U R	                  UR                  SSS
S0S9S5        U R	                  UR                  SSS
S0S9S5        U R	                  UR                  S 5        g )!Nrw   r   r   r   r   r>   r?   TrK   r   rE   rR  rC   r   rS  rT  rU  r;  rV  r:  rW  rX  rY  rZ  r[  r\  r<  r   r]  rU   r^  r   r   r   s      r   )test_flag_with_clashing_variant_overrides=TestLocalEvaluation.test_flag_with_clashing_variant_overrides  sc   $2^[4Q#R )FC &%&) ,3,4-?07	!"+ 36'7  ,3,4-?07	!"+ 36'6 02oN5: #'6(768 (8(868 (7(768%%;079 
t 	###*,>"? $ 
 	
 	###*,>"? $ 
 	
 	//3r   c                 \   SSS00Ul         [        [        SS9nSSSSS	S
SSSS./S	SS.SSS./SSSSS.SSSS.SSSS./0S.S./Ul        U R	                  UR                  SSS
S0S 9S5        U R	                  UR                  SS!5      S5        U R	                  UR                  S"5        g )#Nrw   r   r   r   r   r>   r?   TrK   r   rE   rR  rC   r   	second???rT  r;  first??rV  r:  rU  rW  rX  rS  rY  rZ  r[  r\  r<  r   r]  rU   r^  r   r   r   s      r   (test_flag_with_invalid_variant_overrides<TestLocalEvaluation.test_flag_with_invalid_variant_overrides  s*   $2^[4Q#R )FC &%&) ,3,4-?07	!"+ 36'2 02iH  #'6(768 (8(868 (7(768%%!#*, 
Z 	###*,>"? $ 
 	
 	##NLACS	
 	//3r   c                    SSS00Ul         [        [        SS9nSSSSS	S
S	0SSSSS./S	SS.SSS./SSSSS.SSSS.SSSS./0S.S./Ul        U R	                  UR                  SSSS0S9S5        U R	                  UR                  SS 5      S5        U R	                  UR                  SS!5      S5        U R	                  UR                  S"5        g )#Nrw   r   r   r   r   r>   r?   TrK   rN   r   rE   rR  rC   r   rS  rT  r;  r[  rV  r:  rU  rW  rX  rY  rZ  r\  r<  r   r]  rU   r^  
another_idr   r   r   s      r   )test_flag_with_multiple_variant_overrides=TestLocalEvaluation.test_flag_with_multiple_variant_overrides  sX   $2^[4Q#R )FC &%&) 1# ,3,4-?07	!"+ 36'7 02oN#( #'6(768 (8(868 (7(768%%)'.0 
b 	###*,>"? $ 
 	
 	##NLA?	
 	##NLACS	
 	//3r   c           	      F   SSSSSSS/SS	./S
S./SS0S.S.nU/U R                   l        U R                  U R                   R                  SSSS0S9S5        U R                  U R                   R                  SSSSS0S9S5        U R                  UR                  S5        g )Nr>   r?   r@   TrB   rC   rD   rE   rF   rK   rL   r   r   r   rO   rT   rU   match_valuerV   r   r7   rY   rz   get_feature_flag_payloadr{   )r-   r}   r   s      r   (test_boolean_feature_flag_payloads_local<TestLocalEvaluation.test_boolean_feature_flag_payloads_local^  s     "  (0,3*/(0	' /2
 $SM

, &0L!KK001hPUEV 1  		
 	KK00" #+U"3	 1  	
 	//3r   c           	      f   SS0SS0S.Ul         U R                  U R                  R                  SSSS0S9S5        U R                  U R                  R                  SSSSS0S	9S5        U R                  UR                  S
5        U R                  UR                  S5        UR                  5         g )Nr@   Tr   r   rT   rB   rD   rU   rn  r   r>   )r|   rz   r7   rq  r{   r   )r-   r}   r   s      r   (test_boolean_feature_flag_payload_decide<TestLocalEvaluation.test_boolean_feature_flag_payload_decide  s     +D1$13#7$
  	KK001hPUEV 1  		
 	KK00" #+U"3	 1  	
 	//31115  "r   c                    SSSSSSSSS	S
./SSS.SSS./SSSSS.SSSS.SSSS./0SSS.S.S.nU/U R                   l        U R                  U R                   R                  SSSS0S9S S!05        U R                  U R                   R                  SSSSS0S"9S S!05        U R                  U R                   R                  SSSSS0S"9S#5        U R                  UR                  S$5        g )%Nr>   r?   r   TrK   r   rE   rR  rC   r   re  rT  r;  rf  rV  r:  rU  rW  rX  rS  rY  rZ  r[  r\  z"some-payload"z{"a": "json"})rU  r[  )rA   r=  r   r   r]  rU   ajsonrn  r   r   rp  )r-   r}   multivariate_flags      r   'test_multivariate_feature_flag_payloads;TestLocalEvaluation.test_multivariate_feature_flag_payloads  s    "!"% (/(0);,3	' /2#. ,.)D  #2$324 $4$424 $3$324!!( &6%4G'.
^ &7$7!KK00#*,>"? 1 
 &M	
 	KK00+#*,>"?	 1  &M	
 	KK00+#*,>"?	 1  	
 	//3r   r7   r+   N)6__name__
__module____qualname____firstlineno__classmethodr   r#   r0   r9   r   r   r`   rh   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,  r1  r4  r7  r>  rC  rF  rO  r_  rb  rg  rk  rr  ru  r{  __static_attributes__rK  r   r   r   r      s   " "
 ! !
H 
ZZ$%"1 &"1H?
B 
ZZ&'	ZZ$%\4 & (\4| 
ZZ&'	ZZ$%~4 & (~4@ 
ZZ&'	ZZ$%>4 & (>4@ 
ZZ&'	ZZ$%P4 & (P4d 
ZZ&'	ZZ$%4 & (4B 
ZZ&'	ZZ$%4 & (4 
ZZ&'4 (4< 
ZZvy)	ZZ&'@6 ( *@6D 
ZZvy)	ZZ&'E6 ( *E6N 
ZZvy)	ZZ&'6 ( *6  
ZZvy)	ZZ&'6 ( *6" 
ZZvy)	ZZ&'*6 ( **6X 
ZZvy)	ZZ&'16 ( *16f 
ZZvy)	ZZ&':6 ( *:6x 
ZZvy)	ZZ&'I6 ( *I6V 
ZZvy)	ZZ&'O6 ( *O6b 
ZZ&'	ZZ$%G3 & (G3R 
ZZ&'	ZZ$%R2 & (R2h 
ZZ&'	ZZ$%`2 & (`2D 
ZZ'(	ZZ$%3 & )3:
? 
ZZ&'	ZZ$%4 & (4, 
ZZ&'	ZZ$%4 & (4, 
ZZ&'	ZZ$%4 & (40 
ZZ$%O &O* 
ZZ&'4 (40 
ZZ$%O &O& 
ZZ&'4 (4@ 
ZZ'(	ZZ&'Q ( )Q 
ZZ'(	ZZ&'O ( )O 
ZZ'(	ZZ$%P & )P 
ZZ&'<4 (<4| 
ZZ&'N4 (N4` 
ZZ&'<4 (<4| 
ZZ&'C4 (C4J 
ZZ&')4 ()4V 
ZZvy)	ZZ&'# ( *#2 
ZZ&'N4 (N4r   r   c                   p    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 r\" S5      S 5       rS rS rSrg)TestMatchPropertiesi  Nc                 :    XS.nUb  UR                  SU05        U$ )Nr   rH   )update)r-   rG   rI   rH   results        r   propertyTestMatchProperties.property  s&    -MM:x01r   c                    U R                  SSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS 05      5        U R	                  [
        5         [        USS05        [        U0 5        S S S 5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  S/ S	QSS9nU R                  [        USS
05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R	                  [
        5         [        USS05        S S S 5        g ! , (       d  f       GN= f! , (       d  f       g = f)NrG   rI   r   value2 key2rC   rG   rI   rH   value1r  value3r  r  value4r  r[   r   r\   r   r   )r-   
property_a
property_b
property_cs       r   test_match_properties_exact/TestMatchProperties.test_match_properties_exact  s   ]]uG]<
zE73CDE
UH4EFG
UBK@A
UDMBC56:'89:r* 7 ]]uGg]N
zE73CDE
UH4EFG]];g # 

 	zE83DEFzE83DEFzE83DEF
UH4EFG56:'89 76% 76$ 76s   F<$G<
G
Gc                 `   U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS 05      5        U R                  S/ SQSS9nU R                  [        USS05      5        U R                  [        USS	05      5        U R                  [        USS
05      5        U R                  [        USS05      5        U R                  [        USS 05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R	                  [
        5         [        USS05        [        USS05        S S S 5        g ! , (       d  f       g = f)NrG   rI   is_notr  r  r  r  r  value5value6r  r  r  r  )r-   r  r  s      r   test_match_properties_not_in0TestMatchProperties.test_match_properties_not_in  sv   ]]uGh]O
zE83DEFzE2;?@zE4=AB]];h # 

 	zE83DEFzE83DEFzE83DEFzE2;?@zE4=AB
UH4EFG
UH4EFG
UH4EFG56:'89:'9: 766s   9F
F-c                    U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS 05      5        U R	                  [
        5         [        USS05        [        U0 5        S S S 5        g ! , (       d  f       g = f)NrG   is_setr  rI   r  r  r  r  )r-   r  s     r   test_match_properties_is_set0TestMatchProperties.test_match_properties_is_set4  s    ]]uHx]P
zE73CDEzE83DEFzE2;?@
UDMBC56:'89:r* 766s   B??
Cc                    U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS	05      5        U R                  [        USS
05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        g )NrG   valUe	icontainsr  rI   r  r  vaLue4343tfvalue5Alakazam{   3C  val3threer  r[   r   r\   )r-   r  r  s      r   test_match_properties_icontains3TestMatchProperties.test_match_properties_icontains?  s4   ]]uGk]R
zE73CDEzE83DEFzE83DEFzE83DEFzE=3IJK
UJ4GHI
UCLAB]]uC+]N
zE3<@AzE3<@AzE6?CD
UG4DEFr   c                 f   U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS	05      5        U R                  [        USS
05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        g )NrG   z\.com$r   r  z	value.comz
value2.com	value2comz.com343tfvalue5r  r  valuecomz	value\comr  r  r  r  z?*rI   r     4r  r-   r  r  r  
property_ds        r   test_match_properties_regex/TestMatchProperties.test_match_properties_regexQ  s   ]]uI]P
zE;3GHIzE<3HIJ
UK4HIJ
U<M4NOP
UJ4GHI
UCLAB
UJ4GHI
UL4IJK]]uC']J
zE3<@AzE3<@AzE6?CD
UG4DEF ]]uD7]K

UG4DEF
UH4EFG ]]uA]H
zE3<@AzE1:>?
UG4DEFr   c                 (   U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS	05      5        U R                  SSS
S9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSS
S9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        g )NrG   r>   r   r  r   r   r   r   ltrs   r  gte43lte414244,   *   3029100rK   123aloha123z      r  )r-   r  r  r  r  
property_e
property_fs          r   $test_match_properties_math_operators8TestMatchProperties.test_match_properties_math_operatorsp  s   ]]uA]E
zE1:>?zE1:>?
UAJ?@
UBK@AzE4=AB]]uA]E
zE1:>?zE2;?@zE2;?@
UAJ?@
UCLAB
UCLAB]]uA]F
zE1:>?zE1:>?
UAJ?@
UBK@AzE3<@A]]uD5]I
zE4=ABzE4=ABzE4=AB
UDMBC
UBK@AzE2;?@]]uD4]H
zE4=AB 	zE5>BC
UCLAB]]uJ]N

UENCD
UCLAB 	zE3<@Ar   c                    U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        US[        R                  " SSS	5      05      5        U R                  [        US[        R                  " SSS	S
SS5      05      5        U R                  [        US[        R                  " SSS	S
SS[
        R                  " S5      S905      5        U R                  [        US[        R                  " S5      05      5        U R                  [        USS05      5        U R                  [        5         [        USS
05        S S S 5        U R                  [        5         [        USS05        S S S 5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        US[        R                  " SSS	5      05      5        U R                  [        US[        R                  " S5      05      5        U R                  [        USS05      5        U R                  [        5         [        USS05        S S S 5        U R                  SSSS9nU R                  [        5         [        USS
05        S S S 5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        g ! , (       d  f       GNM= f! , (       d  f       GN3= f! , (       d  f       GNM= f! , (       d  f       GN"= f)NrG   
2022-05-01is_date_beforer  
2022-03-01
2022-04-30  r  r   r>   r   r   Europe/Madridtzinfo
2022-05-30abcdefis_date_after
2022-05-02     z2022-04-05 12:34:12 +01:00
2022-03-30z2022-04-05 12:34:11 +01:00z2022-04-05 12:34:13 +01:00z2022-04-05 11:34:11 +00:00z2022-04-05 11:34:13 +00:00)r  r[   r   datetimedater   gettzr   parser\   r   r   r  s        r   "test_match_property_date_operators6TestMatchProperties.test_match_property_date_operators  s   ]]\4D # 

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

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

 	
UL4IJKzE<3HIJ:/K'LM	
 	:/K'LM	
 	:/K'LM	
 	:/K'LM	
 	:/K'LM	
c 76 76 76 76s0   !N6OOO,6
O
O
O),
O;r  c                 h   U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        US[        R                  " SSS	S
SS5      05      5        U R	                  [        US[        R
                  " SSS	5      05      5        U R	                  [        US[        R                  " SSS	SSS5      05      5        U R                  [        US[        R                  " SSS	S
SS[        R                  " S5      S905      5        U R                  [        US[        R                  " S5      05      5        U R	                  [        USS05      5        U R                  [        5         [        USS
05        S S S 5        U R                  [        5         [        USS05        S S S 5        U R                  SSSS9nU R                  [        USS05      5        U R                  [        USS05      5        U R                  [        US[        R                  " SSS	5      05      5        U R                  [        US[        R                  " S5      05      5        U R	                  [        USS05      5        U R                  [        5         U R	                  [        USS05      5        S S S 5        U R                  SSSS9nU R                  [        5         U R	                  [        USS
05      5        S S S 5        U R                  [        USS05      5        U R                  SSSS9nU R	                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R                  [        USS05      5        U R	                  [        USS05      5        U R                  SSSS9nU R	                  [        USS05      5        U R                  [        USS05      5        U R                  SSSS9nU R                  [        USS05      5        U R	                  [        USS 05      5        U R                  SS!SS9nU R                  [        USS"05      5        U R	                  [        USS#05      5        U R	                  [        USS$05      5        U R                  SS%SS9nU R                  [        USS&05      5        U R	                  [        USS'05      5        U R                  SS(SS9n	U R                  [        U	SS)05      5        U R	                  [        U	SS*05      5        U R                  SS+SS9n
U R                  [        U
SS05      5        U R	                  [        U
SS,05      5        U R                  SS-SS9nU R                  [        USS05      5        U R                  [        USS.05      5        U R	                  [        USS/05      5        U R                  SS0SS9nU R                  [        USS05      5        U R	                  [        USS105      5        U R                  SS%SS9nU R                  [        USS205      5        U R	                  [        USS305      5        U R                  SS(SS9nU R                  [        USS05      5        U R                  [        USS*05      5        U R	                  [        USS405      5        U R	                  [        USS505      5        U R	                  [        USS605      5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f)7NrG   z-6hr  r  r  r  r  r  r   r>   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)r  r[   r   r  r\   r  r   r  r   r  r   r   )r-   r  r  r  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_operators?TestMatchProperties.test_match_property_relative_date_operators  s   ]]uEDT]U
zE<3HIJzE<3HIJ:x/@/@q"aQRTU/V'WX	
 	:x}}T1b/I'JK	
 	UH$5$5dAr2q!$LM	

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

 ]]uDCS]T

U<Q4RSTzE;P3QRS]]uEDT]U
zE;P3QRS
U<Q4RST]]uDCS]T
zE;P3QRS
U<Q4RST
U<Q4RST]]uDCS]T
zE;P3QRS
U<Q4RST]]uDCS]T
zE;P3QRS
U<Q4RST]]uF_]U
zE;P3QRS
U<Q4RST]]uD?]S
zE;P3QRSzE;P3QRS
U<Q4RST]]uF_]U
zE;P3QRS
U<Q4RST]]uD?]S
zE;P3QRS
U<Q4RST]]uD?]S
zE;P3QRSzE;P3QRS
U<Q4RST
U<Q4RST
U<Q4RSTs 76 76 76 76s0   ],]>;^^",
];>
^
^"
^1c                 &   U R                  SSSS9nU R                  [        USS 05      5        U R                  [        USS05      5        U R                  SS SS9nU R                  [        USS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  [        USS	05      5        U R                  SS
SS9nU R                  [        USS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  SSSS9n	U R                  [        U	SS 05      5        U R                  SSSS9n
U R                  [        U
SS 05      5        U R                  SSSS9nU R                  [        USS 05      5        U R                  SSSS9nU R	                  [
        5         U R                  [        USS05      5        S S S 5        g ! , (       d  f       g = f)NrG   noner  r  nonr  nor  smhNor   r>   r   r  xyzr  Oor  r  r  r  random)r  r\   r   r[   r   r   )r-   r  r  r  r  property_d_lower_caser  r  r  r  r  r  r  s                r   +test_none_property_value_with_all_operators?TestMatchProperties.test_none_property_value_with_all_operatorsk	  s   ]]uFX]N

UDMBCzE5>BC]]uD8]L

UDMBC]]uD;]O

UDMBC
UENCD]]uD7]K

UDMBC $%tg V(=t}MN]]uA]E

UDMBC]]uA]E

UDMBC]]uEE]J

UDMBC]]uD5]I

UDMBC]]\4D # 

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

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

 56^J8IJK 766s   J
Jc                     U R                  SSSS9nU R                  [        5       n[        USS05        S S S 5        U R	                  [        WR                  5      S5        g ! , (       d  f       N4= f)NrG   r  
is_unknownr  r  zUnknown operator is_unknown)r  r   r   r   rz   str	exception)r-   r  exception_contexts      r   test_unknown_operator)TestMatchProperties.test_unknown_operator	  se    ]]uL<]X
56:K:x'89 7!++,.K	
 76s   A$$
A2rK  r    )r~  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  rK  r   r   r  r    sZ    :<;.	+G$G>1BfK
Z xU xUt,L\
r   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestRelativeDateParsingi	  c                    [        S5         [        S5      b   e[        S5      b   e[        S5      b   e[        S5      b   e[        S5      b   e[        S5      b   e[        S5      b   e[        S	5      b   e[        S
5      b   e[        S5      c   e[        S5      c   e S S S 5        g ! , (       d  f       g = f)N2020-01-01T12:01:20.1340Zrs   1xz1.2y1z1sz123344000.134mbazinga000bello000hello000h1000h)r   r	   r8   s    r   test_invalid_input*TestRelativeDateParsing.test_invalid_input	  s    45@EMMM@FNNN@HPPP@FNNN@FNNN=>NOWW@KSSS@LTTT@LTTT@HTTT@IUUU 655s   BB11
B?c                 <    [        S5      b   e[        S5      b   eg )N1000000h100000000000000000y)r	   r8   s    r   test_overflow%TestRelativeDateParsing.test_overflow	  s'    <ZHPPP9:OPX	
Xr   c                 $   [        S5         [        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S
5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        S5      :X  d   e[        S5      [        S5      :X  d   e S S S 5        g ! , (       d  f       g = f)Nr  r    r>         p UTCr  2h
   24h        30h   48hr   1dr  r   r	   r  r   r  r8   s    r   test_hour_parsing)TestRelativeDateParsing.test_hour_parsing	  s   45@""aB2vbhhuo  
 A""aB2vbhhuo  
 A""b"b!R  
 A""b"aBrxx  
 A""b"b!R   A>tDE E E A>tDE E E= 655s   E+F
Fc                    [        S5         [        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        S5      :X  d   e S S S 5        g ! , (       d  f       g = f)Nr  r0  r*  r+  r,  r>   r$  r%  r&  r  r  r   7drZ  14dr   30dr   r  r1  r8   s    r   test_day_parsing(TestRelativeDateParsing.test_day_parsing	  s   45@""b"b!R  
 A""b"b!R  
 A""b"b!R  
 A""b"b!R  
 A""b!RBrxx   A>tDE E E7 655   EE''
E5c                    [        S5         [        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S	5      S
9:X  d   e[        S5      [        S5      :w  d   e S S S 5        g ! , (       d  f       g = f)Nr  r  r*  r+  rZ  r>   r$  r%  r&  r  2wr   4wr  8wr#  r.  r  r1  r8   s    r   test_week_parsing)TestRelativeDateParsing.test_week_parsing	  s   45@""b"b!R  
 A""b"b!R  
 A""b!RBrxx  
 A""b!RBrxx   A""b!RBrxx  
 A>tDE E E7 655r:  c                    [        S5         [        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S
5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        S5      :X  d   e S S S 5        [        S5         [        S5      [        R                  " SSSSSS[        R                  " S5      S	9:X  d   e[        S
5      [        R                  " SSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        S5      :X  d   e S S S 5        g ! , (       d  f       GNp= f! , (       d  f       g = f)Nr  r  r*  r+  r>   r$  r%  r&  r  2mr#  4m	   8mr  r  12mz2020-04-03T00:00:00r"  r   r   r      r  r1  r8   s    r   test_month_parsing*TestRelativeDateParsing.test_month_parsing
  s   45@""b!RBrxx  
 A""b!RBrxx  
 A""aB2vbhhuo  
 A""aB2vbhhuo   A""aB2vbhhuo  
 A>tDE E E7 6> ./@""4Aq!QrxxOP P P A""4Aq!QrxxOP P P A""4Q1aPQ Q Q A""4Aq!QrxxOP P P A""4Aq!QrxxOP P P A>tDE E E# 0/? 65> 0/s   EK1EK
K
K'c                 @   [        S5         [        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S
5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e[        S5      [        R                  " SSSSSSS[        R                  " S5      S	9:X  d   e S S S 5        g ! , (       d  f       g = f)Nr  r  r*  r>   r+  r$  r%  r&  r  2yi  4yi  8yi  r1  r8   s    r   test_year_parsing)TestRelativeDateParsing.test_year_parsingR
  s$   45@""aB2vbhhuo  
 A""aB2vbhhuo  
 A""aB2vbhhuo  
 A""aB2vbhhuo  ! 655s   C9D
DrK  N)r~  r  r  r  r  r  r2  r8  r?  rH  rN  r  rK  r   r   r  r  	  s.    V"
!EFE@E@3Ejr   r  c                      \ rS rSr\R
                  R                  \S5      \R
                  " S5      S 5       5       r\R
                  R                  \S5      \R
                  " S5      S 5       5       r	\R
                  R                  \S5      \R
                  " S5      S 5       5       r
\R
                  " S5      S 5       r\R
                  R                  \S5      \R
                  " S5      S 5       5       r\R
                  R                  \S5      \R
                  " S5      S	 5       5       r\R
                  " S
S5      \R
                  R                  \S5      \R
                  " S5      S 5       5       5       rSrg)TestCaptureCallsij
  r   rj   c           	      :   SSS00Ul         [        [        [        S9nSSSSS	S
SS./SS./0S./Ul        U R	                  UR                  SSSSS.S95        U R                  UR                  S5        UR                  SSSSSSS.0 S S9  UR                  5         U R	                  UR                  SSSSS.S95        U R                  UR                  S5        UR                  5         U R	                  UR                  SSSSS.S95        U R                  UR                  S5        UR                  SSSSSSS.0 S S9  UR                  5         U R	                  UR                  SSSSS.SS95        U R                  UR                  S5        UR                  5         U R                  UR                  SSSSS.SS0S9S5        U R                  UR                  S5        U R                  UR                  S5        UR                  SSSSSSS.SS0S S9  g ) Nrw   decide-flagdecide-valuer   r>   r?   r   TrA   rB   rD   r   rK   rL   rO   rT   r   r   rU   $feature_flag_called$feature_flag$feature_flag_responselocally_evaluated$feature/complex-flagrA   disable_geoipr   some-distinct-id2zsome-distinct-id345F)rV   send_feature_flag_eventsorganizationorg1)rV   rA   )rW  rX  rY  $feature/decide-flag)
r|   r   r   rY   r[   rZ   rz   r{   assert_called_withr   r   s       r   test_capture_is_called'TestCaptureCalls.test_capture_is_calledk
  s    %3]N4S#T )<MN &%3;e+L*M25 
" 	##"-2G"D $ 	
 	1115(("!/*.%))-	  	) 	
 	  " 	##"-2G"D $ 	
 	1115  " 	###-2G"D $ 	
 	1115(("!/*.%))-	  	) 	
 	  " 	##%-2G"D).	 $ 	
 	1115  " 	###-2G"D&/	 $  	
 	//31115(("!.*8%*(6	 #F+ 	) 	
r   c                     SSSSS0SSS.S	.S
SS SSS S.SSS.S	.S.SS.Ul         [        [        5      nU R                  UR	                  SS5      S5        U R                  UR
                  S5        UR                  SSSSSSSSSSS.0 S S9  g )NrS  Tzdecide-variantdescriptionMatched condition set 1   r  )rP   versionrG   enabledr   reasonmetadata
false-flagFno_matching_conditionzNo matching condition)coderf  condition_indexr>   r   )rS  rn  $18043bf7-9cf6-44cd-b959-9662ee20d371r  	requestIdrT   rU  )rW  rX  rY  ra  $feature_flag_reason$feature_flag_id$feature_flag_version$feature_flag_request_idr[  )r|   r   r   rz   rZ   r{   rb  r   s       r   (test_capture_is_called_with_flag_details9TestCaptureCalls.test_capture_is_called_with_flag_details
  s     )#/%'@ !#%!  ($# 7'>+/  #$!8 @;$
 > )*##M3EFHX	
 	1115(("!.*:%*(8(A$&)+,R	  	) 	
r   c                    SSSS SSSS.SSS	S
.S.0SS.Ul         [        [        5      nU R                  UR	                  SS5      SS05        U R                  UR
                  S5        UR                  SSSSSSSSSSSS0S.	0 S S9  g )Nzdecide-flag-with-payloadTmatched_conditionr   rg  )rp  rq  rf  rh  r  z{"foo": "bar"})rP   ri  payloadrj  rr  rs  rT   foobarr>   rU  F)	rW  rX  rY  z!$feature/decide-flag-with-payloadru  rv  rw  rx  z$feature_flag_payloadr[  )r|   r   r   rz   rq  r{   rb  r   s       r   4test_capture_is_called_with_flag_details_and_payloadETestCaptureCalls.test_capture_is_called_with_flag_details_and_payload  s     +5## 3+,'@ !#%#3!-" @%$
 ( )*++*,> EN		
 	1115(("!;*.%*59(A$&)+,R*/
  	) 	
r   c           	         SSS00Ul         [        [        [        S9nSSSSS	S
SS./SS./0S.SSSSS	/ SS./0S./Ul        U R	                  UR                  SSS
S0S95        UR                  R                  SS9nUS   S:X  d   eUS   S   S:X  d   eUS   S   SL d   eUS   S   SL d   eUS   S   SL d   eSUS   ;  d   eSUS   ;  d   eg ) Nrw   rS  rT  r   r>   r?   r   TrA   rB   rD   r   rK   rL   rO   r   zGamma Featuresimple-flagrT   rU   F)blockeventrU  rM   rW  rX  rY  rZ  z$feature/simple-flagz$active_feature_flags)r|   r   r   rY   r[   rZ   queueget)r-   r}   r7   msgs       r   1test_capture_is_called_but_does_not_add_all_flagsBTestCaptureCalls.test_capture_is_called_but_does_not_add_all_flagsK  sn   $2]N4S#T )<MN &%3;e+L*M25 '$*,25 
> 	## 2xQVFW $ 	
 llU+7|5555< 1^CCC< !9:dBBB< !45===< !89TAAA%S->>>>&c,.????r   c           	      t   SS0SS0S.Ul         [        [        [        S9nSSSSSS	S
S./SS./0S./Ul        UR	                  SSS
SS.S9  U R                  UR                  S5        UR                  SSSSSSS.0 S S9  UR                  5         UR                  5         UR	                  SSS
SS.S9  U R                  UR                  S5        UR                  5         UR	                  SSS
SS.S9  U R                  UR                  S5        UR                  SSSSSSS.0 S S9  UR                  5         g )Nr@   Tr   r   api_keyr   r>   r?   rA   rB   rD   r   rK   rL   rO   rT   r   r   )rG   r   rV   rU  )rW  rX  rY  z$feature/person-flagr[  r   r]  )	r|   r   r   rY   rq  rz   r{   rb  r   r   s       r   2test_capture_is_called_in_get_feature_flag_payloadCTestCaptureCalls.test_capture_is_called_in_get_feature_flag_payload~  s    +D1$13#7$
   1DUV &$3;e+L*M25 
$ 	''*).@ 	( 	
 	1115(("!.*.%)(,	  	) 	
 	  "  	''*).@ 	( 	
 	1115  " 	''+).@ 	( 	
 	1115(("!.*.%)(,	  	) 	
 	  "r   c           	          SSS00Ul         [        [        [        SS9nSSSSS	S
SS./SS./0S./Ul        UR	                  SSSSS.SS9  UR                  SSSSSSS.0 SS9  g )Nrw   rS  rT  T)r   r\  r>   r?   r   rA   rB   rD   r   rK   rL   rO   rT   r   r   F)rV   r\  rU  rV  r[  )r|   r   r   rY   rZ   rb  r   s       r   (test_disable_geoip_get_flag_capture_call9TestCaptureCalls.test_disable_geoip_get_flag_capture_call  s     %3]N4S#T 0AQU

 &%3;e+L*M25 
" 	).@	 	  	
 	(("!/*.%))-	  	) 	
r   zposthog.client.MAX_DICT_SIZErK   c           
      ,   [        [        [        S9nSSSSS/ SS./0S	./Ul        [        S
5       H_  nSU 3nUR	                  SUSSS.S9  UR                  USSSSSS.0 S S9  U R                  [        UR                  5      US-  S-   5        Ma     g )Nr   r>   r?   r   TrA   rK   rL   rO     rT   rD   r   r   rU   rU  rV  r[  )	r   r   rY   rangerZ   rb  rz   r  #distinct_ids_feature_flags_reported)r-   r}   r   r7   ir   s         r   0test_capture_multiple_users_doesnt_out_of_memoryATestCaptureCalls.test_capture_multiple_users_doesnt_out_of_memory  s     )<MN &%*,25 
" tA,QC0K##-2G"D $ 
 ,,&%3.2)--1	 " -  F>>?S1) r   rK  N)r~  r  r  r  r   r   r   r   rc  ry  r  r  r  r  r  r  rK  r   r   rQ  rQ  j
  s   	ZZvy)	ZZ&'o
 ( *o
b 
ZZvy)	ZZ&'5
 ( *5
n 
ZZvy)	ZZ&'0
 ( *0
d 
ZZ&'0@ (0@d 
ZZvy)	ZZ&'S# ( *S#j 
ZZvy)	ZZ&'(
 ( *(
T 
ZZ.4	ZZvy)	ZZ&'+ ( * 5+r   rQ  c                   0   \ rS rSr\S 5       r\S 5       rS rS r\	R                  " S5      S 5       r\	R                  " S5      S 5       r\	R                  " S	5      S
 5       r\	R                  " S	5      S 5       r\	R                  " S	5      S 5       rSrg)TestConsistencyi2  c                     [         R                  R                  [        S5      U l        U R                  R                  5         g r   r   r   s    r   r   TestConsistency.setUpClass3  r   r   c                 8    U R                   R                  5         g r    r!   r   s    r   r#   TestConsistency.tearDownClass9  r%   r   c                 *    [        SX5        SU l        gr'   r)   r,   s      r   r0   TestConsistency.set_fail=  r2   r   c                 L    SU l         [        [        U R                  S9U l        g r4   r6   r8   s    r   r9   TestConsistency.setUpB  r;   r   r<   c                    SSSSS/ SS./0S./U R                   l        / S	Qn[        S
5       HQ  nSU 3nU R                   R                  SU5      nX#   (       a  U R	                  U5        M@  U R                  U5        MS     g )Nr>   r?   r  TrA   -   rL   rO   (  FTTFTFFTFTFTTFTFFFTTFTFFTFTTFFFTTTTFFFFFFTTFTTFFFTTFFFFTFTFTFTTFTFTFTTFFTFFTFTFFTFFFTTFTTFTTTTTFTTFFTTTTFFTFTTTFFFFFTFFTTTFFTFTFFTFFFFFFFFTTFFTFFTTFFTFTFTTTFFFTFFFFTTFTTFTFTTFTFTTTFTFFTTFTFTTFFTTTTFTTFFTFTFFTTFTFTFFFFFFFTFTTFFTFTFFFTFTFFFTFFTFTTFFFFTFFFFFFFFFFFFFTTFTFTTFTFTFFFTTTTFFFFFTTTFFTTFFFFFTFTTTTFTTTFFTFTFFTTTFTFFFTTFTFTFTTTTTFFTFTFTTTFTFTTFTTTTTFFFFFTFTFFTTFFFTFTTTTFFFFTTFFTTFTTTTFTTTFFTTFFTFFTFFFFFFFFFFTTFFTFFTFTFFTFFFFFFTFFFFFFFFFTTTFFFTFTFFFTFFFFFFFTFFFFFFFFTFTFTTTFFFTTTFTFTTFFFTFFFFTFTFTTFTFFFTFFTTFTFFFFFFTTFFTFFTTTFFFTFFFFTFTFFFTFTTFTFTFTFFTFFTFTFTFTFFTTTTFTFFFFFTFFTFFTTFFFFTTTFFTFFTTTTFFFTFFFTFFTTTTFFTTFTFTFFTTFTTTTFFTFFTTFTFTFFTFFFFTTTFTFFTFFTFFFFTFTFTTFFTFTTTFFFFTTFTFFFTFFFFTTTFFFTTTTFTTFTTTFTFFTFTTTTFTFTFTFFTTFFTFTFFFFTFTFFFTTTFFFTFTTFFFFFTFTFFTTFTTTTFFTFFTFTFTTFFFTFTTFFFTFTFTTFTFFTFFFTTTFFFFFTFFTTTTTFFFFFFFFTTTFFTTFTTFTFTFFFTFFTFFTTTTFFTFTTFFTFFTTFTFFTTTFFFFFTFTFFFFFTTFTTTFFFFTTTTFTTFTFTFTFFFFTTTTFFTFTTFFFFFFTFTFTTFFTTTTFFTFTTFFTTTFTFFTTFFFTFFTFFFTTTTFTFTFTFTFFTFFTFTTr  distinct_id_)r7   rY   r  r   r[   r\   r-   r]   resultsr  
distinctIDr^   s         r   test_simple_flag_consistency,TestConsistency.test_simple_flag_consistencyF  s     &$bKL
%
!i
V tA's+J!%!<!<]J!Wz 23  !34 r   c                 F   SSSS/ SS./SSS	S
S.SSSS.SSSS.SSSS.SSSS./0S.S./U R                   l        / SQn[        S5       HT  nSU 3nU R                   R                  SU5      nX#   (       a  U R	                  XRU   5        MC  U R                  U5        MV     g )Nr>   r?   zmultivariate-flagT7   rL   r:  rU  rW  r;  rX  rS  rY  r$  r[  r\  fourth-variantzFourth Variantr  fifth-variantzFifth Variantr<  rO   (  rS  rS  rU  FFrS  rU  FFFrU  r[  FrU  rS  rU  FFr  rU  Fr[  FFFrU  rU  rU  rU  rU  rU  r[  Fr[  rS  rU  Fr[  FFrU  rS  FrU  rU  rS  FrU  FFrU  rU  rU  rS  rU  FrS  rS  r[  rS  rU  FrU  rS  r  FrU  rU  rU  FrU  rS  Fr[  FFFFFFrU  r  FrS  rU  rS  Fr[  r[  FFFFr[  FFrU  rU  Fr[  r[  Fr[  rS  r[  FFrS  rU  FFrU  FFFFrU  rU  rU  FFFrU  rU  FrU  rU  FFFFFFFFFrU  rU  rU  rU  rS  rU  rU  rU  rS  FrS  rU  rS  rU  FrS  rS  FrU  FFFr[  rU  FFrU  FFFFrU  FFFFFFFrU  rU  r[  rU  rU  FFrU  FFr  rS  FrS  FrU  r[  rU  r  r[  FFr  FFFFr[  FFr[  FrU  rS  rS  rS  FrU  r[  rU  rU  FFFFFrU  rU  rU  rS  FFFrS  FFrU  FrU  FFrU  rU  rU  rU  r[  rU  r[  rU  rU  rS  r[  r[  FrS  rU  FrS  rU  FrU  FFrU  r  rU  FFFFrU  rU  rS  FrS  r[  r[  FrU  r[  FFrU  Fr[  rU  Fr[  rU  rU  FrU  rS  rS  rU  FFFrS  FFrU  rU  Fr[  FrU  Fr[  Fr[  rS  rU  FFrU  r[  rU  rS  r  FFrU  FFFr[  FrS  rU  FFFFr[  FFr[  FFrU  r[  FFrU  FFr  r  r[  rS  rU  r[  r  FrU  r  FrU  rU  rU  FFFrS  r  rS  rU  rU  rS  FFr[  FrS  r  Fr[  rU  FFr  FFrS  FFrU  r  rU  rS  FFFrU  r[  r[  FrU  rU  rU  FrU  FrU  r[  r[  FFrU  FFrS  rS  rU  rU  rU  Fr  rU  FFFrS  r[  rU  r  rU  r[  FrU  rU  Fr[  rU  rU  r[  Fr  r  rU  rU  FFFrU  rU  rU  FrU  rU  rS  rU  FrU  rS  rU  FrU  rS  FrU  rU  FrU  FrU  FrU  FFFr[  r[  rU  FFrS  r[  rU  rU  FFFrS  rU  FrU  r[  FrU  FFFrU  r[  r[  FFFFr[  r  r  rU  rS  FrU  FrS  rU  r[  Fr[  FrU  rU  r[  FFFr  rS  rU  FFrU  r  FrU  r[  rU  FFr[  FrU  FrU  rU  r[  rS  r  FrU  FFFFrS  rU  rS  FrU  FrU  rU  FrU  rU  rS  r[  rU  rU  rU  FFFr[  FrU  rU  rU  r[  rU  rU  rS  rU  r  r  rU  rS  Fr  FFFr  FFr[  FFFrU  r[  r[  rS  rU  rS  rU  FrU  FFFFFrU  rU  FrS  FFrU  FrS  rU  rU  rU  r[  rS  FFr  r[  FFrU  FFFrU  rS  r[  r[  FFrU  Fr[  rU  FFFFr  rU  FFFr[  FFrS  rU  FFrS  r[  rU  rU  FrU  rU  FFrS  r[  rS  r[  FFrU  FFrU  FrS  FFFFrU  Fr[  FrU  FFrS  r[  rS  r  rU  rU  rU  FrU  FrS  FFFFFrU  FFFFFrU  FrS  FFFFrS  FrU  Fr[  FFrU  r[  Fr[  FFrS  FrU  rS  rU  FFFFFrS  FFrU  r[  FrU  FFFFFrU  rS  FFFrU  rU  r  FFFrU  Fr[  FFrS  FFFFFr  rS  rU  rS  FrS  FrS  FrU  FrU  rU  FrS  FrU  Fr  FrU  rU  FFFrU  FrU  r[  FFrU  rU  FFr  FFr[  Fr[  rU  rU  r[  r[  FrU  FFFFFrU  FFFFrS  rU  rS  rU  Fr  rU  FFr  rU  rU  FFr  rU  FrS  r[  r[  rU  rU  FFFrU  rU  rU  Fr[  r[  r[  FFrU  rU  FrS  FFrS  Fr[  rU  rS  r  rU  rU  FrU  r  FFFr[  rU  rU  rS  r  rU  rS  rU  FFFrS  r[  FFrU  FFFFFFrU  rU  Fr[  FrU  Fr[  r[  rU  rU  FrS  FrS  rU  FFFrS  Fr[  FrU  r  rU  rU  FFrU  FFFrU  r  rU  rU  rU  r  FFFrS  FFFrU  rU  FFrU  rU  rS  rU  rU  rU  rU  rU  r[  rU  FrS  FFr[  rS  r[  FrU  r[  rS  rU  r[  FFrU  rU  FFFrU  r[  rS  rU  rU  rU  Fr[  rS  r[  FFr[  rU  FrU  r  r  )r7   rY   r  rZ   rz   r\   r  s         r   "test_multivariate_flag_consistency2TestConsistency.test_multivariate_flag_consistencyI  s     &*.0KL"'6(768 (8(868 (7(768 (8(867 (7(767+%%%'%
!Ri
V tA's+J!%!=!=#Z" z  !3QZ@  !34 r   rj   c                 &   S0 0Ul         [        [        [        S9nSSSS/ SS./0S	./Ul        U R	                  UR                  SS
5      5        U R                  UR                  SS
5      5        U R                  UR                  SS
5      5        g )Nrw   r  r>   Beta-FeatureTrA   rK   rL   rP   rG   rR   rS   user1r   BETA-FEATURE)r|   r   r   rY   r[   r   r\   r-   mock_decider7   s      r    test_feature_flag_case_sensitive0TestConsistency.test_feature_flag_case_sensitivej  s     B$
   1DUV %bLM		 
 	..~wGH//HI//HIr   c                 D   SS0SSS00S.Ul         [        [        [        S9nSSS/ SS	./S
SS00S.S./Ul        U R	                  UR                  SS5      SS05        U R                  UR                  SS5      5        U R                  UR                  SS5      5        g )Nr  TsomerI   r   r  r>   rK   rL   r   r   r  r  r   r  )r|   r   r   rY   rz   rq  r   r  s      r   (test_feature_flag_payload_case_sensitive8TestConsistency.test_feature_flag_payload_case_sensitive  s     ,T2$2VW4E#F$
 
  1DUV %.0LM 1!	
 
 	++NGDvwFW	
 	&99.'RS&99.'RSr   c                    SS0SSS00S.Ul         [        [        [        S9nSSS/ SS	./S
SS00S.S./Ul        U R	                  UR                  SS5      5        U R                  UR                  SS5      SS05        / SQnU HE  nU R                  UR                  US5      5        U R                  UR                  US5      5        MG     g )Nr  Tr  rI   r   r  r>   rK   rL   r   r   r  r  )r   r  zbEtA-FeAtUrE)
r|   r   r   rY   r[   r   rz   rq  r\   r   )r-   r  r7   
test_casescases        r   ,test_feature_flag_case_sensitive_consistency<TestConsistency.test_feature_flag_case_sensitive_consistency  s     ,T2$2VW4E#F$
 
  1DUV %.0LM 1!	
 
  	..~wGH++NGDvwFW	

 F
DV33D'BCf==dGLM r   r}  N)r~  r  r  r  r  r   r#   r0   r9   r   r   r  r  r  r  r  r  rK  r   r   r  r  2  s    " "
 ! !
H 
ZZ$%@5 &@5D  
ZZ$%^5 &^5@! 
ZZ&'J (J, 
ZZ&'T (T8 
ZZ&' N ( Nr   r  )r  unittestr   dateutilr   r   	freezegunr   posthog.clientr   posthog.feature_flagsr   r   r	   posthog.requestr
   posthog.test.test_utilsr   TestCaser   r  r  rQ  r  rK  r   r   <module>r     s        ! ! 
 % 5b4(++ b4J?h
(++ h
VEh// EPEx(( EPM"Nh'' M"Nr   