
    ?i                        d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZ  G d de      Z G d	 d
e      Zy)    )annotationsN)datetime	timedeltatimezone)	MagicMockpatch)SimpleTestCase)TelegramDataValidationErrorsend_telegram_messagevalidate_telegram_init_datac                  8    e Zd ZdZd	d
dZd Zd Zd Zd Zd Z	y)ValidateTelegramInitDataTestsztest-bot-tokenNc                   |xs | j                   }dj                  d t        |j                               D              }t	        j
                  |j                               j                         }t        j                  ||j                         t        j
                        j                         }i |d|i}t        j                  j                  |      S )N
c              3  0   K   | ]  \  }}| d |   yw)=N ).0keyvalues      U/home/cursorai/projects/telegram-earn/backend/apps/users/tests/test_telegram_utils.py	<genexpr>zAValidateTelegramInitDataTests._build_init_data.<locals>.<genexpr>   s$      &
/Cese1UG/Cs   hash)	bot_tokenjoinsorteditemshashlibsha256encodedigesthmacnew	hexdigesturllibparse	urlencode)selfdatar   tokendata_check_string
secret_key	signaturepayloads           r   _build_init_dataz.ValidateTelegramInitDataTests._build_init_data   s    +T^^ II &
/5djjl/C&
 
 ^^ELLN3::<
HH$$&NN
 )+	 	
 .T-69-||%%g..    c                t    | j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)NzBot token not configuredzuser=1&hash=abc r   )assertRaisesMessager
   r   )r(   s    r   +test_validate_raises_when_bot_token_missingzIValidateTelegramInitDataTests.test_validate_raises_when_bot_token_missing$   s3    %%')C
 ((9RH
 
 
s   .7c                    t         j                  j                  dt        j                  ddi      i      }| j                  t        d      5  t        || j                         d d d        y # 1 sw Y   y xY w)Nuserid   zMissing hash in init_datar3   )	r%   r&   r'   jsondumpsr4   r
   r   r   )r(   	init_datas     r   &test_validate_raises_when_hash_missingzDValidateTelegramInitDataTests.test_validate_raises_when_hash_missing*   s\    LL**FDJJay4I+JK	%%')D
 (	T^^L
 
 
s   A..A7c                f   t        t        j                  t        j                        j                               }| j                  t        |      t        j                  ddi      dd      }| j                  t        d      5  t        || j                         d d d        y # 1 sw Y   y xY w)	Ntzr8   r9   	auth_dater7   zdifferent-token)r)   r   z#Invalid hash - data may be tamperedr3   )intr   nowr   utc	timestampr/   strr:   r;   r4   r
   r   r   )r(   rD   r<   s      r   %test_validate_raises_on_hash_mismatchzCValidateTelegramInitDataTests.test_validate_raises_on_hash_mismatch1   s    (,,(,,/99;<)) X

D!9- ( * 
	 %%')N
 (	T^^L
 
 
s   B''B0c                   t        t        j                  t        j                        t        d      z
  j                               }| j                  t        |      t        j                  ddi      d      }| j                  t        d      5  t        || j                  d	
       d d d        y # 1 sw Y   y xY w)Nr?      )hoursr8   r9   rA   r)   z&initData expired (older than 24 hours)   )r   expiration_hours)rC   r   rD   r   rE   r   rF   r/   rG   r:   r;   r4   r
   r   r   )r(   expiredr<   s      r   +test_validate_raises_when_auth_date_expiredzIValidateTelegramInitDataTests.test_validate_raises_when_auth_date_expired?   s    x||x||4yr7JJUUWX)) \

D!9- * 
	 %%')Q
 (	T^^^`a
 
 
s   B44B=c                   dddd}t        t        j                  t        j                        j                               }| j                  t        |      t        j                  |      d      }t        || j                        }| j                  |d	   |d	          | j                  |d
   |d
          | j                  |d   |d          y )N{   Alicealice)r8   
first_nameusernamer?   rA   rL   r3   r8   rU   rV   )rC   r   rD   r   rE   rF   r/   rG   r:   r;   r   r   assertEqual)r(   user_payloadrD   r<   results        r   -test_validate_returns_user_payload_when_validzKValidateTelegramInitDataTests.test_validate_returns_user_payload_when_validL   s    !gN(,,(,,/99;<)) X

<0 * 
	 -Y$..Q|D'9:-|L/IJ
+\*-EFr0   )N)r)   zdict[str, str]r   z
str | NonereturnrG   )
__name__
__module____qualname__r   r/   r5   r=   rH   rP   rZ   r   r0   r   r   r      s*     I/IMMbGr0   r   c                  |    e Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zy)SendTelegramMessageTestsz%utils.telegram.urllib.request.urlopenc                b    t        ddd      }| j                  |       |j                          y )Nr2   r9   hellochat_idtext)r   assertFalseassert_not_calledr(   mock_urlopensents      r   2test_send_message_returns_false_when_token_missingzKSendTelegramMessageTests.test_send_message_returns_false_when_token_missing^   s*    $RA&&(r0   c                    t               }||j                  _        d|_        ||_        t	        ddd      }| j                  |       |j                          y )Ni  r*   r9   rb   rc   )r   	__enter__return_valuestatusr   rf   assert_called_oncer(   ri   mock_responserj   s       r   3test_send_message_returns_false_on_non_200_responsezLSendTelegramMessageTests.test_send_message_returns_false_on_non_200_responsed   sO    !/<,"$1!$WagF'')r0   c                    t               }||j                  _        d|_        ||_        t	        ddd      }| j                  |       |j                          y )N   r*   *   welcomerc   )r   rm   rn   ro   r   
assertTruerp   rq   s       r   )test_send_message_returns_true_on_successzBSendTelegramMessageTests.test_send_message_returns_true_on_successp   sM    !/<,"$1!$WbyI'')r0   c                    t        d      |_        t        ddd      }| j                  |       |j	                          y )Nznetwork errorr*   c   oopsrc   )	Exceptionside_effectr   rf   rp   rh   s      r   $test_send_message_handles_exceptionsz=SendTelegramMessageTests.test_send_message_handles_exceptions|   s7    #,_#= $WbvF'')r0   N)r\   r]   r^   r   rk   rs   ry   r   r   r0   r   r`   r`   ]   sh    
23) 4)
 23	* 4	* 23	* 4	* 23* 4*r0   r`   )
__future__r   r   r"   r:   urllib.parser%   r   r   r   unittest.mockr   r   django.testr	   utils.telegramr
   r   r   r   r`   r   r0   r   <module>r      sG    "     2 2 * & GGN GGT&*~ &*r0   