
    jKjK                     ,   d dl Z d dlZd dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d 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edk(  r e j"                          yy)    N)mock)parameterized)Client)FeatureFlagEvaluations)FAKE_TEST_API_KEYc            	      `    ddddddddd	d
dddd dddddddddd dddddddddddS )Nvariant-flagTvariant-valuevariantMatched condition set 3)codedescription      z{"key": "value"})idversionpayload)keyenabledr   reasonmetadataboolean-flagbooleanzMatched condition set 1      )r   r   disabled-flagFzDid not match any condition   )r	   r   r   request-id-1l    %)flags	requestIdevaluatedAt r"       q/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/test/test_evaluate_flags.py_flags_response_fixturer%      s     &*#,=VW#$@RS &#,=VW#$4 ' %#@ $%3	
4 $$9 r#   c                      e Zd Zd Zd Z ej                  d      d        Z ej                  d      ej                  j                  e	d      d               Z
 ej                  g d       ej                  d      ej                  j                  e	d      d                      Z ej                  d	d
ddddddddfddddddddfddddddfg       ej                  d      ej                  j                  e	d      d                      Z ej                  d      ej                  j                  e	d      d               Z ej                  d      ej                  j                  e	d      d               Z ej                  d      ej                  j                  e	d      d               Z ej                  d      ej                  j                  e	d      d               Z ej                  d      d         Z ej                  d      d!        Z ej                  d      ej                  j                  e	d      d"               Zy#)$TestEvaluateFlagsRemotec                 ,    t        t              | _        y Nr   r   clientselfs    r$   setUpzTestEvaluateFlagsRemote.setUp.       ./r#   c                 8    | j                   j                          y r)   r+   shutdownr,   s    r$   tearDownz TestEvaluateFlagsRemote.tearDown1       r#   posthog.client.flagsc                     t               |_        | j                  j                  d      }| j	                  |t
               | j                  |j                  d       y )Nuser-1r   )r%   return_valuer+   evaluate_flagsassertIsInstancer   assertEqual
call_count)r-   patch_flagsr   s      r$   .test_returns_a_FeatureFlagEvaluations_instancezFTestEvaluateFlagsRemote.test_returns_a_FeatureFlagEvaluations_instance4   sH    #:#< **84e%;<//3r#   capturec                     t               |_        | j                  j                  d       |j                  D cg c]  }|d   r|d   d   dk(  r| }}| j                  t        |      d       y c c}w )Nr7   r   $feature_flag_called)r%   r8   r+   r9   call_args_listr;   len)r-   patch_capturer=   cfeature_flag_calleds        r$   .test_does_not_fire_events_for_unaccessed_flagszFTestEvaluateFlagsRemote.test_does_not_fire_events_for_unaccessed_flags;   s}    
 $;#< ""8, #11
1t!Q#99 1 	 

 	0115
s   A0))boolean_flag_is_enabledr   T)disabled_flag_is_disabledr   F)variant_flag_is_enabledr	   Tc                 H   t               |_        | j                  j                  d      }| j	                  |j                  |      |       |j                  D cg c]"  }|d   r|d   d   dk(  r|d   d   d   |k(  r|$ }}| j	                  t        |      d       y c c}w Nr7   r   rA   r   
properties$feature_flag)r%   r8   r+   r9   r;   
is_enabledrB   rC   )	r-   _namer   expectedrD   r=   r   rE   flag_calleds	            r$   test_is_enabledz'TestEvaluateFlagsRemote.test_is_enabledI   s     $;#< **84))#.9 #11
1t!Q11!\"?3s:	 1 	 
 	[)1-
s   'B#variant_flag_returns_variant_stringr	   r
   r   r   r   r   F)$feature_flag_response$feature_flag_id$feature_flag_versionz$feature_flag_reasonz$feature_flag_request_idlocally_evaluatedboolean_flag_returns_truer   Tr   r   )rU   rV   rW   rX   disabled_flag_returns_falser   )rU   rX   c                    t               |_        | j                  j                  d      }| j	                  |j                  |      |       |j                  D ci c]$  }|d   r|d   d   dk(  r|d   d   d   |d   d   & }	}| j                  ||	       |j                         D ]  \  }
}| j	                  |	|   |
   |        y c c}w rL   )	r%   r8   r+   r9   r;   get_flagrB   assertInitems)r-   rP   r   rQ   expected_propsrD   r=   r   rE   by_keypropvalues               r$   test_get_flag_known_keysz0TestEvaluateFlagsRemote.test_get_flag_known_keysa   s    N $;#< **84,h7 #11
