
    jKj%                         d dl Z 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mZ d dlmZ d dlmZ d d	lmZ dd
edeeef   fdZ G d dej,                        Zy# e	$ r	 d dlmZ Y Kw xY w)    N)Any)mock)parameterized)Queue)MAX_MSG_SIZEConsumerAPIError)capture_message_only_logs)TEST_API_KEY
event_namereturnc                     d| ddS )Ntrackdistinct_id)typeeventr    )r   s    k/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/test/test_consumer.py_track_eventr      s    jOO    c            	       d   e Zd Zd%dZd%dZd%dZd%dZd%dZd%dZd%d	Z	d%d
Z
	 d&dedededdfdZ ej                  d ed      dfd edd      dfd edd      dfg      dedededdfd       Zd%dZd%dZd%dZd%dZd%dZd%dZd%d Z ej                  d!d"g      ded#eddfd$       Zy)'TestConsumerr   Nc                     t               }t        |d      }|j                  d       |j                         }| j	                  |dg       y )N    )r   r   putnextassertEqual)selfqconsumerr   s       r   	test_nextzTestConsumer.test_next   s<    GAr?	a}}s#r   c                     t               }d}t        |d|      }t        d      D ]  }|j                  |        |j	                         }| j                  |t        t        |                   y )N2   r   i'  )r   r   ranger   r   r   list)r    r!   flush_atr"   ir   s         r   test_next_limitzTestConsumer.test_next_limit    sY    GAr8,uAEE!H }}tE(O45r   c                 "   t               }t        |d      }ddt        z  i}|j                  |       |j	                         }| j                  |g        | j                  |j                                | j                  |j                  d       y )Nr   mxr   )	r   r   r   r   r   r   
assertTrueemptyunfinished_tasks)r    r!   r"   oversize_msgr   s        r   test_dropping_oversize_msgz'TestConsumer.test_dropping_oversize_msg)   sr    GAr?S</0	l}}r"	"++Q/r   c                     t               }t        |t              }|j                  t	                      |j                         }| j                  |       y N)r   r   r   r   r   uploadr.   )r    r!   r"   successs       r   test_uploadzTestConsumer.test_upload3   s;    GA|,	ln//# r   c                    t               }t        |t              }|j                  t	                      t
        j                  j                  |dt        d            5  t               5 }|j                         }d d d        d d d        | j                         | j                  j                         j                         d       y # 1 sw Y   QxY w# 1 sw Y   UxY w)Nrequestboomside_effectz[PostHog] error uploading: boom)r   r   r   r   r   r   patchobject	Exceptionr   r5   assertFalser   getvaluestrip)r    r!   r"   logsr6   s        r   3test_message_only_error_logs_include_posthog_prefixz@TestConsumer.test_message_only_error_logs_include_posthog_prefix:   s    GA|,	lnZZx	&@QR*,"//+ - S 	!..02ST	 -, SRs$   C*C;CC	CC c                 x   t               }d}t        |t        d|      }t        j                  d      5 }|j                          t        d      D ]7  }|j                  t        d|z               t        j                  |dz         9 | j                  |j                  d       d d d        y # 1 sw Y   y xY w)Ng333333?
   r(   flush_intervalposthog.consumer.batch_post   python event %d皙?r   r   r   r   r=   startr&   r   r   timesleepr   
call_count)r    r!   rH   r"   	mock_postr)   s         r   test_flush_intervalz TestConsumer.test_flush_intervalF   s     GA|bXZZ56)NN1Xl#4q#89:

