a
    o]5`V                     @   sT  d dl mZ d dl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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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%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ejAddd dgZBede4jCjDe4jEjFdddd d!d"d#	G d$d% d%e.ZGG d&d' d'e.ZHG d(d) d)e.ZIG d*d+ d+e.ZJG d,d- d-e.ZKG d.d/ d/eZLG d0d1 d1e.ZMG d2d3 d3e.ZNG d4d5 d5e.ZOG d6d7 d7e.ZPG d8d9 d9e.ZQdS ):    )absolute_importN)	timedelta)forms)settings)AbstractUserAnonymousUser)Site)mail
validators)ValidationError)models)HttpResponseRedirect)ContextTemplate)ClientRequestFactory)override_settings)reverse)now)BaseSignupFormResetPasswordForm
SignupForm)EmailAddressEmailConfirmationEmailConfirmationHMAC)MockTestCasepatch)get_user_modelget_username_max_length   )app_settings)get_adapter)AuthenticationBackend)user_logged_inuser_logged_out)filter_users_by_usernameurl_str_to_user_pkuser_pk_to_url_struser_usernamez^[a-c]+$znot abc)Zregexmessageflagshttps/accounts/profile/z/accounts/welcome/z-allauth.account.adapter.DefaultAccountAdapterT)	ZACCOUNT_DEFAULT_HTTP_PROTOCOLACCOUNT_EMAIL_VERIFICATIONACCOUNT_AUTHENTICATION_METHODZACCOUNT_SIGNUP_FORM_CLASSZACCOUNT_EMAIL_SUBJECT_PREFIXLOGIN_REDIRECT_URLACCOUNT_SIGNUP_REDIRECT_URLZACCOUNT_ADAPTERACCOUNT_USERNAME_REQUIREDc                   @   s  e Zd Zdd Zeejjddd Zdd Z	dd	 Z
d
d Zeddddd Zeddddd ZdddZdd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+d, Zeejjdd-d. Zd/d0 Zd1d2 Zd3d4 Zeejjdd5d6 Zd7d8 Z edd9d:d; Z!ed<d=d>d? Z"d@dA Z#eej$j%dBdCdD Z&eej$j%dEdFdGdH Z'eejjej$j(dIdJdKdL Z)eejjej$j(dIdJdMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.eej$j%dBdWdX Z/dYdZ Z0edd[d\d] Z1ed<d[d^d_ Z2d`da Z3eej$j%d<dbdcdd Z4ed<dedfdg Z5edhdidjidkgdldmdn Z6edd=dodp Z7edd=dqdr Z8eddsdtdudv Z9edwdxdydz Z:eejjdd{d| Z;eejjdd}d~ Z<dS )AccountTestsc                 C   s<   dt jv r8ddlm} |jjddd}|jtj	  d S )Nzallauth.socialaccount   )	SocialAppZtestfbZfacebook)nameZprovider)
r   ZINSTALLED_APPSZsocialaccount.modelsr5   objectscreateZsitesaddr   get_current)selfr5   sa r=   M/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/account/tests.pysetUp;   s    
zAccountTests.setUp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 )Nz@raymond.pennersusernameZpsstzraymond.penners@example.comTuseremailprimaryverifiedaccount_loginloginpasswordFZfetch_redirect_responser   r7   r8   set_passwordsaver   clientpostr   assertRedirectsr   r0   r;   rD   respr=   r=   r>   test_username_containing_atC   s     
z(AccountTests.test_username_containing_atc                 C   s>   |  dd}| tjj|d d tjjdd|dd d S )Njohn@example.comrD   r    TrG   rE   rD   rF   &_test_signup_email_verified_externallyassertEqualr   r7   filtercountgetr;   rD   r=   r=   r>   *test_signup_same_email_verified_externallyX   s    z7AccountTests.test_signup_same_email_verified_externallyc                 C   sR   |  dd}| tjj|d d tjjdd|dd tjjdd|dd dS )	z
        John is invited on john@example.org, but signs up via john@example.com.
        E-mail verification is by-passed, their home e-mail address is
        used as a secondary.
        rV   john@example.orgrW   r4   FrX   TNrY   r_   r=   r=   r>   +test_signup_other_email_verified_externallya   s    z8AccountTests.test_signup_other_email_verified_externallyc           	      C   s   d}t  td||ddd}ddlm} ddlm} |dd | |d	d | t |_	||j