1t!Q#99 aD/1l1CC1 	 

 	c6")//1KD%VC[.6 2
s   )Cc                 r   t               |_        | j                  j                  d      }| j	                  |j                  d             |j                  D ci c]$  }|d   r|d   d   dk(  r|d   d   d   |d   d   & }}| j	                  |d   d          | j                  |d   d	   d
       y c c}w )Nr7   missing-flagr   rA   r   rM   rN   rU   $feature_flag_errorflag_missing)r%   r8   r+   r9   assertIsNoner\   rB   r;   )r-   rD   r=   r   rE   r`   s         r$   2test_get_flag_missing_key_emits_flag_missing_errorzJTestEvaluateFlagsRemote.test_get_flag_missing_key_emits_flag_missing_error   s    
 $;#< **84%..89 #11
1t!Q#99 aD/1l1CC1 	 

 	&01IJK/0EFW
s   )B4c                    t               }d|d<   ||_        | j                  j                  d      }|j	                  d       |j	                  d       |j
                  D ci c]$  }|d   r|d   d   dk(  r|d   d	   d
   |d   d	   & }}| j                  |d   d   d       | j                  |d   d   d       y c c}w )NTerrorsWhileComputingFlagsr7   r   re   r   rA   r   rM   rN   rf   errors_while_computing_flagsz)errors_while_computing_flags,flag_missing)r%   r8   r+   r9   rO   rB   r;   )r-   rD   r=   responser   rE   r`   s          r$   5test_errors_while_computing_flags_propagates_to_eventzMTestEvaluateFlagsRemote.test_errors_while_computing_flags_propagates_to_event   s     +,04,-#+ **84(( #11
1t!Q#99 aD/1l1CC1 	 

 	>"#89*	
 	>"#897	

s   ")B>c                 l   t               |_        | j                  j                  d      }|j	                  d       |j	                  d       |j                  d       |j                  D cg c]"  }|d   r|d   d   dk(  r|d   d   d   dk(  r|$ }}| j                  t        |      d       y c c}w )Nr7   r   r   rA   r   rM   rN   )	r%   r8   r+   r9   rO   r\   rB   r;   rC   )r-   rD   r=   r   rE   boolean_callss         r$   test_dedupes_repeated_accessz4TestEvaluateFlagsRemote.test_dedupes_repeated_access   s     $;#< **84((~& #11
1t!Q11!\"?3~E	 1 	 
 	]+Q/
s   ,'B1c                 p   t               |_        | j                  j                  d      }| j	                  |j                  d      ddi       | j                  |j                  d             |j                  D cg c]  }|d   r|d   d   dk(  r| }}| j	                  t        |      d       y c c}w )Nr7   r	   r   rb   re   r   rA   )	r%   r8   r+   r9   r;   get_flag_payloadrh   rB   rC   r-   rD   r=   r   rE   rF   s         r$   )test_get_flag_payload_does_not_fire_eventzATestEvaluateFlagsRemote.test_get_flag_payload_does_not_fire_event   s     $;#< **84//?%AQR%00@A #11
1t!Q#99 1 	 

 	0115
s   <B3c                     t               |_        | j                  j                  dddg       |j                  j
                  }| j                  |j                  d      ddg       y )Nr7   r   r	   )	flag_keysflag_keys_to_evaluate)r%   r8   r+   r9   	call_argskwargsr;   get)r-   r=   rz   s      r$   "test_forwards_flag_keys_to_requestz:TestEvaluateFlagsRemote.test_forwards_flag_keys_to_request   s]    #:#< ""87W"X&&--JJ./^,	
r#   c                     t               |_        | j                  j                  dd       | j	                  |j
                  j                  j                  d      d       y )Nr7   zexplicit-device)	device_idr~   )r%   r8   r+   r9   r;   ry   rz   r{   )r-   r=   s     r$   )test_explicit_device_id_overrides_contextzATestEvaluateFlagsRemote.test_explicit_device_id_overrides_context   sR     $;#< ""87H"I!!((,,[9;L	