>C/0  Y1115 766s   A2B00B9c                    t               }d}d}t        |t        ||      }t        j                  d      5 }|j                          t        |dz        D ]  }|j                  t        d|z               ! t        j                  |dz         | j                  |j                  d       d d d        y # 1 sw Y   y xY w)Ng      ?rF   rG   rI      rK   rL   rM   )r    r!   rH   r(   r"   rR   r)   s          r   "test_multiple_uploads_per_intervalz/TestConsumer.test_multiple_uploads_per_intervalT   s     G|h~
 ZZ56)NN8a<(l#4q#89: )JJ~+,Y1115 766s   A5B55B>c                 X    t        d t              }|j                  t               g       y r4   )r   r   r9   r   r    r"   s     r   test_requestzTestConsumer.test_requestd   s!    D,/,.)*r   	exceptionexception_countretriesc                    dgdt         dt         dd ffd}t        d t        |      }t        j                  dt        j
                  |            5  |k  r|j                  t               g       n=| j                  t                    5  |j                  t               g       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   argskwargsr   c                  4    dxx   dz  cc<   d   k  ry Nr   r   r   )r^   r_   rQ   rZ   r[   s     r   rR   z/TestConsumer._run_retry_test.<locals>.mock_postm   s'    qMQM!}/ 0r   r\   rI   r;   )
r   r   r   r   r=   Mockr9   r   assertRaisesr   )r    rZ   r[   r\   rR   r"   rQ   s    ``   @r   _run_retry_testzTestConsumer._run_retry_testh   s     S
	 S 	 C 	 D 	 
 D,@ZZ)499+K
 ')  ,.!12&&tI7$$ln%56 8
 
 87
 
s$   ;CC /C C		CCgeneral_errorszgeneric exceptionrU   server_errors  Internal Server Errorrate_limit_errors  Too Many Requests_namec                 (    | j                  ||       y r4   )re   )r    rm   rZ   r[   s       r   (test_request_retries_on_retriable_errorsz5TestConsumer.test_request_retries_on_retriable_errors|   s     	Y8r   c                     | j                  t              5  | j                  t        dd      d       d d d        y # 1 sw Y   y xY w)Ni  zClient Errorsr   )rd   r
   re   r    s    r   )test_request_does_not_retry_client_errorsz6TestConsumer.test_request_does_not_retry_client_errors   s3    x(  #!?C )((s	   <Ac                 @    | j                  t        dd      dd       y )Nrh   ri      rJ   rb   )re   r
   rq   s    r   1test_request_fails_when_exceptions_exceed_retriesz>TestConsumer.test_request_fails_when_exceptions_exceed_retries   s     Xc+BCQPQRr   c                 z    t        d t              }|j                          | j                  |j                         y r4   )r   r   pauser@   runningrX   s     r   
test_pausezTestConsumer.test_pause   s,    D,/))*r   c                 n    t               }t        |t        dd      }i }t        dd      D ]  }d|t	        |      <    ddd	|d
}t        t        j                  |      j                               }t        d|z        }dt        dt        dt        dt        j                  f fd}t        j                  d|      5 }	|j                          t        d|dz         D ]  }
|j                  |        |j!                           j#                  |	j$                  d       d d d        y # 1 sw Y   y xY w)Ni rJ   rG   r   rh   ,one_long_property_value_to_build_a_big_eventr   python eventr   )r   r   r   
propertiesi z _datar_   r   c                     t        j                         }d|_        t        |j	                               }j                  |dk  d|z         |S )N   g      VAz!batch size (%d) higher than limit)r   rc   status_codelenencoder.   )r~   r   r_   resrequest_sizer    s        r   mock_post_fnz6TestConsumer.test_max_batch_size.<locals>.mock_post_fn   sI    ))+C!COt{{}-LOO663lB Jr   zposthog.request._session.postr;   rU   )r   r   r   r&   strr   jsondumpsr   intr   r   rc   r=   rN   r   joinr   rQ   )r    r!   r"   r}   nr   msg_sizen_msgsr   rR   r~   s   `          r   test_max_batch_sizez TestConsumer.test_max_batch_size   s   GA|fQO
q#A!OJs1v  #($	
 tzz%(//12Y)*		C 		s 		c 		dii 		 ZZ+
NN1fqj)e *FFHY1115
 
 
s    A"D++D4c                 z   t        ddd      dgdt        dt        dd ffd	}t        d t        d
      }t	        j
                  d|      5  t	        j
                  d      5 }|j                  t               g       |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrk   rl   g      @)retry_afterr   r^   r_   r   c                  4    dxx   dz  cc<   d   dk  ry ra   r   r^   r_   rQ   errors     r   rR   zDTestConsumer.test_request_sleeps_with_retry_after.<locals>.mock_post   '    qMQM!}! "r   rJ   rb   rI   r;   posthog.consumer.time.sleep)	r
   r   r   r   r   r=   r9   r   assert_called_once_withr    rR   r"   