d
< ddlm} ||}| |jd | |d t | | ttjd t jj|dS )Njohndoeaccount_signuprB   rE   	password1	password2r   MessageMiddlewareSessionMiddlewarec                 S   s   d S Nr=   requestr=   r=   r>   <lambda>       zEAccountTests._test_signup_email_verified_externally.<locals>.<lambda>c                 S   s   d S rl   r=   rm   r=   r=   r>   ro      rp   Zaccount_verified_emailr    signup.  locationrA   )r   rQ   r   "django.contrib.messages.middlewareri   "django.contrib.sessions.middlewarerk   process_requestr   rD   sessionviewsrr   r[   status_coder"   Zget_signup_redirect_urllenr	   outboxr   r7   r^   )	r;   Zsignup_emailZverified_emailrB   rn   ri   rk   rr   rT   r=   r=   r>   rZ   r   s.    

z3AccountTests._test_signup_email_verified_externallyT)r2   #ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICEc                 C   s2   | j jtddddddd}| |ddd	 d S )
Nrd   rc   ra   Zjanedoere   dataformrg   z*You must type the same password each time.rP   rQ   r   assertFormErrorr;   rT   r=   r=   r>   %test_signup_password_twice_form_error   s    	z2AccountTests.test_signup_password_twice_form_errorr2    ACCOUNT_SIGNUP_EMAIL_ENTER_TWICEc              	   C   s   t  tddddddd}ddlm} ddlm} |dd	 | |d
d	 | t |_	ddl
m} || t jjdd}| |jd d S )Nrd   rc   ra   rB   rE   email2rf   rg   r   rh   rj   c                 S   s   d S rl   r=   rm   r=   r=   r>   ro      rp   z6AccountTests.test_signup_email_twice.<locals>.<lambda>c                 S   s   d S rl   r=   rm   r=   r=   r>   ro      rp   r    rq   rA   )r   rQ   r   ru   ri   rv   rk   rw   r   rD   ry   rr   r   r7   r^   r[   rE   )r;   rn   ri   rk   rr   rD   r=   r=   r>   test_signup_email_twice   s$    
z$AccountTests.test_signup_email_twicejohndoec                 K   s>   t  jjf |dd|}|r*|| n|  |  |S NTrB   	is_activer   r7   r8   rN   Zset_unusable_passwordrO   )r;   rB   rK   kwargsrD   r=   r=   r>   _create_user   s    
zAccountTests._create_userc                 C   s(   |rdnd}| j |d}| j| |S )Nr   F)rK   )r   rP   force_login)r;   usable_passwordrK   rD   r=   r=   r>   _create_user_and_login   s    z#AccountTests._create_user_and_loginc                 C   s0   |    | j}|td}| j|ddd d S )NrH   r-   FrL   )r   rP   r^   r   rR   r;   crT   r=   r=   r>    test_redirect_when_authenticated   s    z-AccountTests.test_redirect_when_authenticatedc                 C   s    | j td}| |d d S )Naccount_reset_passwordzaccount/password_reset.html)rP   r^   r   assertTemplateUsedr   r=   r=   r>   test_password_reset_get   s    z$AccountTests.test_password_reset_getc                 C   s$   |  dd}| j|tddd d S )Naccount_set_passwordTaccount_change_passwordFrL    _password_set_or_change_redirectrR   r   r   r=   r=   r>   test_password_set_redirect   s    z'AccountTests.test_password_set_redirectc                 C   sp   |  d}d}| || | jjtd||dd}|  | || | |  | 	|j
d d S )NTz!*123i1uwn12W23r   rf   rg   r~   rs   )r   assertFalsecheck_passwordrP   rQ   r   Zrefresh_from_db
assertTrueZhas_usable_passwordr[   rz   )r;   rD   pwdrT   r=   r=   r>   test_set_password_not_allowed   s    
z*AccountTests.test_set_password_not_allowedc                 C   s   |  dd}| |jd d S )Nr   T   r   r[   rz   r   r=   r=   r>    test_password_change_no_redirect   s    z-AccountTests.test_password_change_no_redirectc                 C   s   |  dd}| |jd d S )Nr   Fr   r   r   r=   r=   r>   test_password_set_no_redirect   s    z*AccountTests.test_password_set_no_redirectc                 C   s$   |  dd}| j|tddd d S )Nr   Fr   rL   r   r   r=   r=   r>   test_password_change_redirect   s    z*AccountTests.test_password_change_redirectc                 C   s   |  | | jt|S rl   r   rP   r^   r   )r;   Zurlnamer   r=   r=   r>   r      s    
z-AccountTests._password_set_or_change_redirectc                 C   sl   |    | jjtddddddd}| |d d	 t|jd
}d|d d d d d v shJ d S )Nr   r   z
AbCdEf!123zAbCdEf!123456)Zoldpasswordrf   rg   XMLHttpRequestr   HTTP_X_REQUESTED_WITHcontent-typeapplication/jsonutf8zsame passwordr   fieldsrg   errorsr   )	r   rP   rQ   r   r[   jsonloadscontentdecoder;   rT   r   r=   r=   r>   test_ajax_password_change  s    	z&AccountTests.test_ajax_password_changec                 C   s&   |   }tjd j}|j|v s"J d S Nr   _request_new_passwordr	   r|   bodyrB   r;   rD   r   r=   r=   r>   %test_password_forgotten_username_hint  s    z2AccountTests.test_password_forgotten_username_hintc                 C   s&   |   }tjd j}|j|vs"J d S r   r   r   r=   r=   r>   (test_password_forgotten_no_username_hint  s    z5AccountTests.test_password_forgotten_no_username_hintc                 C   sj   t  jjdddd}|d |  | jjtdddid | t	t
jd	 | t
jd
 jdg |S )Nr   ra   TrB   rE   r   r   r   rE   r~   r    r   )r   r7   r8   rN   rO   rP   rQ   r   r[   r{   r	   r|   tor_   r=   r=   r>   r     s    
z"AccountTests._request_new_passwordc                 C   s   |    tjd j}| |dd ||dd  d }| j|}|j	}| 
 |}| |dtj  | |jd  dS )a9  
        Test the password reset flow when the session is empty:
        requesting a new password, receiving the reset link via email,
        following the link, getting redirected to the
        new link (without the token)
        Copying the link and using it in a DIFFERENT client (Browser/Device).
        r   https:///password/reset/N"account/password_reset_from_key.%s
