o
    hd2                     @   s   d dl 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 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hddddddd	G dd deZdd Z dd Z!dd Z"dd Z#dS )    N)ANYpatch)settings)get_user_model)mail)TestCase)override_settings)NoReverseMatchreverse)assertTemplateUsed)app_settings)"AUTHENTICATION_METHODS_SESSION_KEY)	LoginForm)EmailAddresshttps/accounts/profile/z/accounts/welcome/z-allauth.account.adapter.DefaultAccountAdapterT)	ACCOUNT_DEFAULT_HTTP_PROTOCOLACCOUNT_EMAIL_VERIFICATIONACCOUNT_LOGIN_METHODS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ejjh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hejjddddiiddd Zeejjh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 r8   [/var/www/html/env_mimamsha/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_activer8   )r   r,   r-   r.   set_unusable_passwordr/   )r6   r   r'   kwargsr    r8   r8   r9   _create_userA   s   
zLoginTests._create_userTc                 C   s(   |rdnd}| j |d}| j| |S )Nr<   F)r'   )rA   r0   force_login)r6   usable_passwordr'   r    r8   r8   r9   _create_user_and_loginL   s   z!LoginTests._create_user_and_loginc                 C   s0   |    | j}|td}| j|ddd d S )Nr$   r   Fr(   )rD   r0   getr
   r2   )r6   cr7   r8   r8   r9    test_redirect_when_authenticatedR   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fieldsrK   errorsr   )	rD   r0   r1   r
   r3   jsonloadscontentdecode)r6   r7   rM   r8   r8   r9   test_ajax_password_changeX   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   r0   r1   r
   r2   r   r   r5   r8   r8   r9   &test_login_unverified_account_optionalg   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}| 
|jd d |rHdnd qd S )Nr;   r   r<   rX   TFr         rZ   r$   )r;   JohnJOHNJOhnjoHNwrongr%   rP   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   ranger0   r1   r
   assertFormErrorcontext)r6   r    iis_valid_attempt	is_lockedr7   r8   r8   r9   #test_login_failed_attempts_exceededy   s.   



z.LoginTests.test_login_failed_attempts_exceeded   )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	}| 
|jd
 d d | jtd|j	dd	}| 
|j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%   rP   z@The email address and/or password you specified are not correct.rf   account_reset_passwordr!   )rM   r   zhttps://z/accounts/password/reset/z"account/password_reset_from_key.%s
token_fail
newpass123)rJ   rK   $account_reset_password_from_key_done)pkFr(   )r   r,   r-   r.   r/   r   r0   r1   r
   r!   rh   ri   r   outboxbodyassertGreaterfindsplitrE   urlr   r   TEMPLATE_EXTENSIONassertFalsecontext_datar2   rv   
assertTruecheck_passwordr   r   )r6   r    r7   rx   r|   new_passwordr8   r8   r9   =test_login_failed_attempts_exceeded_cleared_on_password_reset   sd   



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;   ro   Trp   r<   r   john@example.comFr$   r%   account_email_verification_sentr(   rn   r   )r   r,   r-   r.   r/   r   r0   r1   r
   r2   r3   lenr   rw   tor5   r8   r8   r9   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<   rX   TFr   r$   r%   r   N
r   r,   r-   r.   r/   r   r0   r1   r
   r2   r5   r8   r8   r9   '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_inactiverX   Nr   r5   r8   r8   r9   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$      )rD   r0   rE   r
   r3   status_code)r6   r7   r8   r8   r9   3test_account_authenticated_login_redirects_is_false5  s   z>LoginTests.test_account_authenticated_login_redirects_is_falseN)r;   r<   )T)__name__
__module____qualname__r   r   LoginMethodUSERNAMEEMAILr:   rA   rD   rG   rW   EmailVerificationMethodOPTIONALrY   rm   	MANDATORYr   r   r   r   r   r8   r8   r8   r9   r      sX    




	

D
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   rQ   	help_text)r0   dbreverse_mockrP   r8   r8   r9   .test_login_password_forgotten_link_not_present<  s
   
"r   c                 C   s   t  }|jd jdksJ d S )Nr'   z=<a href="/accounts/password/reset/">Forgot your password?</a>)r   rQ   r   )r0   r   rP   r8   r8   r9   *test_login_password_forgotten_link_presentC  s   
r   c                 C   s   d| _ |dddd |dddd | j}|tdddd	}|jd
ks&J |d |ks.J |tdddd	}|jd
ks@J |d |ksHJ d S )NFr;   ro   r<   )r   r!   r'   janezjane@example.orgr$   r%   i.  location)r   r   r1   r
   r   )r   r0   user_factoryredirect_urlr7   r8   r8   r9   test_login_while_authenticatedK  s   r   c                 C   s*   |  td}|jdksJ t|d d S )Nr$   r   zaccount/login.html)rE   r
   r   r   )r0   r   r7   r8   r8   r9   test_login_pageY  s   r   )$rS   unittest.mockr   r   django.confr   django.contrib.authr   django.corer   django.testr   django.test.utilsr   django.urlsr	   r
   pytest_django.assertsr   allauth.accountr   allauth.account.authenticationr   allauth.account.formsr   allauth.account.modelsr   r   r   AuthenticationMethodr   r   r   r   r   r   r8   r8   r8   r9   <module>   s>       