o
    "4g_4                     @   s   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	 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d"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- ZdS ).    N)patch)reverse)assertTemplateUsed)EmailAddress)SocialAccount)AuthProcessc                 C   s0   d|_ | j|dddtjdd}t|d d S )NF+headless:socialaccount:redirect_to_providerdummyzhttps://unsafe.org/hackprovidercallback_urlprocessdata'socialaccount/authentication_error.html)HEADLESS_ONLYpostr   LOGINr   clientheadless_reversedbsettingsresp r   x/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/headless/socialaccount/tests/test_views.pytest_bad_redirect   s   r   c                 C   s.   | j |dddtjdd}|jdksJ d S )Nr   r	   /r
   r   .  )r   r   r   status_code)r   r   r   r   r   r   r   test_valid_redirect   s   r    c                 C   s   t jj||dd}t jj||dd}| |d}| }|d dks%J t|d dks/J | j|d|j|jd	d
d}|j	dksEJ | ddddg|ddddgdks[J t jj
|jd rgJ t jj
|jd ssJ d S )Np123userr   uidp456'headless:socialaccount:manage_providersstatus   r      r   accountapplication/jsonr   content_typezUnittest ServerzUnittest client_idprovider_redirect)	client_idflowsidname)displayr   r$   )r'   r   )pk)r   objectscreategetjsonlendeleter   r$   r   filterr5   exists)auth_clientr#   r   provider_idaccount_to_delaccount_to_keepr   r   r   r   r   test_manage_providers&   s@   rB   c                 C   sJ   | j |d|dddd}|jdksJ | dddd	gd
ks#J d S )Nr&   unknownr*   r,   r-     account_not_foundzUnknown account.codemessager'   errors)r;   r   r9   )r>   r#   r   r?   r   r   r   r   test_disconnect_bad_requestL   s   
rK   c                 C   s^   t dddd}| j|ddd|itjdd	d
}|jdks!J tjjddd	 s-J d S )N{   a@b.comTr2   emailemail_verified%headless:socialaccount:provider_tokenr	   id_tokenr   tokenr   r,   r-   r(   rO   verified)
r9   dumpsr   r   r   r   r   r6   r<   r=   )r   r   r   rR   r   r   r   r   test_valid_tokenY   "   rX   c                 C   sf   | j |ddd|d d d dtjdd	d
}|jdksJ | }|dddddgdks1J d S )NrQ   googler	   APPSr   r0   )rR   r0   rS   r,   r-   rD   zInvalid token.invalid_tokenrT   )rH   rG   paramrI   )r   r   r   r   r9   )r   r   r   google_provider_settingsr   r   r   r   r   test_invalid_tokenp   s"   
r_   c                 C   s"   d|_ | td}t|d dS )zlAuthentication errors use the regular "Third-Party Login Failure"
    template if headless is not used.
    Fgoogle_callbackr   N)r   r8   r   r   )r   r   r^   r   r   r   r   r   #test_auth_error_no_headless_request   s   ra   c                 C   s:   || ddd}|  tdd|  }|d dksJ dS )	zaAuthentication errors redirect to the next URL with ?error params for
    headless requests.
    T/fooheadlessnextr`   ?state=location&/foo?error=unknown&error_process=loginN)r8   r   )r   r   r^   sociallogin_setup_statestater   r   r   r    test_auth_error_headless_request   s   rk   c                 C   s2   d| _ ddi| _|td}|d dksJ dS )Authentication errors redirect to a fallback error URL for headless-only,
    in case no next can be recovered from the state.
    Tsocialaccount_login_error/3rdparty/failurer`   rg   zDhttp://testserver/3rdparty/failure?error=unknown&error_process=loginNr   HEADLESS_FRONTEND_URLSr8   r   )r   r   r   r^   r   r   r   r   7test_auth_error_no_headless_state_request_headless_only   s   