token_fail)r   r	   r|   r   assertGreaterfindsplitrP   r^   urlZclient_classr   r!   TEMPLATE_EXTENSIONr   context_data)r;   r   r   rT   Zreset_pass_urlr=   r=   r>   +test_password_reset_flow_with_empty_session,  s    	z8AccountTests.test_password_reset_flow_with_empty_sessionc                 C   s  |   }tjd j}| |dd ||dd  d }| j|}|j	}| j|}| 
|dtj  | d|jv  | j|ddd}| |td	 t jj|jd
}| |d | j|ddd}| 
|dtj  | |jd  | j|}| 
|dtj  | |jd  | jj|ddddd}| |jd t|jd}d|d d d v s|J dS )z
        Tests the password reset flow: requesting a new password,
        receiving the reset link via email and finally resetting the
        password to a new value.
        r   r   r   Nr   r   
newpass123r   $account_reset_password_from_key_donepkr   r     r   invalidr   r   )r   r	   r|   r   r   r   r   rP   r^   r   r   r!   r   r   r   rQ   rR   r   r   r7   r   r   r   r[   rz   r   r   r   r   )r;   rD   r   r   rT   responser   r=   r=   r>   test_password_reset_flowJ  sP    

z%AccountTests.test_password_reset_flowc                 C   s"  |    tjd j}| |dd | jddd}tjj	||j
ddd | jtd|j
d	d
}| ||jd  ||dd  d }| j|}|j}| j|}| |dtj  | d|jv  | jj|ddddd}| |td | ||jd  | t |jd  dS )z
        Tests the password reset flow: if User B requested a password
        reset earlier and now User A is logged in, User B now clicks on
        the link, ensure User A is logged out before continuing.
        r   r   john2john2@example.comrB   rE   TrC   rH   r   rI   rD   r   Nr   r   r   r   followr   )r   r	   r|   r   r   r   r   r   r7   r8   rE   rP   rQ   r   r[   contextr   r^   r   r   r!   r   r   r   rR   ZassertNotEqualr   )r;   r   user2rT   r   r=   r=   r>   4test_password_reset_flow_with_another_user_logged_in  s8    


zAAccountTests.test_password_reset_flow_with_another_user_logged_inc                 C   s   |   }tjd j}| |dd tjj|dd ||dd 	 d }| j
|}| |dtj  | d|jv  dS )	zr
        Test that the password reset token is invalidated if
        the user email address was changed.
        r   r   zother@email.org)rD   rE   r   Nr   r   )r   r	   r|   r   r   r   r   r7   r8   r   rP   r^   r   r!   r   r   r   r;   rD   r   r   rT   r=   r=   r>   +test_password_reset_flow_with_email_changed  s    z8AccountTests.test_password_reset_flow_with_email_changed)ZACCOUNT_LOGIN_ON_PASSWORD_RESETc                 C   sl   |   }tjd j}||dd   d }| j|}| j|j	ddd}| 
|j | |d d S )Nr   r   r   r   /confirm-email/)r   r	   r|   r   r   r   rP   r^   rQ   r   r   Zis_authenticatedrR   r   r=   r=   r>   3test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESET  s    z@AccountTests.test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESETF)ACCOUNT_EMAIL_CONFIRMATION_HMACc                 C   s  t  }|jtdddddddd}| |jd | tjd jdg | tjd j	
d	d | ttjd
 | |dtj  dD ]}|jtdddddd}| t jjddd  | |dtj  | ttj| | tjjdd | tjjt td
d d qtjjddd d
  }|td|jgd}| |dtj  |td|jgd |tdddd}| j|tjdd d S )Nrd   rc   rV   re   Tr   r   r   r   r    zaccount/verification_sent.%s)r    r4   rH   rI   r   zaccount/verification_sent.)Zemail_address__emaildayssent)Zemail_address__user__usernameaccount_confirm_emailargszaccount/email_confirm.%sFrL   )r   rQ   r   r[   rz   r	   r|   r   r   r   r   r{   r   r!   r   r   r   r7   r\   existsr   r]   updater   r   r^   keyrR   r   r0   )r;   r   rT   Zattemptconfirmationr=   r=   r>   !test_email_verification_mandatory  st    

z.AccountTests.test_email_verification_mandatoryc                 C   sr   t j }d|_|  t jjddd}t d}t	jj
|||jdd | tjd jd	d  |j d S )
Nz<enc&"test>testuser@example.comr   /T)Zconfirmr   r    )r   r7   r:   r6   rO   r   r8   r   r^   r   Z	add_emailrE   r   r	   r|   Zsubject
startswith)r;   siteurn   r=   r=   r>   test_email_escaping"  s    
z AccountTests.test_email_escaping)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   rA   r   r   TFrC   rH   rI   rL   NrM   rS   r=   r=   r>   &test_login_unverified_account_optional+  s    
z3AccountTests.test_login_unverified_account_optional   )r.   ACCOUNT_LOGIN_ATTEMPTS_LIMITc                 C   s   t  jjdd}|d |  tjj|dddd tdD ]T}|d	k}|d
k}| jt	dg d| |rpdndd}| 
|dd |rdnd q>d S )Nr   rA   r   r   TFrC         r   rH   )r   ZJohnZJOHNZJOhnZjoHNZwrongrI   r   0Too many failed login attempts. Try again later.z;The username and/or password you specified are not correct.)r   r7   r8   rN   rO   r   rangerP   rQ   r   r   )r;   rD   iZis_valid_attemptZ	is_lockedrT   r=   r=   r>   #test_login_failed_attempts_exceeded=  s.    


