o
    "4gl<                     @   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>d? Z,d@dA Z-dBdC Z.dS )D    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&   p/var/www/html/authentication-server/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   


rI   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 )
NrG   r   TFr   r   r)   rE   z&account/messages/primary_email_set.txt)
r   r   r   r   r   r/   r   rH   r   r   )r#   r   r   r$   r%   r&   r&   r'   test_set_primaryh   s   


rJ   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   
rN   c                 C   s4   |  tdddd tjj|d dksJ d S )Nr   r)   zemail@unknown.orgrK   r   r>   )r/   r   r   r   r   count)r#   r   r&   r&   r'   test_verify_unknown_email   s
   rP   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+   rM   )r   r   r   ACCOUNT_MAX_EMAIL_ADDRESSESr/   r   r   r#   r   r;   r%   r&   r&   r'   test_add_with_two_limiter   s   rT   c                 C   s*   d |_ | tdddd}t|d d S )Nr   r)   r*   r+   rM   rR   r/   r   r   r#   r;   r%   r&   r&   r'   test_add_with_none_limiter   
   rW   c                 C   s*   d|_ | tdddd}t|d d S )Nr   r   r)   r*   r+   rM   rU   rV   r&   r&   r'   test_add_with_zero_limiter   rX   rY   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_primaryrH   r\   )dbrZ   r;   r   r   updated_first_namer&   r&   r'   Ftest_set_email_as_primary_doesnt_override_existing_changes_on_the_user   s    rd   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_coderH   )user_factoryclientemail_factoryr   first_emailother_verified_emailr%   r&   r&   r'   $test_delete_email_changes_user_email   s&   




rp   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 )NFre   r   r   r)   r7   rg   )rh   r   r   r   r   ri   r
   r   r/   r   rj   rH   )rk   rl   r   rn   r%   r&   r&   r'   "test_delete_email_wipes_user_email   s   


rq   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 )NTre   r   r   r)   zchange-to@this.orgr+   rg   r>   r   z/[example.com] Please Confirm Your Email AddressrG   z*allauth.account.signals.email_changed.sendaccount_confirm_emailargsr=   rQ   z[example.com] Email Changed)ACCOUNT_CHANGE_EMAILACCOUNT_EMAIL_CONFIRMATION_HMACr?   rh   r   r   r   r/   r   rj   rA   subjectr	   keyr   r   r"   r@   rO   rH   r   r   calledtor   )
rk   rl   r;   rC   r   current_emailr%   	new_emailrx   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   rM   )r/   r   r   r   r   r   rS   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+   rG   rg   r-   account_reauthenticatez?next=%2Faccounts%2Femail%2FpasswordrM   )	!ACCOUNT_REAUTHENTICATION_REQUIREDr/   r   r   r   r   r@   rj   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}|rS|jdksJ tjj||ddd}t|d	 t|j	}| td
|gd}t|d |jdksHJ |
  |jrQJ d S |jdksZJ |jd jddgiksgJ d S )Nzinuse@byotheruser.comrG   r   r)   r+   rg   Fr   rM   rr   rs   z.account/messages/email_confirmation_failed.txt   r3   r   z5A user is already registered with this email address.)ACCOUNT_PREVENT_ENUMERATIONr/   r   rj   r   r   r   r   r	   rx   rH   r   contextr5   )	r#   r   r;   rk   r   r   r%   email_addressrx   r&   r&   r'   test_add_not_allowed&  s4   




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 )NrG   c                    s   g | ]
}t  |d d dqS )Fr]   )r   ).0r   r   r&   r'   
<listcomp>u  s    z%test_remove_email.<locals>.<listcomp>r   r)   r7   r9   )
r:   r   r   bulk_createrh   r/   r   r   r@   r   )	rl   r;   rk   primary_emailsecondary_emailsdelete_emailauthentication_methodsuccessr%   r&   r   r'   test_remove_emailN  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   ry   )r#   r   did_look_upgfu_mockr&   r&   r'   test_dont_lookup_invalid_email  s   
"r   c                 C   sL   d| _ |tdddd}tjjdd rJ |d tds$J d S )	NTr   r)   r*   r+   rG   r-   r   )r   r/   r   r   r   r   r@   
startswith)r;   r#   r%   r&   r&   r'   "test_add_requires_reauthentication  s   r   c                 C   sd   d|_ tjjd|ddd}| tdd|jd}|d td	s$J tjj|j	d

 s0J d S )NTr   Fr   r   r)   r7   r-   r   r=   )r   r   r   r   r/   r   r   r   r   r"   r@   )r#   r   r;   r$   r%   r&   r&   r'   %test_remove_requires_reauthentication  s   
r   c                 C   s   d|_ tjj|jd}tjjd|ddd}| tdd|jd}|d	 td
s,J |	  |	  |j
s9J |j
r>J d S )NTrG   r   Fr   r   r)   rE   r-   r   )r   r   r   r   r   r   r/   r   r   rH   r   )r#   r   r;   r   r$   r%   r&   r&   r'   *test_set_primary_requires_reauthentication  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   rI   rJ   rN   rP   rT   rW   rY   markparametrizerd   rp   rq   r~   r   r   r   EMAILUSERNAMEUSERNAME_EMAILr   r   r   r   r   r&   r&   r&   r'   <module>   s    

	

 



