o
    Lf4                     @   s  d dl Z d dlmZ d dlmZ d dlmZ d dl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
 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jd!d"d#gd$d% Z d&d' Z!d(d) Z"d*d+ Z#d,d- Z$d.d/ Z%ejd0g d1d2d3 Z&ejd4ej'd5d6gd5d#fej'd5d6gd6d"fej'd5g d5d#fej(d5d6gd5d#fej(d5d6gd6d"fej(d5g d5d"fej)d5d6gd5d#fej)d5d6gd6d"fej)d5g d5d"fg	d7d8 Z*ejd9d:d;gd<d= Z+dS )>    N)patch)get_user_model)reverse)assertTemplateNotUsedassertTemplateUsed)AuthenticationMethod)EmailAddressEmailConfirmationHMAC)
user_emailc                 C   s~   t jj|d }t jjd|ddd}| jtddd}t|j	
d}|d	 |j|jd
d
d|j|jdddgks=J d S )Nusersecondary@email.orgFemailr   verifiedprimaryaccount_emailXMLHttpRequestHTTP_X_REQUESTED_WITHutf8dataT)idr   r   r   )r   objectsfilterfirstcreategetr   jsonloadscontentdecodepkr   )auth_clientr   r   	secondaryrespr    r&   h/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/tests/test_change_email.pytest_ajax_get   s(   r(   c                 C   sD   | j tdddddd}t|jd}|d tdks J d S )	Nr    john3@example.org
action_addr   r   r   r   locationpostr   r   r   r    r!   r#   r%   r   r&   r&   r'   test_ajax_add(   s   r1   c                 C   sP   | j tdddddd}t|jd}d|d	 d
 d d d v s&J d S )Nr   r)   zjohn3#example.orgr+   r   r   r   validformfieldsr   errorsr   r.   r0   r&   r&   r'   test_ajax_add_invalid2   s   $r6   c                 C   sV   d|_ | jtdd|jddd}t|d t|jd}|d	 tdks)J d S )
Nr   r   r)   action_remover   r   r   0account/messages/cannot_delete_primary_email.txtr   r-   )	ACCOUNT_AUTHENTICATION_METHODr/   r   r   r   r   r   r    r!   )r#   r   settingsr%   r   r&   r&   r'   test_ajax_remove_primary<   s   

r<   c                 C   s   d|_ tjjd|ddd}| tdd|jd}tjj|jd	 r%J t
|d	 t|d
ks2J |j d|d jv s?J d S )NTr   Fr   r   r)   r7   r   z"account/messages/email_deleted.txt   z has been removedr   )ACCOUNT_EMAIL_NOTIFICATIONSr   r   r   r/   r   r   r   r"   existsr   lenbody)r#   r   r;   
mailoutboxr$   r%   r&   r&   r'   test_remove_secondaryH   s   

rD   c                 C   sf   t jjd|ddd}| tdd|jd}t jj|jd}|  |jr'J |js,J t	|d d S )	Nr   Fr   r   r)   action_primaryr   r=   z-account/messages/unverified_primary_email.txt)
r   r   r   r/   r   r   r   refresh_from_dbr   r   )r#   r   r$   r%   r   r&   r&   r'   test_set_primary_unverifiedY   s   


rH   c                 C   sn   t jj|jd}t jjd|ddd}| tdd|jd}|  |  |jr+J |js0J t	|d	 d S )
Nr=   r   TFr   r   r)   rE   z&account/messages/primary_email_set.txt)
r   r   r   r   r   r/   r   rG   r   r   )r#   r   r   r$   r%   r&   r&   r'   test_set_primaryh   s   


rI   c                 C   s:   t jjd|ddd}| tdd|jd}t|d d S )Nr   Fr   r   r)   action_sendr   ,account/messages/email_confirmation_sent.txt)r   r   r   r/   r   r   r   )r#   r   r$   r%   r&   r&   r'   test_verifyx   s   
rM   c                 C   s4   |  tdddd tjj|d dksJ d S )Nr   r)   zemail@unknown.orgrJ   r   r>   )r/   r   r   r   r   count)r#   r   r&   r&   r'   test_verify_unknown_email   s
   rO   c                 C   s>   t jjd|ddd d|_| tdddd}t|d	 d S )
Nr   Fr      r   r)   r*   r+   rL   )r   r   r   ACCOUNT_MAX_EMAIL_ADDRESSESr/   r   r   r#   r   r;   r%   r&   r&   r'   test_add_with_two_limiter   s   rS   c                 C   s*   d |_ | tdddd}t|d d S )Nr   r)   r*   r+   rL   rQ   r/   r   r   r#   r;   r%   r&   r&   r'   test_add_with_none_limiter   
   rV   c                 C   s*   d|_ | tdddd}t|d d S )Nr   r   r)   r*   r+   rL   rT   rU   r&   r&   r'   test_add_with_zero_limiter   rW   rX   has_email_fieldTFc                 C   sp   |sd |_ t jjddd}tjj|dddd}d}t jj|jdj|d	 |  |	  |j