z0AccountTests.test_login_failed_attempts_exceededr    )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	}| 
|d
d d | jtd|j	dd	}| 
|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   ra   Tr   r   rC   rH   badrI   r   zAThe e-mail address and/or password you specified are not correct.r   r   rE   r~   r   r   r   r   r   r   r   r   r   FrL   )r   r7   r8   rN   rO   r   rP   rQ   r   rE   r   r	   r|   r   r   r   r   r^   r   r   r!   r   r   r   rR   r   r   r   r   r0   )r;   rD   rT   r   r   Znew_passwordr=   r=   r>   =test_login_failed_attempts_exceeded_cleared_on_password_reset[  sh    


zJAccountTests.test_login_failed_attempts_exceeded_cleared_on_password_resetc                 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sJ d S )Nr   ra   Tr   r   rC   rV   FrH   rI   account_email_verification_sentrL   r    r   )r   r7   r8   rN   rO   r   rP   rQ   r   rR   r[   r{   r	   r|   r   rS   r=   r=   r>   7test_login_using_unverified_email_address_is_prohibited  s*    
zDAccountTests.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   rA   r   r   TFrC   rH   rI   r  N
r   r7   r8   rN   rO   r   rP   rQ   r   rR   rS   r=   r=   r>   'test_login_unverified_account_mandatory  s    
z4AccountTests.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   rV   TrC   rH   rI   Zaccount_inactiver   Nr  rS   r=   r=   r>   test_login_inactive_account  s(    

z(AccountTests.test_login_inactive_accountc                 C   sj   t  jjdddd | jjtdddidd}| ttj	d	 | tj	d
 j
dg | |d d d S )Nr   ra   Tr   r   rE   r   r   r    r   r   r   )r   r7   r8   rP   rQ   r   r[   r{   r	   r|   r   r   r=   r=   r>   test_ajax_password_reset  s    z%AccountTests.test_ajax_password_resetc                 C   s:   | j jtdi dd}| |jd t|jd d S )NrH   r   r   r   r   )	rP   rQ   r   r[   rz   r   r   r   r   r   r=   r=   r>   test_ajax_login_fail  s    z!AccountTests.test_ajax_login_failc                 C   st   t  jjddd}|d |  | jjtdddddd}| |j	d	 t
|jd
}| |d d d S )Nr   Tr   r   rH   rI   r   r   r   r   rt   r-   )r   r7   r8   rN   rO   rP   rQ   r   r[   rz   r   r   r   r   )r;   rD   rT   r   r=   r=   r>   test_ajax_login_success	  s    
z$AccountTests.test_ajax_login_successc                 C   s   |    | jtd d S )Naccount_emailr   r;   r=   r=   r>   test_email_view  s    zAccountTests.test_email_view)ZACCOUNT_LOGOUT_ON_GETc                 C   s   |  d\}}| |d d S )Nr^   account/messages/logged_out.txt)_logout_viewr   r   r=   r=   r>   test_logout_view_on_get  s    z$AccountTests.test_logout_view_on_getc                 C   sz   |  d\}}| |dtj  t }t| |td}| |d |j	t
 |jt
 jjddtd t| d S )Nr^   zaccount/logout.%saccount_logoutr  r   rA   )senderrn   rD   signal)r  r   r!   r   r   r%   connectrQ   r   assert_called_once_withr   wsgi_requestr7   r^   
disconnect)r;   r   rT   receiver_mockr=   r=   r>   test_logout_view_on_post#  s    

z%AccountTests.test_logout_view_on_postc                 C   sT   t  }t jjddd}|d |  t  }|jddd |t||tdfS )Nr   Tr   r   rB   rK   r  )	r   r   r7   r8   rN   rO   rJ   getattrr   )r;   methodr   rD   r=   r=   r>   r  9  s    
zAccountTests._logout_view)r.   r}   c                 C   s   t  }|td |tddddd}| j|tjdd | tj	d j
dg | ttj	d |  tjjt tdd	 d
 |tdddd}| j|tjdd | tj	d j