rq   c                 C   sJ   ||ddd}d| _ ddi| _|tdd|  }|d d	ks#J d
S )rl   Trb   rc   rm   rn   r`   rf   rg   rh   Nro   )r   r   r   r^   ri   rj   r   r   r   r   4test_auth_error_headless_state_request_headless_only   s
   
rr   c                 C   s   t dddd}td#}d|_| j|ddd	|itjd
dd}|jdks)J W d    n1 s3w   Y  tj	j
ddd rDJ d S )NrL   rM   TrN   Lallauth.socialaccount.adapter.DefaultSocialAccountAdapter.is_open_for_signupFrQ   r	   rR   rS   r,   r-     rU   )r9   rW   r   return_valuer   r   r   r   r   r6   r<   r=   )r   r   r   rR   iofsr   r   r   r   test_token_signup_closed   s.   rw   c                 C   s   d|_ d|_d|_tddi}| j|ddd|itjd	d
d}|jdks(J dd | d d D d }|d dks?J | j|dddid
d}|jdksRJ dd | d d D d }|d dksiJ t	j
jdd stJ d S )N	mandatoryTFr2   rL   rQ   r	   rR   rS   r,   r-     c                 S      g | ]	}| d r|qS 
is_pendingr8   .0fr   r   r   
<listcomp>       z(test_provider_signup.<locals>.<listcomp>r   r1   r   provider_signup&headless:socialaccount:provider_signuprO   rM   c                 S   rz   r{   r}   r~   r   r   r   r      r   verify_email)rO   )ACCOUNT_EMAIL_VERIFICATIONACCOUNT_EMAIL_REQUIREDACCOUNT_USERNAME_REQUIREDr9   rW   r   r   r   r   r   r6   r<   r=   )r   r   r   r   rR   r   pending_flowr   r   r   test_provider_signup   s:   r   c                 C   s   d|_ d|_d|_tddi}| j|ddd|itjd	d
d}|jdks(J dd | d d D d }|d dks?J t	d}d|_
| j|dddid
d}W d    n1 s]w   Y  |jdksiJ d S )Nrx   TFr2   rL   rQ   r	   rR   rS   r,   r-   ry   c                 S   rz   r{   r}   r~   r   r   r   r     r   z&test_signup_closed.<locals>.<listcomp>r   r1   r   r   rs   r   rO   rM   rt   )r   r   r   r9   rW   r   r   r   r   r   ru   )r   r   r   r   rR   r   r   rv   r   r   r   test_signup_closed   s@   r   c                 C   sl   ||dddd}|j tdd|  ddid	}|jd
ksJ |d dks'J tjj| ddd s4J d S )Nconnectrb   Tr   re   rd   dummy_authenticaterf   r2   rL   r   r   rg   r	   123r"   )r   r   r   r   r6   r<   r=   )r#   r>   ri   r   r   rj   r   r   r   r   test_connect  s   r   c                 C   sX   d|_ ||dddd}|jtdd|  ddid	}|jd
ks"J |d dks*J d S )NTr   rb   r   r   rf   r2   rL   r   r   rg   z:/foo?error=reauthentication_required&error_process=connect)!ACCOUNT_REAUTHENTICATION_REQUIREDr   r   r   )r#   r>   ri   r   r   r   rj   r   r   r   r   &test_connect_reauthentication_required*  s   r   c           	      C   s   | }t jj|ddd ||tjddd}|jtdd|  d	d
id}|jdks,J |d dks4J t jj| ddd	 rAJ d S )Nr   r	   r#   r$   r   rb   Tr   r   rf   r2   rL   r   r   rg   z0/foo?error=connected_other&error_process=connectr"   )
r   r6   r7   r   CONNECTr   r   r   r<   r=   )	r#   user_factoryr>   ri   r   r   
other_userrj   r   r   r   r   test_connect_already_connected>  s"   

r   c                 C   s^   t dddd}|j|ddd|itjdd	d
}|jdks!J tjjd| d	 s-J d S )NrL   rM   TrN   rQ   r	   rR   rS   r,   r-   r(   r   r$   r#   )
r9   rW   r   r   r   r   r   r6   r<   r=   )r#   r>   r   r   rR   r   r   r   r   test_token_connectV  rY   r   c                 C   s   | }t jj|ddd tdddd}|j|ddd	|itjd
dd}t jjd| d	 r2J |j
dks9J | ddddgdksHJ d S )Nr   r	   r   rL   rM   TrN   rQ   rR   rS   r,   r-   r   rD   connected_otherzDThe third-party account is already connected to a different account.rF   rI   )r   r6   r7   r9   rW   r   r   r   r<   r=   r   )r#   r>   r   r   r   r   rR   r   r   r   r   $test_token_connect_already_connectedm  s4   r   c                 C   s*   | j |dddidd}|jdksJ d S )Nr   rO   rM   r,   r-   i  )r   r   r   r   r   r    test_provider_signup_not_pending  s   r   ) r9   unittest.mockr   django.urlsr   pytest_django.assertsr   allauth.account.modelsr   allauth.socialaccount.modelsr   .allauth.socialaccount.providers.base.constantsr   r   r    rB   rK   rX   r_   ra   rk   rq   rr   rw   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s4    &	$%%