o
    ˷e!                     @   s2  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
 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mZ d dl m!Z! d dl"m#Z#m$Z$m%Z% ddl&m'Z' eddej(j)dG dd de!e$Z*eddddddiidG dd de*Z+dS )     )absolute_importunicode_literals)import_module)	HTTPError)settings)User)mail)RequestFactory)override_settings)reverse)app_settings)get_adapter)EmailAddressEmailConfirmation)user_signed_up)SocialAccountSocialToken)OAuth2TestsMixin)MockedResponseTestCasepatch   )GoogleProviderTN)SOCIALACCOUNT_AUTO_SIGNUPACCOUNT_SIGNUP_FORM_CLASSACCOUNT_EMAIL_VERIFICATIONc                   @   s   e Zd ZejZ					dddZdd	 Zd
d Zdd Z	dd Z
edddd Zdd Zdd Zeejjejjddd Zeejjejjddd ZdS )GoogleTestsPennersRaymondRaymond Pennersraymond.penners@example.comTc              	   C   s    t dd||||t| f S )N   a  
              {"family_name": "%s", "name": "%s",
               "picture": "https://lh5.googleusercontent.com/photo.jpg",
               "locale": "nl", "gender": "male",
               "email": "%s",
               "link": "https://plus.google.com/108204268033311374519",
               "given_name": "%s", "id": "108204268033311374519",
               "verified_email": %s }
        )r   reprlower)selffamily_name
given_namenameemailverified_email r*   c/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/google/tests.pyget_mocked_response!   s   

zGoogleTests.get_mocked_responsec           	   	   C   s   ddl m} G dd dt}t t| jjd tdd}||}|	 
|}tdd	}|d
d}td1}||j_| t |||| W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S )Nr   )GoogleOAuth2Adapterc                   @   s   e Zd Zdd ZdS )zGGoogleTests.test_google_compelete_login_401.<locals>.LessMockedResponsec                 S   s   | j dkr	td d S )Nr!   )status_coder   r$   r*   r*   r+   raise_for_statusC   s   
zXGoogleTests.test_google_compelete_login_401.<locals>.LessMockedResponse.raise_for_statusN)__name__
__module____qualname__r0   r*   r*   r*   r+   LessMockedResponseB   s    r4   _loginloginprocess
some_token)tokeni  ae  
            {"error": {
              "errors": [{
                "domain": "global",
                "reason": "authError",
                "message": "Invalid Credentials",
                "locationType": "header",
                "location": "Authorization" } ],
              "code": 401,
              "message": "Invalid Credentials" }
            }z5allauth.socialaccount.providers.google.views.requests),allauth.socialaccount.providers.google.viewsr-   r   r	   getr   provideriddictget_providerget_appr   r   return_valueassertRaisesr   complete_login)	r$   r-   r4   requestadapterappr:   response_with_401patched_requestsr*   r*   r+   test_google_compelete_login_401=   s.   
"z+GoogleTests.test_google_compelete_login_401c              	   C   sN   d}d}d}|  | j|d | |||dd tjj|d}| |jd d S )	Nu   明u   小r     T)r'   r(   r&   r%   r)   r(   zraymond.penners)r6   r,   r   objectsr<   assertEqualusername)r$   
first_name	last_namer(   userr*   r*   r+   test_username_based_on_emailc   s   
	z(GoogleTests.test_username_based_on_emailc                 C   sd   d}|  | jdd tjj|dd}| tjj|d  |j	j
 d }| |jd d d S )	Nr    Tr)   )r(   verifiedemail_address__emailr   r&   r   )r6   r,   r   rM   r<   assertFalser   filterexistsrR   socialaccount_setallrN   