dg | ttj	d d S )Nrd   rc   rV   )rB   rE   rf   FrL   r   r    r   r   rH   rI   )r   r^   r   rQ   rR   r   r1   r[   r	   r|   r   r{   logoutr   r7   r   r   r   r0   r   r=   r=   r>    test_optional_email_verificationB  s2    	z-AccountTests.test_optional_email_verification)Z%ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTSc                 C   s*   |    | jtd}| |jd d S )NrH   r   )r   rP   r^   r   r[   rz   r   r=   r=   r>   3test_account_authenticated_login_redirects_is_falsej  s    z@AccountTests.test_account_authenticated_login_redirects_is_falsez>django.contrib.auth.password_validation.MinimumLengthValidatorZ
min_length	   )NAMEZOPTIONS)ZAUTH_PASSWORD_VALIDATORSc                 C   sB   | j tdddddd}| |dd g  | |dddg d S )Nrd   rc   rV   re   r   rf   zBThis password is too short. It must contain at least 9 characters.r   r   r=   r=   r>   test_django_password_validationp  s    	z,AccountTests.test_django_password_validationc                 C   sn   |   }tjj|dddd}t|}t |_|  | j	t
d|jgd tjj|jd}| |j d S )Na@b.comFTrD   rE   rG   rF   r   r   r   )r   r   r7   r8   r   r   r   rO   rP   rQ   r   r   r^   r   r   rG   r;   rD   rE   r   r=   r=   r>   'test_email_confirmation_hmac_falls_back  s    
z4AccountTests.test_email_confirmation_hmac_falls_backc                 C   sv   |   }tjj|dddd}t|}|  | ttj	d | j
td|jgd tjj|jd}| |j d S 	Nr"  FTr#  r    r   r   r   )r   r   r7   r8   r   sendr[   r{   r	   r|   rP   rQ   r   r   r^   r   r   rG   r$  r=   r=   r>   test_email_confirmation_hmac  s    z)AccountTests.test_email_confirmation_hmacr   )r   Z&ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYSc                 C   sv   |   }tjj|dddd}t|}|  | ttj	d | j
td|jgd tjj|jd}| |j d S r&  )r   r   r7   r8   r   r'  r[   r{   r	   r|   rP   rQ   r   r   r^   r   r   rG   r$  r=   r=   r>   $test_email_confirmation_hmac_timeout  s    z1AccountTests.test_email_confirmation_hmac_timeoutz.allauth.account.tests.test_username_validators)ZACCOUNT_USERNAME_VALIDATORSc                 C   s    t  d | tdd  d S )Nabcc                   S   s   t  dS )Ndef)r"   clean_usernamer=   r=   r=   r>   ro     rp   z6AccountTests.test_username_validator.<locals>.<lambda>)r"   r,  assertRaisesr   r  r=   r=   r>   test_username_validator  s    z$AccountTests.test_username_validatorc                 C   s0  t  jjdddd}| j| | jtd|jdd | t	t
jd | t
jd	 j|jg | j  t
jd	 j}| |d
d	 | jddd}tjj||jddd | jtd|jdd}| ||jd  ||dd  d	 }| j|}| |d | |d | j|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.r   ra   r   rB   rE   rK   r
   rE   action_sendr    r   r   r   r   r   TrC   rH   rI   rD   r   Nr  $account/messages/email_confirmed.txtFrL   )r   r7   create_userrP   r   rQ   r   rE   r[   r{   r	   r|   r   r  r   r   r   r   r   r8   r   r   r   rR   r   Z	LOGIN_URL)r;   rD   r   r   rT   r   r=   r=   r>   .test_confirm_email_with_another_user_logged_in  s8    

z;AccountTests.test_confirm_email_with_another_user_logged_inc                 C   s   t  jjdddd}| j| | jtd|jdd | t	t
jd | t
jd	 j|jg t
jd	 j}| |d
d	 ||dd  d	 }| j|}| |d | |d | j|tjdd | ||jj dS )zTest the email confirmation view. If User A clicks on an email
        verification link while logged in, ensure the user
        stayed logged in.r   ra   r   r/  r
  r0  r1  r    r   r   r   Nr  r3  FrL   )r   r7   r4  rP   r   rQ   r   rE   r[   r{   r	   r|   r   r   r   r   r   assertTemplateNotUsedr   rR   r   r0   r  rD   r   r=   r=   r>   +test_confirm_email_with_same_user_logged_in  s&    z8AccountTests.test_confirm_email_with_same_user_logged_inN)r   r   )T)=__name__
