o
    Lfb2                     @   s   d dl Z d dlmZm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lmZ d dlmZ edejjejjddddddd	G dd deZdd Zdd Z dS )    N)ANYpatch)settings)get_user_model)mail)override_settings)NoReverseMatchreverse)app_settings)"AUTHENTICATION_METHODS_SESSION_KEY)	LoginForm)EmailAddress)TestCasehttps/accounts/profile/z/accounts/welcome/z-allauth.account.adapter.DefaultAccountAdapterT)	ACCOUNT_DEFAULT_HTTP_PROTOCOLACCOUNT_EMAIL_VERIFICATIONACCOUNT_AUTHENTICATION_METHODACCOUNT_SIGNUP_FORM_CLASSACCOUNT_EMAIL_SUBJECT_PREFIXLOGIN_REDIRECT_URLACCOUNT_SIGNUP_REDIRECT_URLACCOUNT_ADAPTERACCOUNT_USERNAME_REQUIREDc                   @   s   e Zd Zeejjddd Zd)ddZd*d	d
Z	dd Z
dd Zeejjddd Zeejjddddiiddd Zeejjejjddddiiddd Zeejjejjdddd Zd d! Zd"d# Zed$d%d&d' Zd(S )+
LoginTests)r   c                 C   s   t  jjdd}|d |  tjj|dddd | jtdddd}| j	|t
jd	d
 | | jjt tdddg d S )Nz@raymond.pennersusernamepsstzraymond.penners@example.comTuseremailprimaryverifiedaccount_loginloginpasswordFfetch_redirect_responser&   )atr   method)r   objectscreateset_passwordsaver   clientpostr	   assertRedirectsr   r   assertEqualsessionr   r   selfr   resp r7   a/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/tests/test_login.pytest_username_containing_at   s0   

z&LoginTests.test_username_containing_atjohndoec                 K   s>   t  jjd|dd|}|r|| n|  |  |S )NTr   	is_activer7   )r   r+   r,   r-   set_unusable_passwordr.   )r5   r   r&   kwargsr   r7   r7   r8   _create_user=   s   
zLoginTests._create_userTc                 C   s(   |rdnd}| j |d}| j| |S )Nr;   F)r&   )r@   r/   force_login)r5   usable_passwordr&   r   r7   r7   r8   _create_user_and_loginH   s   z!LoginTests._create_user_and_loginc                 C   s0   |    | j}|td}| j|ddd d S )Nr#   r   Fr'   )rC   r/   getr	   r1   )r5   cr6   r7   r7   r8    test_redirect_when_authenticatedN   s   z+LoginTests.test_redirect_when_authenticatedc                 C   sl   |    | jjtddddddd}| |d d	 t|jd
}d|d d d d d v s4J d S )Naccount_change_passwordr;   z
AbCdEf!123zAbCdEf!123456)oldpassword	password1	password2XMLHttpRequest)dataHTTP_X_REQUESTED_WITHzcontent-typezapplication/jsonutf8zsame passwordformfieldsrJ   errorsr   )	rC   r/   r0   r	   r2   jsonloadscontentdecode)r5   r6   rL   r7   r7   r8   test_ajax_password_changeT   s   	$z$LoginTests.test_ajax_password_change)r   c                 C   sd   t  jjdd}|d |  tjj|dddd | jtdddd	}| j	|t
jdd
 dS )z9Tests login behavior when email verification is optional.r:   r   r;   user@example.comTFr   r#   r$   r'   N)r   r+   r,   r-   r.   r   r/   r0   r	   r1   r   r   r4   r7   r7   r8   &test_login_unverified_account_optionalc   s   

z1LoginTests.test_login_unverified_account_optional   defaultBACKENDz-django.core.cache.backends.locmem.LocMemCache)r   ACCOUNT_LOGIN_ATTEMPTS_LIMITCACHESc                 C   s   t  jjdd}|d |  tjj|dddd tdD ]>}|d	k}|d
k}| jt	dg d| |r8dndd}t
jdkrQ| |jd d |rMdnd q| |dd |rZdnd qd S )Nr:   r   r;   rW   TFr         rY   r#   )r:   JohnJOHNJOhnjoHNwrongr$   r_      rO   0Too many failed login attempts. Try again later.z;The username and/or password you specified are not correct.)r   r+   r,   r-   r.   r   ranger/   r0   r	   djangoVERSIONassertFormErrorcontext)r5   r   iis_valid_attempt	is_lockedr6   r7   r7   r8   #test_login_failed_attempts_exceededu   s@   