extra_data)r$   
test_emailemail_addressaccountr*   r*   r+   test_email_verifieds   s   zGoogleTests.test_email_verifiedc                    sD   g  fdd}t |   jdd  tdk d S )Nc                    s8   |d }  |jjtj   |jj| |  d S )Nsociallogin)rN   r`   r=   r   r>   rR   append)senderrE   rR   kwargsrb   r$   sent_signalsr*   r+   on_signed_up   s   z<GoogleTests.test_user_signed_up_signal.<locals>.on_signed_upTrT   r   )r   connectr6   r,   
assertTruelen)r$   rh   r*   rf   r+   test_user_signed_up_signal}   s
   
z&GoogleTests.test_user_signed_up_signalF)ACCOUNT_EMAIL_CONFIRMATION_HMACc                 C   sX   d}|  | jdd}tjj|d}| |j | tjj	|d
  | |d d S )Nr    FrT   rL   rV   z3account/email/email_confirmation_signup_subject.txt)r6   r,   r   rM   r<   rX   rU   rj   r   rY   rZ   assertTemplateUsed)r$   r^   respr_   r*   r*   r+   test_email_unverified   s   z!GoogleTests.test_email_unverifiedc                 C   s   t tj}| }|  |j| jjtj< t	 
d}| jj|_t|}d}||| |j  | | jdd tjj
|d}| |j | tjj|d  d S )N/r    FrT   rL   rV   )r   r   SESSION_ENGINESessionStoresavesession_keyclientcookiesSESSION_COOKIE_NAMEr	   r<   sessionr   stash_verified_emailr6   r,   r   rM   rj   rU   rX   r   rY   rZ   )r$   enginestorerE   rF   r^   r_   r*   r*   r+   test_email_verified_stashed   s    


z'GoogleTests.test_email_verified_stashedc                 C   s   d}t jjdd|d}|d |  tjj||ddd | jj|jdd | j| j	ddd	d
 | 
tjj|tjd  | tjj|d d | tjj||d d d S )Nzuser@example.comrR   T)rO   	is_activer(   test)rR   r(   primaryrU   )rO   passwordrT   ri   r7   )rR   r=   )rR   r   )rR   r(   )r   rM   createset_passwordrt   r   rv   r6   rO   r,   rj   r   rY   r   r>   rZ   rN   count)r$   r(   rR   r*   r*   r+   test_account_connect   s   
 z GoogleTests.test_account_connect)r    SOCIALACCOUNT_EMAIL_VERIFICATIONc                 C   sL   d}|  | jdd tjj|d}| |j | tjj|d	  d S )Nr    FrT   rL   rV   )
r6   r,   r   rM   r<   rX   rU   r   rY   rZ   )r$   r^   r_   r*   r*   r+   &test_social_email_verification_skipped   s   z2GoogleTests.test_social_email_verification_skippedc                 C   sL   |  | jdd | ttjd |  | jdd | ttjd d S )NFrT   r   )r6   r,   rN   rk   r   outboxr/   r*   r*   r+   'test_social_email_verification_optional   s   z3GoogleTests.test_social_email_verification_optionalN)r   r   r   r    T)r1   r2   r3   r   r>   provider_idr,   rJ   rS   ra   rl   r
   rp   r}   r   account_settingsEmailVerificationMethod	MANDATORYNONEr   OPTIONALr   r*   r*   r*   r+   r      s4    
&


	r   googleAPPapp123iddummy)	client_idkeysecret)SOCIALACCOUNT_PROVIDERSc                   @   s   e Zd ZdZdS )AppInSettingsTestszI
    Run the same set of tests but without having a SocialApp entry.
    N)r1   r2   r3   __doc__r*   r*   r*   r+   r      s    r   ),
__future__r   r   	importlibr   requests.exceptionsr   django.confr   django.contrib.auth.modelsr   django.corer   django.test.clientr	   django.test.utilsr
   django.urlsr   allauth.accountr   r   allauth.account.adapterr   allauth.account.modelsr   r   allauth.account.signalsr   allauth.socialaccount.modelsr   r   allauth.socialaccount.testsr   allauth.testsr   r   r   r=   r   r   r   r   r   r*   r*   r*   r+   <module>   sF    6