o
    LfR.                     @   s0  d dl mZ d dlmZ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mZmZ d d
lmZ d dlmZmZmZ d dlmZ d dlmZ ddl m!Z! dd Z"edede!d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& Z+d'd( Z,d)S )*    )	timedelta)Mockpatch)settings)SESSION_KEYget_user_model)cache)HttpResponseRedirect)reverse)now)assertRedirectsassertTemplateNotUsedassertTemplateUsed)app_settings)EmailAddressEmailConfirmationEmailConfirmationHMAC)user_logged_in)user_pk_to_url_str   )UUIDUserc                 C   s   dt _dt _| dd}tj||j}t|j}t	 }t
| |j}t||d< |  |td|gd}tjj|jd}|jsDJ |jt |j||t
d t
| d S )	NTFemail_verifiedaccount_useraccount_confirm_emailargspk)senderrequestresponseusersignal)r   ACCOUNT_EMAIL_CONFIRMATION_HMAC#ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATIONr   objectsget_for_useremailr   keyr   r   connectsessionr   savepostr
   getr   verifiedassert_called_once_withr   wsgi_request
disconnect)user_factoryclientr"   r(   r)   receiver_mockr+   resp r7   i/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/tests/test_confirm_email.pytest_login_on_confirm   s*   



r9   z#allauth.account.views.perform_loginz$allauth.account.utils.get_user_model)return_valuec           
      C   s   d|_ d|_tdddd}|j}t||d< |  td|d}d}tt|d	}	||	_|	|	j	_
td
d|_
td|	 |td|gd W d    n1 sOw   Y  |jsYJ d S )NTjohn@example.comjohn)	is_activer(   usernamer   F)r/   r"   mockkey)autospecr)   /)redirect_toz+allauth.account.views.EmailConfirmationHMACr   r   )r$   r%   r   r+   r   r,   r   r   email_addressfrom_keyr:   r	   r   r-   r
   called)

mocked_gummock_perform_loginr   r4   dbr"   r+   r(   r)   confirmationr7   r7   r8   test_login_on_confirm_uuid_user;   s    rJ   c                 C   sp   d| _ |ddd |ddd}tj||j}|jrJ tjj|dt d}|	t
d|jgd	}t|d
 d S )N)FTzfoo@bar.org)r   r(   Fdummy)rC   r)   sentr   r   z.account/messages/email_confirmation_failed.txt)r$   r   r&   r'   r(   r/   r   creater   r-   r
   r)   r   )r   r3   r4   unverified_userrC   rI   r6   r7   r7   r8   test_email_verification_failedX   s   
rO   c                 C   s  d| _ d| _tjj| _|jtdddddddd}|jd	ks!J |d
 j	dgks+J |d
 j
dd
ks7J t|dks?J t|dtj  dD ]=}|jtdddddd}t jjddd seJ t|dtj  t||ksuJ tjjdd |ksJ t  qItjjddd d  }|td|jgd}t|dtj  |td|jgd |tdddd}t|| jdd d S )NF
   account_signupjohndoer;   )r>   r(   	password1	password2T)follow   r   http://r   zaccount/verification_sent.%s)r      account_loginloginpassword)r>   r=   zaccount/verification_sent.)email_address__email)email_address__user__usernamer   r   zaccount/email_confirm.%sfetch_redirect_response)r$   #ACCOUNT_EMAIL_CONFIRMATION_COOLDOWNr   EmailVerificationMethod	MANDATORYACCOUNT_EMAIL_VERIFICATIONr-   r
   status_codetobodyfindlenr   TEMPLATE_EXTENSIONr   r&   filterexistsr   countr   clearr.   r)   r   LOGIN_REDIRECT_URL)r   rH   r4   
mailoutboxenable_cacher6   attemptrI   r7   r7   r8   !test_email_verification_mandatoryi   sr   

	

rs   c                 C   s   d| _ tjj| _d| _|td |tddddd}t	|| j dd |d j
dgks0J t|d	ks8J |  tjjt td	d
 d |tdddd}t	|| jdd |d j
