a
    Šxd:I  ã                   @   sj   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 dlmZmZ G dd	„ d	eeƒZdS )
é    N)ÚUser)Úoverride_settings)Ústatus)ÚAPITestCase)ÚResetPasswordToken)ÚHelperMixinÚpatchc                   @   sè   e Zd ZdZdd„ Zdd„ Zdd„ Zedƒd	d
„ ƒZdd„ Z	edƒe
dddd„ ƒƒZedƒdd„ ƒZedƒe
dddd„ ƒƒZedƒdd„ ƒZedƒedƒedƒdd„ ƒƒƒZe
dddd „ ƒZd!d"„ Ze
d#d$edƒd%d&„ ƒƒZd'S )(ÚAuthTestCasez@
    Several Test Cases for the Multi Auth Token Django App
    c                 C   sd   |   ¡  tj ddd¡| _tj ddd¡| _tj ddd	¡| _tj d
d¡| _tj ddd¡| _d S )NÚuser1úuser1@mail.comÚsecret1Úuser2úuser2@mail.comZsecret2úuser3@mail.comznot-that-mail@mail.comÚsecret3Úuser4úuser4@mail.comÚuser5õ   uÑ•er5@mail.comZsecret5)	Z	setUpUrlsr   ÚobjectsZcreate_userr
   r   Zuser3r   r   )Úself© r   úV/var/www/html/Ranjet/env/lib/python3.9/site-packages/tests/test/test_auth_test_case.pyÚsetUp   s    zAuthTestCase.setUpc                 C   s>   | j dd}|  |jtj¡ t |j ¡ ¡}|  	d|v ¡ dS )z; Tests requesting a token for an email that does not exist úfoobar@doesnotexist.com©Úemailr   N©
Úrest_do_request_reset_tokenÚassertEqualÚstatus_coder   ÚHTTP_400_BAD_REQUESTÚjsonÚloadsÚcontentÚdecodeÚ
assertTrue©r   ÚresponseZdecoded_responser   r   r   Ú,test_try_reset_password_email_does_not_exist   s    z9AuthTestCase.test_try_reset_password_email_does_not_existc                 C   sF   | j dd}|  |jtj¡ t |j ¡ ¡}|  | 	d¡d d¡ d S )Nr   r   r   r   zEnter a valid email address.)
r   r   r    r   r!   r"   r#   r$   r%   Úgetr'   r   r   r   Útest_unicode_email_reset!   s    z%AuthTestCase.test_unicode_email_resetzCdjango_rest_passwordreset.signals.reset_password_token_created.sendc                 C   sê   |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |  	|j
¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ |   tjj|jd ¡ jjd¡ |  |j¡}|   |jtj¡ |   tj ¡  ¡ d¡ | j	|  dd	¡d
d dS )z Tests validate token r   r   r   é   Úreset_password_tokenÚ ©Úkeyr
   r   ú=User 1 should still be able to login with the old credentials©ÚmsgN)r   r   r   ÚallÚcountr   r    r   ÚHTTP_200_OKr&   ÚcalledÚ
call_countÚ	call_argsÚassertNotEqualr0   ÚfilterÚfirstÚuserÚusernameÚrest_do_validate_tokenÚdjango_check_login©r   Ú!mock_reset_password_token_createdr(   Zlast_reset_password_tokenr   r   r   Útest_validate_token(   s&    þ
þz AuthTestCase.test_validate_tokenc                 C   sJ   |   tj ¡  ¡ d¡ |  d¡}|   |jtj¡ |   tj ¡  ¡ d¡ dS )z! Tests validate an invalid token r   Znot_a_valid_tokenN)	r   r   r   r4   r5   r?   r    r   ÚHTTP_404_NOT_FOUND©r   r(   r   r   r   Útest_validate_bad_tokenL   s    
z$AuthTestCase.test_validate_bad_tokenéÿÿÿÿ)Z2DJANGO_REST_MULTITOKENAUTH_RESET_TOKEN_EXPIRY_TIMEc                 C   sê   |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |  	|j
¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ |   tjj|jd ¡ jjd¡ |  |j¡}|   |jtj¡ |   tj ¡  ¡ d¡ | j	|  dd	¡d
d dS )z! Tests validate an expired token r   r   r   r,   r-   r.   r/   r
   r   r1   r2   N)r   r   r   r4   r5   r   r    r   r6   r&   r7   r8   r9   r:   r0   r;   r<   r=   r>   r?   rD   r@   rA   r   r   r   Útest_validate_expired_tokenY   s&    þ
þz(AuthTestCase.test_validate_expired_tokenc                 C   s^  |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |  	|j
¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ |   tjj|jd ¡ jjd	¡ |  |jd
¡}|   |jtj¡ |   tj ¡  ¡ d¡ | j|  d	d¡dd | j	|  d	d
¡dd dS )ú Tests resetting a password r   r   r   r,   r-   r.   é   r/   r
   Ú