r#   c                 F   | j                   j                         }| j                  |j                  g        |j	                  d       |j                  d       |j                  D cg c]  }|d   r|d   d   dk(  r| }}| j                  t        |      d       y c c}w )Nzany-flagr   rA   )r+   r9   r;   keysrO   r\   rB   rC   rt   s         r$   <test_empty_distinct_id_returns_empty_snapshot_without_eventszTTestEvaluateFlagsRemote.test_empty_distinct_id_returns_empty_snapshot_without_events   s    
 **,R($z" #11
1t!Q#99 1 	 

 	0115
s   'BN)__name__
__module____qualname__r.   r3   r   patchr>   objectr   rG   r   expandrS   rc   ri   rn   rq   ru   r|   r   r   r"   r#   r$   r'   r'   -   s   0 TZZ&'4 (4 TZZ&'	ZZvy)
6 * (
6 ]	
 TZZ&'	ZZvy). * (. ] 6.=()-/,E0>).	 ,.2()-/).		
 .+0uM	3	
!D TZZ&'	ZZvy)7 * (E!H7" TZZ&'	ZZvy)X * (X  TZZ&'	ZZvy)
 * (
6 TZZ&'	ZZvy)0 * (0" TZZ&'	ZZvy)6 * (6 TZZ&'	
 (	
 TZZ&'	
 (	
 TZZ&'	ZZvy)6 * (6r#   r'   c                       e Z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
y)	TestEvaluateFlagsFilteringc                 ,    t        t              | _        y r)   r*   r,   s    r$   r.   z TestEvaluateFlagsFiltering.setUp  r/   r#   c                 8    | j                   j                          y r)   r1   r,   s    r$   r3   z#TestEvaluateFlagsFiltering.tearDown  r4   r#   r5   c                 
   t               |_        | j                  j                  d      }|j	                  d       |j                  d       |j                         }| j                  t        |j                        ddg       y Nr7   r   r	   )
r%   r8   r+   r9   rO   r\   only_accessedr;   sortedr   r-   r=   r   accesseds       r$   .test_only_accessed_returns_only_accessed_flagszITestEvaluateFlagsFiltering.test_only_accessed_returns_only_accessed_flags  sg    #:#< **84(~&&&(.0PQr#   c                     t               |_        | j                  j                  d      }|j	                         }| j                  |j                  g        y )Nr7   )r%   r8   r+   r9   r   r;   r   r   s       r$   7test_only_accessed_returns_empty_when_no_flags_accessedzRTestEvaluateFlagsFiltering.test_only_accessed_returns_empty_when_no_flags_accessed#  sE     $;#< **84&&(+r#   c                 ^   t               |_        | j                  j                  d      }| j	                  dd      5 }|j                  ddg      }d d d        | j                  j                  dg       | j                  t        d j                  D                     y # 1 sw Y   RxY w)Nr7   posthogWARNINGlevelr   does-not-existc              3   $   K   | ]  }d |v  
 yw)r   Nr"   .0ms     r$   	<genexpr>zWTestEvaluateFlagsFiltering.test_only_drops_unknown_keys_with_warning.<locals>.<genexpr>6  s     G;a,1;   )r%   r8   r+   r9   
assertLogsonlyr;   r   
assertTrueanyoutput)r-   r=   r   logsr   s        r$   )test_only_drops_unknown_keys_with_warningzDTestEvaluateFlagsFiltering.test_only_drops_unknown_keys_with_warning-  s    #:#< **84__Yi_8D::~/?@AD 9 	^$45G4;;GGH	 98s   B##B,c                    t               |_        | j                  j                  d      }|j	                  d       |j                         }|j	                  d       | j                  |j                         j                  dg       y r   )r%   r8   r+   r9   rO   r   r;   r   )r-   r=   r   filtereds       r$   4test_filtered_snapshots_do_not_back_propagate_accesszOTestEvaluateFlagsFiltering.test_filtered_snapshots_do_not_back_propagate_access8  sm    #:#< **84(&&(N+,,.33n5EFr#   N)r   r   r   r.   r3   r   r   r   r   r   r   r"   r#   r$   r   r     s    0 TZZ&'R (R TZZ&', (, TZZ&'I (I TZZ&'G (Gr#   r   c                      e Zd Zd Zd Z ej                  d      ej                  j                  ed      d               Z	 ej                  d      ej                  j                  ed      d               Z
 ej                  d      d        Z ej                  d      d        Z ej                  d      d	        Zy
)TestCaptureWithFlagsSnapshotc                 ,    t        t              | _        y r)   r*   r,   s    r$   r.   z"TestCaptureWithFlagsSnapshot.setUpE  r/   r#   c                 8    | j                   j                          y r)   r1   r,   s    r$   r3   z%TestCaptureWithFlagsSnapshot.tearDownH  r4   r#   r5   _enqueuec                    t               |_        | j                  j                  d      }| j                  j	                  dd|       t        d |j                  D        d       }| j                  |       |d   d   d   }| j                  |d   d       | j                  |d	   d
       | j                  |d   d       | j                  t        |d         ddg       y )Nr7   page_vieweddistinct_idr   c              3   <   K   | ]  }|d    d    d   dk(  r|  ywr   eventr   Nr"   r   calls     r$   r   zcTestCaptureWithFlagsSnapshot.test_capture_with_flags_attaches_feature_properties.<locals>.<genexpr>W  -      8D71:g&-7 8   r   rM   $feature/variant-flagr
   $feature/boolean-flagT$feature/disabled-flagF$active_feature_flagsr   r	   )