__module____qualname__r?   r   r!   AuthenticationMethodUSERNAME_EMAILrU   r`   rb   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   EMAILr   r   r   r   r   r   r   r   r   EmailVerificationMethodZOPTIONALr   r   	MANDATORYr  r  r  r  r  r  r	  r  r  r  r  r  r  r!  r%  r(  r)  r.  r5  r7  r=   r=   r=   r>   r3   /   s   
	




A
-

E	


H




	
$







'r3   c                   @   s   e Z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d Zdd Zedddd Zedddd Zedddd  ZdS )!EmailFormTestsc                 C   sv   t  }|jjddd| _| jd | j  tjj| j| jjddd| _tjj| jdddd| _	| j
jddd	 d S )
Nr   john1@example.orgr   r   Tr#  john2@example.orgFr  )r   r7   r8   rD   rN   rO   r   rE   email_addressemail_address2rP   rJ   )r;   Userr=   r=   r>   r?   	  s    
zEmailFormTests.setUpc                 C   s>   | j tdddd}tjjd| jddd | |d d S )Nr
  r0  john3@example.orgZ
action_addrE   F)rE   rD   rG   rF   ,account/messages/email_confirmation_sent.txt)rP   rQ   r   r   r7   r^   rD   r   r   r=   r=   r>   test_add  s    zEmailFormTests.test_addc                 C   sZ   | j jtddd}t|jd}|d | jjdddd| j	jd	d
d
dgksVJ d S )Nr
  r   r   r   r   rA  T)idrE   rF   rG   rB  F)
rP   r^   r   r   r   r   r   rC  r   rD  r   r=   r=   r>   test_ajax_get&  s     zEmailFormTests.test_ajax_getc                 C   sF   | j jtdddddd}t|jd}| |d td d S )	Nr
  r0  rF  rG  r   r   r   rt   )rP   rQ   r   r   r   r   r   r[   r   r=   r=   r>   test_ajax_add:  s    zEmailFormTests.test_ajax_addc                 C   sR   | j jtdddddd}t|jd}d|d	 d
 d d d v sNJ d S )Nr
  r0  zjohn3#example.orgrG  r   r   r   Zvalidr   r   rE   r   r   )rP   rQ   r   r   r   r   r   r   r=   r=   r>   test_ajax_add_invalidC  s    z$EmailFormTests.test_ajax_add_invalidc                 C   s>   | j tdd| jjd}tjj| jjd | 	|d d S )Nr
  r0  Zaction_removerE   r   0account/messages/cannot_delete_primary_email.txt)
rP   rQ   r   rC  rE   r   r7   r^   r   r   r   r=   r=   r>   test_remove_primaryL  s    z"EmailFormTests.test_remove_primaryc                 C   sV   | j jtdd| jjddd}| |d t|j	d}| 
|d td d S )	Nr
  r0  rN  r   r   rO  r   rt   )rP   rQ   r   rC  rE   r   r   r   r   r   r[   r   r=   r=   r>   test_ajax_remove_primaryV  s    z'EmailFormTests.test_ajax_remove_primaryc                    sB    j tdd jjd} tj fdd  |d d S )Nr
  r0  rN  c                      s   t jj jjdS )Nr   )r   r7   r^   rD  r   r=   r  r=   r>   ro   i  rp   z6EmailFormTests.test_remove_secondary.<locals>.<lambda>z"account/messages/email_deleted.txt)	rP   rQ   r   rD  rE   r-  r   ZDoesNotExistr   r   r=   r  r>   test_remove_secondaryb  s    
z$EmailFormTests.test_remove_secondaryc                 C   sh   | j tdd| jjd}tjj| jj	d}tjj| jj	d}| 
|j | |j | |d d S )Nr
  r0  Zaction_primaryrE   r   z-account/messages/unverified_primary_email.txt)rP   rQ   r   rD  rE   r   r7   r^   rC  r   r   rF   r   r   )r;   rT   rC  rD  r=   r=   r>   test_set_primary_unverifiedm  s    z*EmailFormTests.test_set_primary_unverifiedc                 C   s   t jj| jjd}d|_|  | jt	dd| jj
d}t jj| jjd}t jj| jjd}| |j | |j | |d d S )Nr   Tr
  r0  rS  z&account/messages/primary_email_set.txt)r   r7   r^   rD  r   rG   rO   rP   rQ   r   rE   rC  r   rF   r   r   )r;   rD  rT   rC  r=   r=   r>   test_set_primaryx  s    zEmailFormTests.test_set_primaryc                 C   s,   | j tdd| jjd}| |d d S )Nr
  r0  )r2  rE   rH  )rP   rQ   r   rD  rE   r   r   r=   r=   r>   test_verify  s
    zEmailFormTests.test_verifyr4   )ZACCOUNT_MAX_EMAIL_ADDRESSESc                 C   s(   | j tdddd}| |d d S Nr
  r0  rF  rG  rH  )rP   rQ   r   r6  r   r=   r=   r>   test_add_with_two_limiter  s    z(EmailFormTests.test_add_with_two_limiterNc                 C   s(   | j tdddd}| |d d S rW  rP   rQ   r   r   r   r=   r=   r>   test_add_with_none_limiter  s    z)EmailFormTests.test_add_with_none_limiterr   c                 C   s(   | j tdddd}| |d d S rW  rY  r   r=   r=   r>   test_add_with_zero_limiter  s    z)EmailFormTests.test_add_with_zero_limiter)r8  r9  r:  r?   rI  rK  rL  rM  rP  rQ  rR  rT  rU  rV  r   rX  rZ  r[  r=   r=   r=   r>   r@    s"   		


r@  c                   @   s^   e Zd Zeddgddd Zeddgddd Zeddd	d
 Zeddddd ZdS )BaseSignupFormTestsTrB   )r2   ZACCOUNT_USERNAME_BLACKLISTc                 C   s(   ddd}t |dd}| |  d S )NrB   r   r   TZemail_required)r   r   is_validr;   r   r   r=   r=   r>   test_username_in_blacklist  s
    z.BaseSignupFormTests.test_username_in_blacklistc                 C   s(   ddd}t |dd}| |  d S )NZtheusernamer   r   Tr]  )r   r   r^  r_  r=   r=   r>   test_username_not_in_blacklist  s
    z2BaseSignupFormTests.test_username_not_in_blacklist)r2   c                 C   sV   ddd}t |dd}t }|jd }| |j| |j}| |jdt| d S )NrB   r   r   Tr]  Z	maxlength)	r   r   r   r[   
max_lengthwidgetattrsr^   str)r;   r   r   rb  fieldrc  r=   r=   r>   test_username_maxlength  s    
z+BaseSignupFormTests.test_username_maxlengthr   c                 C   sp   ddd}t |dd}| |  dddd}t |dd}| |  d|d< t |dd}| |  d S )	NrB   r   r   Tr]  )rB   rE   r   zanotheruser@example.comr   )r   r   r^  r   r_  r=   r=   r>   test_signup_email_verification  s    z2BaseSignupFormTests.test_signup_email_verificationN)r8  r9  r:  r   r`  ra  rg  rh  r=   r=   r=   r>   r\    s   