mock_sleeprQ   r   s       @@r   $test_request_sleeps_with_retry_afterz1TestConsumer.test_request_sleeps_with_retry_after   s    1sCS
	S 	C 	D 	
 D,:JJ4)LJJ45ln-...s3 6 ML55 MLs$   B1(,B%B1%B.	*B11B:c           
         t        dd      dgdt        dt        dd ffd}t        d t        d	      }t	        j
                  d
|      5  t	        j
                  d      5 }|j                  t               g       | j                  |j                  t	        j                  d      t	        j                  d      t	        j                  d      g       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ni  zService Unavailabler   r^   r_   r   c                  4    dxx   dz  cc<   d   dk  ry )Nr   r   rJ   r   r   s     r   rR   zYTestConsumer.test_request_uses_exponential_backoff_without_retry_after.<locals>.mock_post   r   r   rJ   rb   rI   r;   r   r   rU   rt   )r
   r   r   r   r   r=   r9   r   r   call_args_listcallr   s       @@r   9test_request_uses_exponential_backoff_without_retry_afterzFTestConsumer.test_request_uses_exponential_backoff_without_retry_after   s    34S
	S 	C 	D 	
 D,:JJ4)LJJ45ln-.))IIaLIIaLIIaL 6 ML55 MLs%   C6&A3C*C6*C3	/C66C?c                 b   dgdt         dt         dd ffd}t        d t        d      }t        j                  d|	      5  t        j                  d
      5  |j                  t               g       | j                  d   d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r^   r_   r   c                  H    dxx   dz  cc<   d   dk  rt        dd      y )Nr   r   i  zRequest Timeoutr	   )r^   r_   rQ   s     r   rR   z;TestConsumer.test_request_retries_on_408.<locals>.mock_post   s0    qMQM!}!s$566 "r   rJ   rb   rI   r;   r   rU   )r   r   r   r   r=   r9   r   r   )r    rR   r"   rQ   s      @r   test_request_retries_on_408z(TestConsumer.test_request_retries_on_408   s    S
	7S 	7C 	7D 	7
 D,:JJ4)LJJ45ln-.Z]A. 6 ML55 MLs$   B%0BB%B"	B%%B.)on_error_succeedsF)on_error_raisesTr   c                 8   g dt         dt        t        t        t        f      dd ffd}t	               }t        |t        |      }t               }|j                  |       t        j                  j                  |dt        d            5  |j                         }d d d        | j                         | j                  t              d	       | j                  t        d
   d
         d       | j                  d
   d	   |g       y # 1 sw Y   pxY w)Nebatchr   c                 F    j                  | |f       rt        d      y )Nzon_error failed)appendr?   )r   r   on_error_calledr   s     r   on_errorzVTestConsumer.test_upload_exception_calls_on_error_and_does_not_raise.<locals>.on_error   s)    ""Au:. 122 r   )r   r9   zrequest failedr;   r   r   )r?   r'   dictr   r   r   r   r   r   r   r=   r>   r5   r@   r   r   )	r    rm   r   r   r!   r"   r   resultr   s	     `     @r   7test_upload_exception_calls_on_error_and_does_not_raisezDTestConsumer.test_upload_exception_calls_on_error_and_does_not_raise   s     IK	3	 	3$tCH~*> 	34 	3
 GA|h?	eZZiY7G-H  
 __&F

 	 _-q1_Q/235EF+A.8
 
s   DD)r   N)rF   )__name__
__module____qualname__r#   r*   r2   r7   rD   rS   rV   rY   r?   r   re   r   expandr
   r   ro   rr   ru   ry   r   r   r   r   boolr   r   r   r   r   r      s;   $60!
U66 +
 JL7"7587CF7	7( ]y)<=qAhs,CDaH (30C"DaH	
99%.9AD9	99
DS+
"6H4"0/  ](%	
99+/9	99r   r   )r|   )r   rO   unittesttypingr   r   r   queuer   ImportErrorposthog.consumerr   r   posthog.requestr
   posthog.test.logging_helpersr   posthog.test.test_utilsr   r   r   r   TestCaser   r   r   r   <module>r      ss         ' 4 $ B 0PS Pd38n Pv98$$ v9  s   A$ $A21A2