o
    Lf9                     @   sr  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 d dlmZmZ d d	lmZ d d
l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mZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ G dd de"Z%G dd de"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#d$ Z.d%d& Z/ej0j1d'd( Z2d)d* Z3dS )+    N)formsget_user_model)AnonymousUser)MessageMiddleware)SessionMiddleware)mail)ClientRequestFactory)override_settings)reverse)assertTemplateUsed)app_settings)get_adapter)BaseSignupForm
SignupForm)EmailAddress)context)TestCase)get_username_max_lengthc                   @   s(   e Zd Zeddddd Zdd ZdS )CustomSignupFormTestsT) ACCOUNT_SIGNUP_EMAIL_ENTER_TWICE#ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICEc                    sP   g d G  fdddt j}G dd dt|}| }| t|j   d S )N)emailemail2	password1	password2username	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   )
max_lengthN)__name__
__module____qualname__r   	CharFieldr   r   field_order expected_field_orderr'   b/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/tests/test_signup.pyTestSignupForm(   s    r+   c                   @      e Zd ZdS )zLCustomSignupFormTests.test_custom_form_field_order.<locals>.CustomSignupFormNr"   r#   r$   r'   r'   r'   r*   CustomSignupForm.       r.   )r   Formr   assertEquallistfieldskeys)selfr+   r.   formr'   r(   r*   test_custom_form_field_order   s
   
z2CustomSignupFormTests.test_custom_form_field_orderc                 C   st   ddl m} ddlm} G dd dt}| }ddddd	}||d
d}t|j|s,J |  t|j|s8J d S )Nr   r   )DeferredAttributec                   @   r,   )zICustomSignupFormTests.test_user_class_attribute.<locals>.CustomSignupFormNr-   r'   r'   r'   r*   r.   ;   r/   r.   r   user@example.comzvery-secretr   r   r   r   Temail_required)django.contrib.authr   django.db.models.query_utilsr8   r   
isinstancer   is_valid)r5   r   r8   r.   Userdatar6   r'   r'   r*   test_user_class_attribute7   s   z/CustomSignupFormTests.test_user_class_attributeN)r"   r#   r$   r   r7   rC   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 )BaseSignupFormTestsTr   )ACCOUNT_USERNAME_REQUIREDACCOUNT_USERNAME_BLACKLISTc                 C   (   ddd}t |dd}| |  d S )Nr   r9   r   r   Tr;   )r   assertFalser@   r5   rB   r6   r'   r'   r*   test_username_in_blacklistP   
   z.BaseSignupFormTests.test_username_in_blacklistc                 C   rG   )Ntheusernamer9   rH   Tr;   )r   
assertTruer@   rJ   r'   r'   r*   test_username_not_in_blacklist[   rL   z2BaseSignupFormTests.test_username_not_in_blacklist)rE   c                 C   sV   ddd}t |dd}t }|jd }| |j| |j}| |jdt| d S )Nr   r9   rH   Tr;   	maxlength)	r   r   r3   r1   r!   widgetattrsgetstr)r5   rB   r6   r!   fieldrQ   r'   r'   r*   test_username_maxlengthf   s   
z+BaseSignupFormTests.test_username_maxlengthrE   r   c                 C   sp   ddd}t |dd}| |  dddd}t |dd}| |  d|d< t |dd}| |  d S )	Nr   r9   rH   Tr;   )r   r   r   zanotheruser@example.comr   )r   rI   r@   rN   rJ   r'   r'   r*   test_signup_email_verifications   s   z2BaseSignupFormTests.test_signup_email_verificationN)r"   r#   r$   r   rK   rO   rV   rX   r'   r'   r'   r*   rD   O   s    


rD   httpsz/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_ADAPTERrE   c                   @   sj   e Z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edddidgddd Z	dS )SignupTestsc                 C   s>   |  dd}| tjj|d d tjjdd|dd d S )Njohn@example.comuser   Tverifiedr   re   primary&_test_signup_email_verified_externallyr1   r   objectsfiltercountrS   r5   re   r'   r'   r*   *test_signup_same_email_verified_externally   s   
z6SignupTests.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.
        Email verification is by-passed, their home email address is
        used as a secondary.
        rc   john@example.orgrd      Frg   TNrj   ro   r'   r'   r*   +test_signup_other_email_verified_externally   s   
z7SignupTests.test_signup_other_email_verified_externallyc                 C   s   d}t  td||ddd}tdd | tdd | t |_||jd< dd	l	m
} t| ||}W d    n1 sEw   Y  | |jd
 | |d t | | ttjd t jj|dS )Njohndoeaccount_signupr:   c                 S      d S Nr'   requestr'   r'   r*   <lambda>       zDSignupTests._test_signup_email_verified_externally.<locals>.<lambda>c                 S   rv   rw   r'   rx   r'   r'   r*   rz      r{   account_verified_emailr   signup.  locationr   )r
   postr   r   process_requestr   r   re   sessionallauth.account.viewsr~   r   request_contextr1   status_coder   get_signup_redirect_urllenr   outboxr   rl   rS   )r5   signup_emailverified_emailr   ry   r~   respr'   r'   r*   rk      s.   