r\  c                   @   s    e Zd Zeddddd ZdS )CustomSignupFormTestsT)r   r}   c                    sP   g d G  fdddt j}G dd dt|}| }| t|j   d S )N)rE   r   rf   rg   rB   	last_name
first_namec                       s(   e Zd ZejddZejddZ ZdS )zJCustomSignupFormTests.test_custom_form_field_order.<locals>.TestSignupForm   )rb  N)r8  r9  r:  r   Z	CharFieldrk  rj  Zfield_orderr=   Zexpected_field_orderr=   r>   TestSignupForm  s   rn  c                   @   s   e Zd ZdS )zLCustomSignupFormTests.test_custom_form_field_order.<locals>.CustomSignupFormN)r8  r9  r:  r=   r=   r=   r>   CustomSignupForm  s   ro  )r   ZFormr   r[   listr   keys)r;   rn  ro  r   r=   rm  r>   test_custom_form_field_order  s
    
z2CustomSignupFormTests.test_custom_form_field_orderN)r8  r9  r:  r   rr  r=   r=   r=   r>   ri    s
   ri  c                   @   sV   e Zd Zdd Zeejjddd Zeejj	ddd Z
eejjddd	 Zd
S )AuthenticationBackendTestsc                 C   s2   t  jjdddd}||j |  || _d S NTrV   r   r   rE   rB   )r   r7   r8   rN   rB   rO   rD   r_   r=   r=   r>   r?     s    z AuthenticationBackendTests.setUpr@   c                 C   sL   | j }t }| |jd |j|jdj|j | |jd |j|jdd  d S N)rn   rB   rK   )rD   r#   r[   authenticaterB   r   rE   r;   rD   Zbackendr=   r=   r>   test_auth_by_username	  s    

z0AuthenticationBackendTests.test_auth_by_usernamec                 C   sL   | j }t }| |jd |j|jdj|j | |jd |j|jdd  d S rv  rD   r#   r[   rw  rE   rB   r   rx  r=   r=   r>   test_auth_by_email  s    

z-AuthenticationBackendTests.test_auth_by_emailc                 C   sP   | j }t }| |jd |j|jdj|j | |jd |j|jdj|j d S rv  rz  rx  r=   r=   r>   test_auth_by_username_or_email/  s    

z9AuthenticationBackendTests.test_auth_by_username_or_emailN)r8  r9  r:  r?   r   r!   r;  USERNAMEry  r=  r{  r<  r|  r=   r=   r=   r>   rs     s   

rs  c                   @   s0   e Zd ZejdejddZG dd dej	Z	dS )UUIDUserTF)Zprimary_keydefaultZeditablec                   @   s   e Zd ZdZdS )zUUIDUser.MetaZAUTH_USER_MODELN)r8  r9  r:  Z	swappabler=   r=   r=   r>   MetaF  s   r  N)
r8  r9  r:  r   Z	UUIDFielduuiduuid4rJ  r   r  r=   r=   r=   r>   r~  C  s   r~  c                   @   sP   e Zd Zdd Zdd Zdd Zeddd	d
 Zedddd Zdd Z	dS )
UtilsTestsc                 C   s   t  j| _d S rl   )r  r  hexuser_idr  r=   r=   r>   r?   K  s    zUtilsTests.setUpc                 C   sL   t d0}t|_| t| jt| j W d    n1 s>0    Y  d S )N$allauth.account.utils.get_user_model)r   r~  return_valuer[   r'   r  r  UUID)r;   
mocked_gumr=   r=   r>   0test_url_str_to_pk_identifies_UUID_as_stringlikeN  s    
z;UtilsTests.test_url_str_to_pk_identifies_UUID_as_stringlikec                 C   s(   t dddd}| t|t|j d S rt  )r~  r[   r(   re  r   r_   r=   r=   r>   3test_pk_to_url_string_identifies_UUID_as_stringlikeS  s    z>UtilsTests.test_pk_to_url_string_identifies_UUID_as_stringlikeF)Z ACCOUNT_PRESERVE_USERNAME_CASINGc                 C   s0   t   }t|d | t|d tdd d S )N	CamelCase	camelcaseZFooBarr   r)   r[   r&   r_   r=   r=   r>   test_username_lower_casedW  s    
z$UtilsTests.test_username_lower_casedTc                 C   s0   t   }t|d | t|d tdd d S )Nr  r  Zfoobarr  r_   r=   r=   r>   test_username_case_preserved_  s    
z'UtilsTests.test_username_case_preservedc                 C   sL   t  dd}d}ddg}|D ]*}t|}|td|i}| || qd S )Nzjohn<br/>doerA   zjohn&lt;br/&gt;doez){% load account %}{% user_display user %}z5{% load account %}{% user_display user as x %}{{ x }}rD   )r   r   Zrenderr   r[   )r;   rD   Zexpected_nameZ	templatestemplatetr   r=   r=   r>   test_user_displayg  s    zUtilsTests.test_user_displayN)
r8  r9  r:  r?   r  r  r   r  r  r  r=   r=   r=   r>   r  J  s   