r%   r8   r+   r9   r?   nextrB   assertIsNotNoner;   r   r-   patch_enqueuer=   r   r   rM   s         r$   3test_capture_with_flags_attaches_feature_propertieszPTestCaptureWithFlagsSnapshot.test_capture_with_flags_attaches_feature_propertiesK  s    
 $;#< **84MxuM )88
 
 	[) ^A&|4
$;<oN$;<dC$<=uE:567^,	
r#   c                    t               |_        | j                  j                  d      }|j	                  d       | j                  j                  dd|j                                t        d |j                  D        d       }|d   d   d   }| j                  |d   d	       | j                  d
|       | j                  d|       | j                  |d   dg       y )Nr7   r   r   r   c              3   <   K   | ]  }|d    d    d   dk(  r|  ywr   r"   r   s     r$   r   ziTestCaptureWithFlagsSnapshot.test_capture_with_only_accessed_attaches_only_those_flags.<locals>.<genexpr>v  r   r   r   rM   r   Tr   r   r   )r%   r8   r+   r9   rO   r?   r   r   rB   r;   assertNotInr   s         r$   9test_capture_with_only_accessed_attaches_only_those_flagszVTestCaptureWithFlagsSnapshot.test_capture_with_only_accessed_attaches_only_those_flagsh  s    
 $;#< **84(xu7J7J7L 	 	
 )88
 
 !^A&|4
$;<dC0*=1:>$;<~>NOr#   c                     t               |_        | j                  j                  d      }|j                  }| j                  j                  dd|       | j                  |j                  |       y )Nr7   r   r   )r%   r8   r+   r9   r<   r?   r;   )r-   r=   r   calls_befores       r$   9test_capture_with_flags_does_not_make_extra_flags_requestzVTestCaptureWithFlagsSnapshot.test_capture_with_flags_does_not_make_extra_flags_request  s[    #:#< **84"--MxuM//>r#   c                     t               |_        | j                  j                  d      }t        j
                  j                  | j                  d      5 }	 t        d      # t        $ r(}| j                  j                  |d|       Y d }~nd }~ww xY w	 d d d        n# 1 sw Y   nxY w| j                  j                  d       |j                  j                  j                  d      }| j                  ||       y )Nr7   r?   boomr   r   r   )r%   r8   r+   r9   r   r   r   