new_secretr   z;User 1 should not be able to login with the old credentialsr2   z<User 1 should be able to login with the modified credentialsN©r   r   r   r4   r5   r   r    r   r6   r&   r7   r8   r9   r:   r0   r;   r<   r=   r>   Ú!rest_do_reset_password_with_tokenÚassertFalser@   rA   r   r   r   Útest_reset_password~   s:    þ
þ
þz AuthTestCase.test_reset_passwordr>   )ZDJANGO_REST_LOOKUP_FIELDc                 C   s^  |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |  	|j
¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ | jdd}|   |jtj¡ |   |jd¡ |jd d }|  |jd¡ |   tj ¡  ¡ d¡ |   tjj|jd ¡ jjd¡ |  |jd	¡}|   |jtj¡ |   tj ¡  ¡ d¡ | j|  dd
¡dd | j	|  dd	¡dd dS )rI   r   r   r   r,   r-   r.   rJ   r/   rK   r   z;User 3 should not be able to login with the old credentialsr2   z<User 3 should be able to login with the modified credentialsNrL   rA   r   r   r   Ú$test_reset_password_different_lookup²   s:    þ
þ
þz1AuthTestCase.test_reset_password_different_lookupc                 C   s¾  | j dd}|  |jtj¡ |  tj ¡  ¡ d¡ |  	|j
¡ |  |jd¡ |jd d }| j dd}|  |jtj¡ tj ¡ }|  | ¡ d¡ |  |jd¡ |jd d }|  |d j|d j¡ | j dd}|  |jtj¡ |  tj ¡  ¡ d¡ | j dd}|  |jtj¡ |  tj ¡  ¡ d¡ |  |jd¡}|  |jtj¡ |  tj ¡  ¡ d¡ |  tjj|jd	 ¡ d¡ |  	|  d
d¡¡ |  |jd¡}|  |jtj¡ |  	|  d
d¡¡ dS )zR Checks whether multiple password reset tokens can be created for different users r   r   r,   r-   r   rJ   r   Zsecret2_newr/   r   Zsecret2_fake_newN)r   r   r    r   r6   r   r   r4   r5   r&   r7   r8   r9   r:   r0   rM   r;   r@   rD   )r   rB   r(   Útoken1ÚtokensZtoken2r   r   r   Ú"test_reset_password_multiple_usersç   s>    

ÿ
ÿz/AuthTestCase.test_reset_password_multiple_usersz9django_rest_passwordreset.signals.pre_password_reset.sendz:django_rest_passwordreset.signals.post_password_reset.sendc                 C   sâ   |   |j¡ |   |j¡ |   |j¡ | jdd}|  |jtj¡ |  tj 	¡  
¡ d¡ |  |j¡ |  |jd¡ |jd d }| j|jddd |   |j¡ |   |j¡ |  |jd¡}|  |jtj¡ |  |j¡ |  |j¡ d S )	Nr   r   r,   r-   r.   z\Verify that the reset_password_token of the reset_password_Token_created signal is not emptyr2   rK   )rN   r7   r   r   r    r   r6   r   r   r4   r5   r&   r8   r9   r:   r0   rM   )r   Zmock_post_password_resetZmock_pre_password_resetrB   r(   rQ   r   r   r   Útest_signals   s$    	
ÿzAuthTestCase.test_signalsT)Z0DJANGO_REST_PASSWORDRESET_NO_INFORMATION_LEAKAGEc                 C   s    | j dd}|  |jtj¡ dS )z‘
        Tests requesting a token for an email that does not exist when
        DJANGO_REST_PASSWORDRESET_NO_INFORMATION_LEAKAGE == True
        r   r   N)r   r   r    r   r6   rE   r   r   r   Ú?test_try_reset_password_email_does_not_exist_no_leakage_enabledF  s    zLAuthTestCase.test_try_reset_password_email_does_not_exist_no_leakage_enabledc                 C   s>   | j dd}|  |jtj¡ t |j ¡ ¡}|  	d|v ¡ dS )zF Tests requesting a token for an email without a password doesn't workr   r   r   Nr   r'   r   r   r   Útest_user_without_passwordO  s    z'AuthTestCase.test_user_without_passwordF)Z2DJANGO_REST_MULTITOKENAUTH_REQUIRE_USABLE_PASSWORDc                 C   s2  | j dd}|  |jtj¡ |  |j¡ |  |jd¡ |jd d }|  	|j
d¡ |  tj ¡  ¡ d¡ | j dd}|  |jtj¡ |  |jd¡ |jd d }|  	|j
d¡ |  tj ¡  ¡ d¡ |  tjj|j
d ¡ jjd¡ |  |j
d	¡}|  |jtj¡ |  tj ¡  ¡ d
¡ | j|  dd	¡dd dS )zQ Tests requesting a token for an email without a password works when not requiredr   r   r,   r-   r.   rJ   r/   r   rK   r   z<User 4 should be able to login with the modified credentialsr2   N)r   r   r    r   r6   r&   r7   r8   r9   r:   r0   r   r   r4   r5   r;   r<   r=   r>   rM   r@   rA   r   r   r   Ú-test_user_without_password_where_not_requiredW  s0    þ
þz:AuthTestCase.test_user_without_password_where_not_requiredN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r+   r   rC   rF   r   rH   rO   rP   rS   rT   rU   rV   rW   r   r   r   r   r	      s6   
##
33
8#
r	   )r"   Zdjango.contrib.auth.modelsr   Zdjango.testr   Zrest_frameworkr   Zrest_framework.testr   Z django_rest_passwordreset.modelsr   Ztests.test.helpersr   r   r	   r   r   r   r   Ú<module>   s   