o
    h                     @   s   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 Zd	d
 Zdd Zdd Zdd Zdd ZdS )    )ANYpatch)User)EmailAddressEmailConfirmationHMAC)user_logged_in)AuthenticationResponse)Flowc           	   	   C   st   dd }t | z*|j|dd| | ddd}|jdks!J tjjdd	 s,J W t | d S t | w )
Nc                  [   s   | d }t |tsJ d S )Nresponse)
isinstancer   )kwargsr
    r   e/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/headless/account/tests/test_signup.pyon_user_logged_in   s   z&test_signup.<locals>.on_user_logged_inheadless:account:signupwizardusernameemailpasswordapplication/jsondatacontent_type   r   )	r   connectpoststatus_coder   objectsfilterexists
disconnect)	dbclientemail_factorypassword_factorysettingsheadless_reverseheadless_clientr   respr   r   r   test_signup   s   	
	r+   c                 C   s8  d|_ d|_d|_| }|j|d|| ddd}|jdks!J tjj|d	 s,J |	 }	t
d
d |	d d D }
|
d dksEJ tjj|d	}t|j}|j|d|d}|jdksaJ |	 |tdddiddksrJ |j|dd|idd}|jdksJ |	 }	|	d d sJ |  |jsJ d S )N	mandatoryFTr   r   r   r   r     )r   c                 s   s    | ]
}| d r|V  qdS )
is_pendingN)get.0fr   r   r   	<genexpr>A   s    z6test_signup_with_email_verification.<locals>.<genexpr>r   flowsidverify_emailzheadless:account:verify_email)HTTP_X_EMAIL_VERIFICATION_KEYr   )r   useris_authenticating)r   metastatuskeyr;   is_authenticated)ACCOUNT_EMAIL_VERIFICATIONACCOUNT_USERNAME_REQUIRED#ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATIONr   r   r   r   r    r!   jsonnextr   r0   r   r=   r   refresh_from_dbverified)r#   r$   r%   r&   r'   r(   r)   r   r*   r   flowaddrr=   r   r   r   #test_signup_with_email_verification)   sP   	
rH   c	                 C   s   d|_ d|_d|_|j|d|j| ddd}	t|dks J d	|d
 jv s)J |	jdks0J |	 }
dd |
d d D d
 d sEJ |	|d}	|	 }
dd |
d d D d
 d saJ d S )Nr,   FTr   r-   r   r      z2an account using that email address already existsr   r.   c                 S      g | ]}|d  t jkr|qS r6   r	   VERIFY_EMAILr1   r   r   r   
<listcomp>x       z3test_signup_prevent_enumeration.<locals>.<listcomp>r   r5   r/   z headless:account:current_sessionc                 S   rJ   rK   rL   r1   r   r   r   rN   }   rO   )
r?   r@   ACCOUNT_PREVENT_ENUMERATIONr   r   lenbodyr   rB   r0   )r#   r$   r%   r&   r'   r(   r)   r9   
mailoutboxr*   r   r   r   r   test_signup_prevent_enumeration^   s,   rT   c                 C   sp   ddi|_ tdD ],}|j|dd| | | ddd}	|r"d	nd
}
|	j|
ks+J |	 d |
ks5J q	d S )Nsignupz1/m/ip   r   r   r   r   r   i  r   r<   )ACCOUNT_RATE_LIMITSranger   r   rB   )r#   r$   r%   r&   r'   r(   enable_cacher)   attemptr*   expected_statusr   r   r   test_signup_rate_limit   s   

	r\   c           	      C   sv   t d}d|_|j|dd| | ddd}W d    n1 s"w   Y  |jdks.J tjjdd	 r9J d S )
Nz@allauth.account.adapter.DefaultAccountAdapter.is_open_for_signupFr   r   r   r   r   i  r   )r   return_valuer   r   r   r   r    r!   )	r#   r$   r%   r&   r'   r(   r)   iofsr*   r   r   r   test_signup_closed   s    	r_   c                 C   sF   |j |dd| | ddd}|jdksJ | ddiks!J d S )Nr   r   r   r   r   i  r<   )r   r   rB   )r#   auth_clientr%   r&   r'   r(   r)   r*   r   r   r   test_signup_while_logged_in   s   		ra   N)unittest.mockr   r   django.contrib.auth.modelsr   allauth.account.modelsr   r   allauth.account.signalsr   allauth.headless.base.responser   allauth.headless.constantsr	   r+   rH   rT   r\   r_   ra   r   r   r   r   <module>   s    5$