z2SignupTests._test_signup_email_verified_externallyT)rE   r   c                 C   sT   | j jtddddddd}tjdkr | |jd d	d
 d S | |dd	d
 d S )Nru   rt   rq   janedoer:   )rB      rf   r6   r   z*You must type the same password each time.clientr   r   djangoVERSIONassertFormErrorr   r5   r   r'   r'   r*   %test_signup_password_twice_form_error   s(   
	z1SignupTests.test_signup_password_twice_form_errorrW   c              	   C   s   t  tddddddd}tdd | tdd | t |_dd	lm	} t
| || W d    n1 s?w   Y  t jjdd
}| |jd d S )Nru   rt   rq   )r   r   r   r   r   c                 S   rv   rw   r'   rx   r'   r'   r*   rz      r{   z5SignupTests.test_signup_email_twice.<locals>.<lambda>c                 S   rv   rw   r'   rx   r'   r'   r*   rz      r{   r   r}   r   )r
   r   r   r   r   r   r   re   r   r~   r   r   r   rl   rS   r1   r   )r5   ry   r~   re   r'   r'   r*   test_signup_email_twice   s$   

z#SignupTests.test_signup_email_twicez>django.contrib.auth.password_validation.MinimumLengthValidator
min_length	   )NAMEOPTIONS)AUTH_PASSWORD_VALIDATORSc                 C   sz   | j tdddddd}tjdkr*| |jd d g  | |jd ddg d S | |dd g  | |dddg d S )	Nru   rt   rc   r:   r   r6   r   zBThis password is too short. It must contain at least 9 characters.r   r   r'   r'   r*   test_django_password_validation   s,   
	z+SignupTests.test_django_password_validationN)
r"   r#   r$   rp   rs   rk   r   r   r   r   r'   r'   r'   r*   rb      s*    	


rb   c                 C   s   d| _ tjj| _tjj| _|dddd}t }|	t
dd|jddd}|jd	ks,J |d
 t
dks6J t|d tjjdd dksHJ d S )NTjohnrq   doer   r   passwordru   rt   r:   r   r   account_email_verification_sentz0account/email/account_already_exists_message.txtr   rf   )ACCOUNT_PREVENT_ENUMERATIONr   AuthenticationMethodEMAILr\   EmailVerificationMethod	MANDATORYr[   r	   r   r   r   r   r   r   rl   rm   rn   settingsuser_factoryre   cr   r'   r'   r*   4test_prevent_enumeration_with_mandatory_verification%  s"   

	
r   c                 C   v   d| _ tjj| _tjj| _|dddd}t }|	t
dd|jddd}|jd	ks,J |jd
 jddgiks9J d S )NFr   rq   r   r   ru   rt   r:      r6   r   5A user is already registered with this email address.)r   r   r   r   r\   r   r   r[   r	   r   r   r   r   r   errorsr   r'   r'   r*   test_prevent_enumeration_off:  "   

	
r   c                 C   s   d| _ tjj| _tjj| _|dddd}t }|	t
dd|jddd}|jd	ks,J |d
 | jks5J tjjdd dksBJ d S )Nstrictr   rq   r   r   ru   rt   r:   r   r   r   rr   )r   r   r   r   r\   r   NONEr[   r	   r   r   r   r   r_   r   rl   rm   rn   r   r'   r'   r*   !test_prevent_enumeration_strictlyO  s    

	r   c                 C   r   )NTr   rq   r   r   ru   rt   r:   r   r6   r   r   )r   r   r   r   r\   r   r   r[   r	   r   r   r   r   r   r   r   r'   r'   r*   test_prevent_enumeration_onc  r   r   c                  C   s   t  d} ddlm} tdd |  t | _t	|  || }W d   n1 s-w   Y  |j
d  d d	ks?J dS )
z:Test that the email field is populated with a valid email.z/signup/?email=test@example.comr   r}   c                 S   rv   rw   r'   rx   r'   r'   r*   rz   ~  r{   z3test_get_initial_with_valid_email.<locals>.<lambda>Nviewr   ztest@example.com)r
   rS   r   r~   r   r   r   re   r   r   context_dataget_initial)ry   r~   r   r'   r'   r*   !test_get_initial_with_valid_emailx  s   
r   c                 C   s   d| _ d| _tjj| _d | _| }d}|td|||d}|j	dks&J t
jj|d}|js2J |jr7J t|dks?J d S )	NFTr9   ru   )r   r   r   r   r   rf   )rE   ACCOUNT_EMAIL_REQUIREDr   r   r   r[   ACCOUNT_USER_MODEL_EMAIL_FIELDr   r   r   r   rl   rS   ri   rh   r   )r   r   password_factorydb
mailoutboxr   r   r   r'   r'   r*   test_signup_user_model_no_email  s$   


r   )4r   r   r=   r   django.contrib.auth.modelsr   "django.contrib.messages.middlewarer   "django.contrib.sessions.middlewarer   django.corer   django.test.clientr	   r
   django.test.utilsr   django.urlsr   pytestpytest_django.assertsr   allauth.accountr   allauth.account.adapterr   allauth.account.formsr   r   allauth.account.modelsr   allauth.corer   allauth.testsr   allauth.utilsr   r   rD   r   r   r   USERNAMErb   r   r   r   r   mark	django_dbr   r   r'   r'   r'   r*   <module>   sR    7< 