ValueErrorcapture_exceptionr;   r<   ry   rz   r{   assertIs)r-   r=   r   inner_captureexc	forwardeds         r$   .test_capture_exception_forwards_flags_snapshotzKTestCaptureWithFlagsSnapshot.test_capture_exception_forwards_flags_snapshot  s     $;#< **84ZZt{{I6-V (( V--cxu-UUVU	 766 	1115!++2266w?	i's0   B A""	B+B	B BB  B)c                    t               |_        | j                  j                  d      }|j                  }| j                  dd      5 }| j                  j                  dd|d       d d d        | j                  |j                  |       | j                  t        d j                  D                     y # 1 sw Y   QxY w)	Nr7   r   r   r   r   T)r   r   send_feature_flagsc              3   $   K   | ]  }d |v  
 yw)z1Both `flags` and `send_feature_flags` were passedNr"   r   s     r$   r   z|TestCaptureWithFlagsSnapshot.test_capture_warns_and_uses_flags_when_both_flags_and_send_feature_flags_set.<locals>.<genexpr>  s      $A DqH$r   )r%   r8   r+   r9   r<   r   r?   r;   r   r   r   )r-   r=   r   r   r   s        r$   Ltest_capture_warns_and_uses_flags_when_both_flags_and_send_feature_flags_setziTestCaptureWithFlagsSnapshot.test_capture_warns_and_uses_flags_when_both_flags_and_send_feature_flags_set  s     $;#< **84"--__Yi_8DKK$#'	    9 	//>  	
 98s   
 B::CN)r   r   r   r.   r3   r   r   r   r   r   r   r   r   r   r"   r#   r$   r   r   D  s    0 TZZ&'	ZZvz*
 + (
6 TZZ&'	ZZvz*P + (P2 TZZ&'? (? TZZ&'( ((  TZZ&'
 (
r#   r   c                   l   e Zd Zd Zd Z ej                  dddi fdddi fdddi fg       ej                  d      ej                  j                  e
d	      d
                      Z ej                  d      d        Z ej                  d      ej                  j                  e
d	      d               Zy)TestDeprecationWarningsc                 ,    t        t              | _        y r)   r*   r,   s    r$   r.   zTestDeprecationWarnings.setUp  r/   r#   c                 8    | j                   j                          y r)   r1   r,   s    r$   r3   z TestDeprecationWarnings.tearDown  r4   r#   feature_enabled)r   r7   get_feature_flagget_feature_flag_payload)r	   r7   r5   r?   c                    t               |_        t        j                  d      5 }t        j                  d        t        | j                  |      |i | d d d        D cg c]5  }t        |j                  t              r|t        |j                        v r|7 }	}| j                  t        |	      d       | j                  dt        |	d   j                               y # 1 sw Y   xY wc c}w )NTrecordalwaysr   r9   r   )r%   r8   warningscatch_warningssimplefiltergetattrr+   
issubclasscategoryDeprecationWarningstrmessager;   rC   r]   )
r-   rP   method_nameargsrz   rD   r=   caughtwdeprecations
             r$   8test_legacy_single_flag_methods_emit_deprecation_warningzPTestDeprecationWarnings.test_legacy_single_flag_methods_emit_deprecation_warning  s    " $;#< $$D1V!!(+-GDKK-t>v> 2 
!**&89s199~-  	 
 	[)1-&KN,B,B(CD 21
s   2C$$:C0$C-c                    t               |_        t        j                  d      5 }t        j                  d       | j
                  j                  ddd       d d d        D cg c]5  }t        |j                  t              rdt        |j                        v r|7 }}| j                  t        |      d       | j                  d	t        |d
   j                               y # 1 sw Y   xY wc c}w )NTr   r   r   r7   )r   r   r   r   r9   r   )r%   r8   r   r   r   r+   r?   r   r   r   r   r   r;   rC   r]   )r-   r=   r   r   r   s        r$   9test_capture_send_feature_flags_emits_deprecation_warningzQTestDeprecationWarnings.test_capture_send_feature_flags_emits_deprecation_warning  s    #:#< $$D1V!!(+KK8    2 
!**&89$AII6  	 
 	[)1-&KN,B,B(CD 21
s   4C&&:C2&C/c                 n   t               |_        t        j                  d      5 }t        j                  d       | j
                  j                  dd       d d d        D cg c]  }t        |j                  t              s|! }}| j                  t        |      d       y # 1 sw Y   OxY wc c}w )NTr   r   r   r7   r   )r%   r8   r   r   r   r+   r   r   r   r   r;   rC   )r-   rD   r=   r   r   r   s         r$   :test_feature_enabled_does_not_cascade_deprecation_warningszRTestDeprecationWarnings.test_feature_enabled_does_not_cascade_deprecation_warnings  s     $;#< $$D1V!!(+KK''A 2 #)W&QJqzzCU,Vq&W[)1- 21 Xs   2B&$B2B2&B/N)r   r   r   r.   r3   r   r   r   r   r   r   r   r   r   r"   r#   r$   r   r     s    0 ] 13MrR!35OQST***			
 TZZ&'	ZZvy)E * (E$ TZZ&'E (E$ TZZ&'	ZZvy). * (.r#   r   __main__)unittestr   r   r   posthog.clientr    posthog.feature_flag_evaluationsr   posthog.test.test_utilsr   r%   TestCaser'   r   r   r   r   mainr"   r#   r$   <module>r      s       ' ! C 5Bb6h// b6J/G!2!2 /Gdr
8#4#4 r
jI.h// I.X zHMMO r#   