r  c                   @   sR   e Zd ZdddZeddddd Zeddded	ed
eddd ZdS )ConfirmationViewTestsr   r   c                 C   s6   t  jj|dd}|r"|| n|  |  |S r   r   )r;   rB   rK   rD   r=   r=   r>   r   u  s    z"ConfirmationViewTests._create_userT)r   Z#ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATIONc                 C   s   |   }tjj|dddd}t|j}t }t| | j	j
}t||d< |  | j	td|gd}tjj|jd}| |j |jt |j|t jjd	d
td t| d S )Nr"  FTr#  account_userr   r   r   r   rA   )r  rn   r   rD   r  )r   r   r7   r8   r   r   r   r$   r  rP   rx   r(   rO   rQ   r   r^   r   r   rG   r  r   r  r  )r;   rD   rE   r   r  rx   rT   r=   r=   r>   test_login_on_confirm~  s*    

z+ConfirmationViewTests.test_login_on_confirmz#allauth.account.views.perform_loginr  )r  c                 C   s   t dddd}| jj}t||d< |  td|d}d}tt|d	}||_||j_	t
d
d|_	td|& | jtd|gd W d    n1 s0    Y  |jsJ d S )NTrV   r   ru  r  F)rG   rD   Zmockkey)Zautospecr   r   )Zredirect_toz+allauth.account.views.EmailConfirmationHMACr   r   )r~  rP   rx   r(   rO   r   r   rC  Zfrom_keyr  r   r   rQ   r   called)r;   r  Zmock_perform_loginrD   rx   rE   r   r   r=   r=   r>   test_login_on_confirm_uuid_user  s    4z5ConfirmationViewTests.test_login_on_confirm_uuid_userN)r   r   )	r8  r9  r:  r   r   r  r   r~  r  r=   r=   r=   r>   r  t  s   
	

r  c                   @   s   e Zd Zdd ZdS )TestResetPasswordFormc                 C   s<   t  }|jjddddd ddi}t|}| |  d S )Nmike123mike@ixample.orgtest123F)r   rE   r   r7   r4  r   r   r^  r;   rE  r   r   r=   r=   r>   &test_user_email_not_sent_inactive_user  s    z<TestResetPasswordForm.test_user_email_not_sent_inactive_userN)r8  r9  r:  r  r=   r=   r=   r>   r    s   r  c                   @   s8   e Zd Ze dZdd Zdd Zdd Zdd	 Z	d
S )TestCVE2019_19844r   c                 C   s|   t  }|jddd |jddd ddi}t|}| |  || j | t	t
jd | t
jd jdg d S )	Nr  mike@example.orgr  mike456   mıke@example.orgrE   r    r   r   r7   r4  r   r   r^  rO   global_requestr[   r{   r	   r|   r   r  r=   r=   r>   !test_user_email_unicode_collision  s    z3TestCVE2019_19844.test_user_email_unicode_collisionc                 C   s|   t  }|jddd |jddd ddi}t|}| |  || j | t	t
jd | t
jd jdg d S )	Nr  r  r  r     mike@ıxample.orgrE   r    r   r  r  r=   r=   r>   (test_user_email_domain_unicode_collision  s    z:TestCVE2019_19844.test_user_email_domain_unicode_collisionc                 C   s8   t  }|jddd ddi}t|}| |  d S )Nr  r  r  rE   r  r  r  r=   r=   r>   -test_user_email_unicode_collision_nonexistent  s
    z?TestCVE2019_19844.test_user_email_unicode_collision_nonexistentc                 C   s8   t  }|jddd ddi}t|}| |  d S )Nr  r  r  rE   r  r  r  r=   r=   r>   4test_user_email_domain_unicode_collision_nonexistent  s
    zFTestCVE2019_19844.test_user_email_domain_unicode_collision_nonexistentN)
r8  r9  r:  r   r^   r  r  r  r  r  r=   r=   r=   r>   r    s
   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
RequestAjaxTestsc                 K   s&   | j jtdddddddfi |S )Nrd   rc   ra   r   )rP   rQ   r   )r;   r   r=   r=   r>   _send_post_request  s    	z#RequestAjaxTests._send_post_requestc                 C   s,   |   }| d|j | j|tjdd d S )Nrs   FrL   )r  r[   rz   rR   r   r0   r   r=   r=   r>   test_no_ajax_header  s
    z$RequestAjaxTests.test_no_ajax_headerc                 C   s4   | j dd}| d|j | tj| d  d S )Nr   r   r   rt   r  r[   rz   r   r0   r   r   r=   r=   r>   !test_ajax_header_x_requested_with  s    z2RequestAjaxTests.test_ajax_header_x_requested_withc                 C   s4   | j dd}| d|j | tj| d  d S )Nr   )ZHTTP_ACCEPTr   rt   r  r   r=   r=   r>   test_ajax_header_http_accept	  s    z-RequestAjaxTests.test_ajax_header_http_acceptN)r8  r9  r:  r  r  r  r  r=   r=   r=   r>   r    s   r  )R
__future__r   r   r  datetimer   Zdjangor   Zdjango.confr   Zdjango.contrib.auth.modelsr   r   Zdjango.contrib.sites.modelsr   Zdjango.corer	   r
   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.httpr   Zdjango.templater   r   Zdjango.test.clientr   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utils.timezoner   Zallauth.account.formsr   r   r   Zallauth.account.modelsr   r   r   Zallauth.testsr   r   r   Zallauth.utilsr   r   r0  r!   Zadapterr"   Zauth_backendsr#   Zsignalsr$   r%   utilsr&   r'   r(   r)   ZRegexValidatorZtest_username_validatorsr>  r?  r;  r}  r3   r@  r\  ri  rs  r~  r  r  r  r  r  r=   r=   r=   r>   <module>   sr   	       U <!C*G)