z.LoginTests.test_login_failed_attempts_exceededrf   )r   r   r\   r]   c                 C   s  t  jjdddd}|d |  tjj|dddd | jtd|j	dd	}t
jd
kr:| |jd d d n| |dd d | jtd|j	dd	}t
jd
kr_| |jd d d n| |dd d | jjtdd|j	id tjd j}| |dd ||dd   d }| j|}|j}| j|}| |dtj  | d|jv  d}| j|||d}| |td t  jj|jd}| || | jtd|j	|d	}| j|tj dd d S )Nr:   john@example.orgTr   r    r=   r;   r   r#   badr$   re   rO   z@The email address and/or password you specified are not correct.rg   account_reset_passwordr    )rL   r   zhttps://z/password/reset/z"account/password_reset_from_key.%s
token_fail
newpass123)rI   rJ   $account_reset_password_from_key_done)pkFr'   )!r   r+   r,   r-   r.   r   r/   r0   r	   r    ri   rj   rk   rl   r   outboxbodyassertGreaterfindsplitrD   urlassertTemplateUsedr
   TEMPLATE_EXTENSIONassertFalsecontext_datar1   rx   
assertTruecheck_passwordr   r   )r5   r   r6   rz   r~   new_passwordr7   r7   r8   =test_login_failed_attempts_exceeded_cleared_on_password_reset   s   





zHLoginTests.test_login_failed_attempts_exceeded_cleared_on_password_reset)r   r   r\   c                 C   s   t  jjdddd}|d |  tjj|dddd tjj|dddd | jtd	ddd
}| j	|tddd | 
ttjd tjd jdgksQJ d S )Nr:   rq   Trr   r;   r   john@example.comFr#   r$   account_email_verification_sentr'   rf   r   )r   r+   r,   r-   r.   r   r/   r0   r	   r1   r2   lenr   ry   tor4   r7   r7   r8   7test_login_using_unverified_email_address_is_prohibited  s*   
zBLoginTests.test_login_using_unverified_email_address_is_prohibitedc                 C   sb   t  jjdd}|d |  tjj|dddd | jtdddd	}| 	|td
 dS )z:Tests login behavior when email verification is mandatory.r:   r   r;   rW   TFr   r#   r$   r   N
r   r+   r,   r-   r.   r   r/   r0   r	   r1   r4   r7   r7   r8   'test_login_unverified_account_mandatory  s   
z2LoginTests.test_login_unverified_account_mandatoryc                 C   s   t  jjddd}|d |  tjj|dddd | jtdddd	}| 	|td
 t  jjddd}|d |  tjj|dddd | jtdddd	}| 	|td
 dS )z
        Tests login behavior with inactive accounts.

        Inactive user accounts should be prevented from performing any actions,
        regardless of their verified state.
        r:   Fr<   r;   r   Tr   r#   r$   account_inactiverW   Nr   r4   r7   r7   r8   test_login_inactive_account,  s(   

z&LoginTests.test_login_inactive_accountF)%ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTSc                 C   s*   |    | jtd}| |jd d S )Nr#      )rC   r/   rD   r	   r2   status_code)r5   r6   r7   r7   r8   3test_account_authenticated_login_redirects_is_falseK  s   z>LoginTests.test_account_authenticated_login_redirects_is_falseN)r:   r;   )T)__name__
__module____qualname__r   r
   AuthenticationMethodUSERNAME_EMAILr9   r@   rC   rF   rV   EmailVerificationMethodOPTIONALrX   rp   EMAIL	MANDATORYr   r   r   r   r   r7   r7   r7   r8   r      sT    




	#

V
r   c                 C   sN   t d}t|_t }|jd jdksJ W d    d S 1 s w   Y  d S )Nzallauth.account.forms.reverser&    )r   r   side_effectr   rP   	help_text)r/   dbreverse_mockrO   r7   r7   r8   .test_login_password_forgotten_link_not_presentR  s
   
"r   c                 C   s   t  }|jd jdksJ d S )Nr&   z4<a href="/password/reset/">Forgot your password?</a>)r   rP   r   )r/   r   rO   r7   r7   r8   *test_login_password_forgotten_link_presentY  s   
r   )!rR   unittest.mockr   r   ri   django.confr   django.contrib.authr   django.corer   django.test.utilsr   django.urlsr   r	   allauth.accountr
   allauth.account.authenticationr   allauth.account.formsr   allauth.account.modelsr   allauth.testsr   r   r   r   USERNAMEr   r   r   r7   r7   r7   r8   <module>   s:      7