|ks6J d S )
Nz@raymond.pennerszBefore Update)username
first_namezraymond.penners@example.comTr   r   r   r   Updated)r   )r[   )ACCOUNT_USER_MODEL_EMAIL_FIELDr   r   r   r   r   r   updateset_as_primaryrG   r[   )dbrY   r;   r   r   updated_first_namer&   r&   r'   Ftest_set_email_as_primary_doesnt_override_existing_changes_on_the_user   s    rc   c                 C   s   | dd}| | tjj|d}d|_|  tjj|| ddd tjj|| ddd}t||jks7J |	t
dd|jd}|jd	ksJJ |  t||jksWJ d S )
NFemail_verifiedr   )r   r   r   r   Tr   r)   r7   .  )force_loginr   r   r   r   saver   r
   r   r/   r   status_coderG   )user_factoryclientemail_factoryr   first_emailother_verified_emailr%   r&   r&   r'   $test_delete_email_changes_user_email   s&   




ro   c                 C   s   | dd}| | tjj|d}d|_|  t||jks!J |t	dd|jd}|j
dks4J |  t|dks@J d S )NFrd   r   r   r)   r7   rf   )rg   r   r   r   r   rh   r
   r   r/   r   ri   rG   )rj   rk   r   rm   r%   r&   r&   r'   "test_delete_email_wipes_user_email   s   


rp   c           
      C   sp  d|_ d|_d|_| dd}|| tjj|d}|tdddd}|j	dks,J t
|d	ks4J |d
 jdks=J tjjdd}t|j}td}	|td|gd}W d    n1 sbw   Y  |j	dksnJ tjj|jd rzJ tjj|d d	ksJ |  |jsJ |jsJ |	jsJ t
|dksJ |d	 jdksJ |d	 j|jgksJ d S )NTrd   r   r   r)   zchange-to@this.orgr+   rf   r>   r   z/[example.com] Please Confirm Your Email Addressr=   z*allauth.account.signals.email_changed.sendaccount_confirm_email)args)r"   rP   z[example.com] Email Changed)ACCOUNT_CHANGE_EMAILACCOUNT_EMAIL_CONFIRMATION_HMACr?   rg   r   r   r   r/   r   ri   rA   subjectr	   keyr   r   r"   r@   rN   rG   r   r   calledtor   )
rj   rk   r;   rC   r   current_emailr%   	new_emailrv   email_changed_mockr&   r&   r'   test_change_email   s8   






r|   c                 C   s8   |  tdddd}tjjd|ddd t|d d S )Nr   r)   r*   r+   Fr   rL   )r/   r   r   r   r   r   rR   r&   r&   r'   test_add  s   r}   c                 C   s   d|_ | tdddd}tjjdd rJ |jdks J |d td	d
 ks,J | |d d|i}tjjdd sAJ t|d |jdksMJ |d tdksWJ d S )NTr   r)   r*   r+   r=   rf   r-   account_reauthenticatez?next=%2Femail%2FpasswordrL   )	!ACCOUNT_REAUTHENTICATION_REQUIREDr/   r   r   r   r   r@   ri   r   )r#   r   user_passwordr;   r%   r&   r&   r'   test_add_with_reauthentication  s   
r   prevent_enumeration)FTstrictc                 C   s   ||_ d}||d | tdd|d}|dkr1|jdks J tjj||ddd	 t|d
 d S |jdks8J |jd j	ddgiksEJ d S )Nzinuse@byotheruser.comr=   r   r)   r+   r   rf   Fr   rL      r3   r   z5A user is already registered with this email address.)
ACCOUNT_PREVENT_ENUMERATIONr/   r   ri   r   r   r   r   contextr5   )r#   r   r;   rj   r   r   r%   r&   r&   r'   test_add_not_allowed#  s(   

r   zIauthentication_method,primary_email,secondary_emails,delete_email,successz	pri@ma.ilz	sec@ma.ilc           	         s|   ||_ ||d tj fdd|D  |   | tdd|d}tjj|d | ks3J |s<t	|d d S d S )Nr=   c                    s   g | ]
}t  |d d dqS )Fr\   )r   ).0r   r   r&   r'   
<listcomp>l  s    z%test_remove_email.<locals>.<listcomp>r   r)   r7   r9   )
r:   r   r   bulk_createrg   r/   r   r   r@   r   )	rk   r;   rj   primary_emailsecondary_emailsdelete_emailauthentication_methodsuccessr%   r&   r   r'   test_remove_emailE  s    $


r   zemail,did_look_up)zvalid@email.orgT)znot-an-emailFc                 C   sZ   t d}tj|_| tdd|d |j|ksJ W d    d S 1 s&w   Y  d S )Nz7allauth.account.views.EmailAddress.objects.get_for_userr   r)   r7   )r   r   DoesNotExistside_effectr/   r   rw   )r#   r   did_look_upgfu_mockr&   r&   r'   test_dont_lookup_invalid_email{  s   
"r   ),r   unittest.mockr   django.contrib.authr   django.urlsr   pytestpytest_django.assertsr   r   allauth.account.app_settingsr   allauth.account.modelsr   r	   allauth.account.utilsr
   r(   r1   r6   r<   rD   rH   rI   rM   rO   rS   rV   rX   markparametrizerc   ro   rp   r|   r}   r   r   EMAILUSERNAMEUSERNAME_EMAILr   r   r&   r&   r&   r'   <module>   s    

	


