o
    "4g>                     @   s  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&dd 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( Z0ej1j2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d
S )3    )formsget_user_model)AnonymousUser)MessageMiddleware)SessionMiddleware)mail)ClientRequestFactory)override_settings)reverseN)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'   j/var/www/html/authentication-server/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_attribute6   s   z/CustomSignupFormTests.test_user_class_attributeN)r"   r#   r$   r   r7   rC   r'   r'   r'   r*   r      s    
r   c                   @   sJ   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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_blacklistO   
   z.BaseSignupFormTests.test_username_in_blacklistc                 C   rG   )Ntheusernamer9   rH   Tr;   )r   
assertTruer@   rJ   r'   r'   r*   test_username_not_in_blacklistZ   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_maxlengthe   s   
z+BaseSignupFormTests.test_username_maxlengthN)r"   r#   r$   r   rK   rO   rV   r'   r'   r'   r*   rD   N   s    

rD   c                 C   sv   d| _ d| _ddd}t|dd}| rJ dddd}t|dd}| s)J d|d	< t|dd}| r9J d S )
NTr   r9   rH   r;   zUSER@example.COM)r   r   r   zanotheruser@example.comr   )rE   r   r   r@   )settingsdbrB   r6   r'   r'   r*   test_signup_email_verifications   s    rY   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   rf   primary&_test_signup_email_verified_externallyr1   r   objectsfiltercountrS   r5   rf   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.
        rd   john@example.orgre      Frh   TNrk   rp   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   rw   rx   r'   ry   r'   r'   r*   r{      r|   account_verified_emailr   signup.  locationr   )r
   postr   r   process_requestr   r   rf   sessionallauth.account.viewsr   r   request_contextr1   status_coder   get_signup_redirect_urllenr   outboxr   rm   rS   )r5   signup_emailverified_emailr   rz   r   respr'   r'   r*   rl      s.   


z2SignupTests._test_signup_email_verified_externallyT)rE   r   c                 C   s6   | j jtddddddd}| |jd dd	 d S )
Nrv   ru   rr   janedoer:   )rB   r6   r   z*You must type the same password each time.clientr   r   assertFormErrorr   r5   r   r'   r'   r*   %test_signup_password_twice_form_error   s   	z1SignupTests.test_signup_password_twice_form_error)rE   r   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 )Nrv   ru   rr   )r   r   r   r   r   c                 S   rw   rx   r'   ry   r'   r'   r*   r{      r|   z5SignupTests.test_signup_email_twice.<locals>.<lambda>c                 S   rw   rx   r'   ry   r'   r'   r*   r{      r|   r   r~   r   )r
   r   r   r   r   r   r   rf   r   r   r   r   r   rm   rS   r1   r   )r5   rz   r   rf   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   sJ   | j tdddddd}| |jd d g  | |jd ddg d S )Nrv   ru   rd   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$   rq   rt   rl   r   r   r   r   r'   r'   r'   r*   rc      s*    	


rc   c                 C   s   d| _ tjj| _tjj| _|dddd}t }|	t
dd||jddddd	}|jd
ks0J |d t
dks:J t|d t|d tjjdd dksQJ d S )NTjohnrr   doer   r   passwordrv   ru   r   
mixed_caser:   r   r   account_email_verification_sentz0account/email/account_already_exists_message.txtz,account/messages/email_confirmation_sent.txtr   rg   )ACCOUNT_PREVENT_ENUMERATIONr   AuthenticationMethodEMAILr]   EmailVerificationMethod	MANDATORYr\   r	   r   r   r   r   r   r   rm   rn   ro   rW   user_factoryemail_factoryrf   cr   r'   r'   r*   4test_prevent_enumeration_with_mandatory_verification  s$   

	

r   c                 C   s~   d| _ tjj| _tjj| _|dddd}t }|	t
dd||jdd	ddd
}|jdks0J |jd jddgiks=J d S )NFr   rr   r   r   rv   ru   Tr   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dd
}|jdks0J |d | jks9J tjjdd dksFJ d S )Nstrictr   rr   r   r   rv   ru   Tr   r:   r   r   r   rs   )r   r   r   r   r]   r   NONEr\   r	   r   r   r   r   r`   r   rm   rn   ro   r   r'   r'   r*   !test_prevent_enumeration_strictly@  s    

	r   c                 C   s~   d| _ tjj| _tjj| _|dddd}t }|	t
dd||jddddd	}|jd
ks0J |jd jddgiks=J d S )NTr   rr   r   r   rv   ru   r   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_onT  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   rw   rx   r'   ry   r'   r'   r*   r{   o  r|   z3test_get_initial_with_valid_email.<locals>.<lambda>Nviewr   ztest@example.com)r
   rS   r   r   r   r   r   rf   r   r   context_dataget_initial)rz   r   r   r'   r'   r*   !test_get_initial_with_valid_emaili  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   rv   )r   r   r   r   r   rg   )rE   ACCOUNT_EMAIL_REQUIREDr   r   r   r\   ACCOUNT_USER_MODEL_EMAIL_FIELDr   r   r   r   rm   rS   rj   ri   r   )rW   r   password_factoryrX   
mailoutboxr   r   r   r'   r'   r*   test_signup_user_model_no_emailv  s$   


r   c                 C   s`   t jj|_t jj|_t }|t	dddddd}|j
dks!J tjjdd dks.J d S )	Nrv   ru   zJoHn@DoE.oRgr:   r   zjohn@doe.orgr   rg   )r   r   r   r]   r   r   r\   r	   r   r   r   r   rm   rn   ro   )rX   rW   r   r   r'   r'   r*   test_email_lower_case  s   

	r   c              	   C   sH   d|_ | tddddddd}t j  rJ |jdks"J d S )	Nphone_numberrv   ru   rd   
Password1@
5551231234r   r   r   r   r   r   )"ACCOUNT_SIGNUP_FORM_HONEYPOT_FIELDr   r   r   rm   allexistsr   r   rX   rW   r   r'   r'   r*   2test_does_not_create_user_when_honeypot_filled_out  s   r   c              	   C   sP   d|_ | tddddddd}t jjdd d	ksJ |jd
ks&J d S )Nr   rv   ru   rd   r    r   r   rg   r   )r   r   r   r   rm   rn   ro   r   r   r'   r'   r*   -test_create_user_when_honeypot_not_filled_out  s   
r   )8djangor   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   rY   r   r   r   USERNAMErc   r   r   r   r   mark	django_dbr   r   r   r   r   r'   r'   r'   r*   <module>   sV    7%~