dgksfJ t|d	ksnJ d S )Nz/accounts/welcome/FrQ   rR   r;   )r>   r(   rS   r_   r   r   )days)rL   rY   rZ   )ACCOUNT_SIGNUP_REDIRECT_URLr   rb   OPTIONALrd   #ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICEr.   r
   r-   r   rf   ri   logoutr   r&   updater   r   ro   )r   r4   rH   rp   r6   r7   r7   r8    test_optional_email_verification   s2   
	rz   c                 C   sn   dt _| dd}tj||j}t|}t |_	|
  |td|jgd tjj|jd}|js5J d S )NTFr   r   r   r   )r   r$   r   r&   r'   r(   r   rM   r   rL   r,   r-   r
   r)   r.   r   r/   )r3   r4   r"   r(   rI   r7   r7   r8   'test_email_confirmation_hmac_falls_back   s   

r{   c           	      C   s   d| _ |dd}tj||j}t|}|d}|j|d t|dks'J |	t
d|jgd tjj|jd	}|js?J d S )
NTFr   rA   r    r   r   r   r   )r$   r   r&   r'   r(   r   r.   sendri   r-   r
   r)   r   r/   )	r   r4   r3   rp   rfr"   r(   rI   r    r7   r7   r8   test_email_confirmation_hmac   s   

r   c           	      C   s   d| _ d| _|dd}tj||j}t|}|d}|j|d t	|dks*J |
td|jgd	 tjj|jd
}|jrBJ d S )NTr   Fr   rA   r|   r   r   r   r   )r$   &ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYSr   r&   r'   r(   r   r.   r}   ri   r-   r
   r)   r   r/   )	r   r3   r4   rp   r~   r"   r(   rI   r    r7   r7   r8   $test_email_confirmation_hmac_timeout   s   

r   c           	      C   s  t jj| _|dd}|| |td|jdd t|dks#J |d j	|jgks.J |
  |d j}|ddks@J |dd	d
}|td|jd	d}||jd ks[J ||dd  d }||}t|d t|d t|| jdd dS )zTest the email confirmation view. If User B clicks on an email
    verification link while logged in as User A, ensure User A gets
    logged out.Fr   account_email r(   action_sendr   r   rW   doe)r   r\   rY   rZ   r"   /confirm-email/Naccount/messages/logged_out.txt$account/messages/email_confirmed.txtr_   )r   AuthenticationMethodEMAILACCOUNT_AUTHENTICATION_METHODforce_loginr-   r
   r(   ri   rf   rx   rg   rh   contextsplitr   r   	LOGIN_URL)	r   r3   r4   rp   r"   rg   user2r6   urlr7   r7   r8   .test_confirm_email_with_another_user_logged_in   s,   






r   c                 C   s   t jj| _|dd}|| |td|jdd t|dks#J |d j	|jgks.J |d j
}|ddks<J ||d	d
  d }||}t|d t|d t|| jdd ||jjkshJ d
S )zkIf the user clicks on an email verification link while logged in, ensure
    the user stays logged in.
    Fr   r   r   r   r   r   rW   r   Nr   r   r_   )r   r   r   r   r   r-   r
   r(   ri   rf   rg   rh   r   r   r   r   ro   r1   r"   )r   r3   r4   rp   r"   rg   r   r6   r7   r7   r8   +test_confirm_email_with_same_user_logged_in  s   






r   c                 C   sh   d|_ |dd}| jt t|jksJ tjj|dd}| tddt	|j
id | jtr2J dS )z
    When a user is signed in, and you follow an email confirmation link of
    another user within the same browser/session, be sure to sign out the signed
    in user.
    Fr   )r"   r/   r   r)   )kwargsN)ACCOUNT_CONFIRM_EMAIL_ON_GETr+   r   strr   r   r&   r.   r
   r   r)   )auth_clientr   r"   r3   confirming_userr(   r7   r7   r8   test_confirm_logs_out_user:  s   
r   N)-datetimer   unittest.mockr   r   django.confr   django.contrib.authr   r   django.core.cacher   django.httpr	   django.urlsr
   django.utils.timezoner   pytest_django.assertsr   r   r   allauth.accountr   allauth.account.modelsr   r   r   allauth.account.signalsr   allauth.account.utilsr   test_modelsr   r9   rJ   rO   rs   rz   r{   r   r   r   r   r   r7   r7   r7   r8   <module>   s6    
D%$