o
    gëf9!  ã                   @   sè   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 d dlmZ d d	lmZ d d
lmZ d dlZG dd„ de
ƒZG dd„ de	ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )Úunicode_literals)Ú
skipUnless)Úsettings)Úreverse)ÚLiveServerTestCaseÚSimpleTestCase)Úoverride_settings)Ú	WebDriver)ÚWebDriverWait)Úodnoklassniki_oauth_sig)ÚUserSocialAuthNc                   @   ó   e Zd Zdd„ ZdS )ÚSignatureTestc                 C   s,   dddddœ}d}d}|   t||ƒ|¡ d S )Nz!cq240efje3pd0gdXUmrvvMaHyb-74XQi8ÚCBAJLNABABABABABAzusers.getCurrentUserÚJSON)Úaccess_tokenÚapplication_keyÚmethodÚformatÚ31D6095131175A7C9656EC2CÚ 755fe7af274abbe545916039eb428c98)ÚassertEqualr   )ÚselfÚdataÚsecretÚ	signature© r   ú`/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/tests/odnoklassniki.pyÚtest_oauth_signature   s   ýz"SignatureTest.test_oauth_signatureN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      ó    r   c                       s8   e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZdd„ Z‡  ZS )ÚOdnoklassnikiLiveTestc                    s   t ƒ | _tt| ƒ ¡  d S ©N)r	   ÚseleniumÚsuperr#   Ú
setUpClass©Úcls©Ú	__class__r   r   r'      s   z OdnoklassnikiLiveTest.setUpClassc                    s   t t| ƒ ¡  | j ¡  d S r$   )r&   r#   ÚtearDownClassr%   Úquitr(   r*   r   r   r,      s   z#OdnoklassnikiLiveTest.tearDownClassc                 C   s   t dƒ‚)NzGThis method is part of interface, but should be implemented in subclass)ÚNotImplementedError©r   r   r   r   Úget_odnoklassniki_name#   s   z,OdnoklassnikiLiveTest.get_odnoklassniki_name)r   r    r!   Úclassmethodr'   r,   r0   Ú__classcell__r   r   r*   r   r#      s    r#   c                   @   sd   e Zd Zeeedƒdƒeeedƒdƒeeedƒdƒdd„ ƒƒƒZd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚBaseOdnoklassnikiAppTestÚODNOKLASSNIKI_APP_IDzDYou need to have ODNOKLASSNIKI_APP_ID in settings to test iframe appÚ"ODNOKLASSNIKI_SANDBOX_DEV_USERNAMEzRYou need to have ODNOKLASSNIKI_SANDBOX_DEV_USERNAME in settings to test iframe appÚ"ODNOKLASSNIKI_SANDBOX_DEV_PASSWORDzRYou need to have ODNOKLASSNIKI_SANDBOX_DEV_PASSWORD in settings to test iframe appc                 C   s$   t j| _t j| _t j| _|  ¡  d S r$   )r   r4   Úapp_idr5   Údev_usernamer6   Údev_passwordr0   r/   r   r   r   ÚsetUp'   s   zBaseOdnoklassnikiAppTest.setUpc                 C   sZ   t | jdƒ dd„ ¡ | j d¡}| | j¡ | j d¡}| | j¡ | j d¡ ¡  d S )Né   c                 S   ó
   |   d¡S ©NÚ
j_username©Úfind_element_by_name©Úffr   r   r   Ú<lambda>4   ó   
 z8BaseOdnoklassnikiAppTest.sandbox_login.<locals>.<lambda>r>   Ú
j_passwordÚactionId)r
   r%   Úuntilr@   Ú	send_keysr8   r9   Úclick)r   Údev_username_inputÚdev_password_inputr   r   r   Úsandbox_login3   s   z&BaseOdnoklassnikiAppTest.sandbox_loginc                 C   s&   | j  d¡ t| j dƒ dd„ ¡ d S )Nz:http://api-sandbox.odnoklassniki.ru:8088/sandbox/logout.dor;   c                 S   r<   r=   r?   rA   r   r   r   rC   =   rD   z9BaseOdnoklassnikiAppTest.sandbox_logout.<locals>.<lambda>)r%   Úgetr
   rG   r/   r   r   r   Úsandbox_logout;   s   z'BaseOdnoklassnikiAppTest.sandbox_logoutc                 C   sF   | j  d¡ |  ¡  t| j dƒ dd„ ¡ | j  d¡j| _|  ¡  d S )NzBhttp://api-sandbox.odnoklassniki.ru:8088/sandbox/protected/main.dor;   c                 S   r<   )NÚfieldset©Úfind_element_by_tag_namerA   r   r   r   rC   B   rD   zABaseOdnoklassnikiAppTest.get_odnoklassniki_name.<locals>.<lambda>z3//*[@id="command"]/fieldset/table/tbody/tr[2]/td[2])	r%   rM   rL   r
   rG   Úfind_element_by_xpathÚtextÚodnoklassniki_namerN   r/   r   r   r   r0   ?   s
   z/BaseOdnoklassnikiAppTest.get_odnoklassniki_namec                 C   s@   | j  d | j¡¡ |  ¡  t| j dƒ dd„ ¡ t d¡ d S )Nzehttp://api-sandbox.odnoklassniki.ru:8088/sandbox/protected/application/launch.do?appId={0:s}&userId=0r;   c                 S   r<   )NÚiframerP   rA   r   r   r   rC   I   rD   z=BaseOdnoklassnikiAppTest.login_into_sandbox.<locals>.<lambda>é   )	r%   rM   r   r7   rL   r
   rG   ÚtimeÚsleepr/   r   r   r   Úlogin_into_sandboxF   s   z+BaseOdnoklassnikiAppTest.login_into_sandboxN)r   r    r!   r   Úhasattrr   r:   rL   rN   r0   rY   r   r   r   r   r3   &   s    
ÿ
ÿ
ÿr3   c                   @   r   )ÚOdnoklassnikiAppTestc                 C   sl   |   ¡  |  tj ¡ d¡ tj ¡ }|j}d |j|j	¡}|  || j
¡ |  d|jv ¡ |  d|jv ¡ d S )NrV   ú{0} {1}ÚapiconnectionÚ
api_server)rY   ÚassertEqualsr   ÚobjectsÚcountrM   Úuserr   Ú
first_nameÚ	last_namerT   Ú
assertTrueÚ
extra_data)r   Úsocial_authrb   Ú	full_namer   r   r   Ú	test_authM   s   
zOdnoklassnikiAppTest.test_authN)r   r    r!   ri   r   r   r   r   r[   L   r"   r[   c                   @   s   e Zd Zedddd„ ƒZdS )ÚOdnoklassnikiAppTestExtraData©ÚgenderÚbirthdayÚage)Ú&ODNOKLASSNIKI_APP_EXTRA_USER_DATA_LISTc                    sh   |   ¡  |  tj ¡ d¡ tj ¡ ‰ ˆ j}d |j|j	¡}|  || j
¡ |  t‡ fdd„dD ƒƒ¡ d S )NrV   r\   c                    s   g | ]}|ˆ j v ‘qS r   )rf   )Ú.0Úfield©Úsocial_userr   r   Ú
<listcomp>`   s    zAOdnoklassnikiAppTestExtraData.test_extra_data.<locals>.<listcomp>rk   )rY   r_   r   r`   ra   rM   rb   r   rc   rd   rT   re   Úall©r   rb   rh   r   rr   r   Útest_extra_dataX   s   
 z-OdnoklassnikiAppTestExtraData.test_extra_dataN)r   r    r!   r   rw   r   r   r   r   rj   W   s    rj   c                   @   s\   e Zd Zeeedƒdƒeeedƒdƒeeedƒdƒdd„ ƒƒƒZd	d
„ Zdd„ Zdd„ Z	dS )ÚOdnoklassnikiOAuthTestÚODNOKLASSNIKI_OAUTH2_CLIENT_KEYzXYou need to have ODNOKLASSNIKI_OAUTH2_CLIENT_KEY in settings to test odnoklassniki OAuthÚODNOKLASSNIKI_TEST_USERNAMEzTYou need to have ODNOKLASSNIKI_TEST_USERNAME in settings to test odnoklassniki OAuthÚODNOKLASSNIKI_TEST_PASSWORDzTYou need to have ODNOKLASSNIKI_TEST_PASSWORD in settings to test odnoklassniki OAuthc                 C   s   t j| _t j| _|  ¡  d S r$   )r   rz   Úusernamer{   Úpasswordr0   r/   r   r   r   r:   c   s   zOdnoklassnikiOAuthTest.setUpc                    s  | j  d¡ t| j dƒ dd„ ¡ | j  d¡}| | j¡ | j  d¡}| | j¡ | j  d¡ ¡  d‰ t| j d	ƒ ‡ fd
d„¡ | j  	ˆ ¡j
| _dd„ | j  d¡D ƒ}|  t|ƒdk¡ |d  ¡  t| j d	ƒ dd„ ¡ | j  	d¡ ¡  t| j d	ƒ dd„ ¡ d S )Nzhttp://www.odnoklassniki.ru/r;   c                 S   r<   ©NÚfield_email©Úfind_element_by_idrA   r   r   r   rC   q   rD   z?OdnoklassnikiOAuthTest.get_odnoklassniki_name.<locals>.<lambda>r   Úfield_passwordÚhook_FormButton_button_goz>#hook_Block_MiddleColumnTopCardUser .mctc_name>a.mctc_nameLinké   c                    s
   |   ˆ ¡S r$   )Úfind_element_by_css_selectorrA   ©Úname_css_selr   r   rC   y   rD   c                 S   s   g | ]	}|j d kr|‘qS )u
   Ð²Ñ‹Ñ…Ð¾Ð´)rS   )rp   Úelr   r   r   rt   |   s    zAOdnoklassnikiOAuthTest.get_odnoklassniki_name.<locals>.<listcomp>z.portal-headline__login__linkrV   r   c                 S   s   |   d¡o|   d¡ ¡ S )NÚ hook_Form_PopLayerLogoffUserForm)r   Úis_displayedrA   r   r   r   rC   €   s    z#hook_FormButton_button_logoffc                 S   r<   r~   r€   rA   r   r   r   rC   ƒ   rD   )r%   rM   r
   rG   r   rH   r|   r}   rI   r…   rS   rT   Úfind_elements_by_css_selectorre   Úlen)r   Úemail_inputÚpw_inputÚlinkr   r†   r   r0   n   s    z-OdnoklassnikiOAuthTest.get_odnoklassniki_namec                 C   s¸   t ddd}| j d | j|¡¡ t| jdƒ dd„ ¡ | j d¡}| j d	¡}| | j	¡ | | j
¡ | j d
¡ ¡  t| jdƒ dd„ ¡ | j d¡ ¡  | j d¡ t d¡ d S )NÚsocialauth_begin)Úodnoklassniki)Úargsz
{0:s}{1:s}r„   c                 S   r<   r~   r€   rA   r   r   r   rC   ˆ   rD   zAOdnoklassnikiOAuthTest.login_into_odnoklassniki.<locals>.<lambda>r   r‚   Úbutton_continuec                 S   r<   )NÚbutton_accept_requestr?   rA   r   r   r   rC   Ž   rD   r”   rV   )r   r%   rM   r   Úlive_server_urlr
   rG   r   rH   r|   r}   r@   rI   Úimplicitly_waitrW   rX   )r   Úurlr   rŽ   r   r   r   Úlogin_into_odnoklassniki…   s   z/OdnoklassnikiOAuthTest.login_into_odnoklassnikic                 C   sH   |   ¡  |  tj ¡ d¡ tj ¡ j}d |j|j	¡}|  || j
¡ d S )NrV   r\   )r˜   r_   r   r`   ra   rM   rb   r   rc   rd   rT   rv   r   r   r   ri   ”   s
   z OdnoklassnikiOAuthTest.test_authN)
r   r    r!   r   rZ   r   r:   r0   r˜   ri   r   r   r   r   rx   b   s    
ÿ
ÿ
ÿrx   )Ú
__future__r   Úunittestr   Údjango.confr   Údjango.core.urlresolversr   Údjango.test.testcasesr   r   Údjango.test.utilsr   Ú$selenium.webdriver.firefox.webdriverr	   Úselenium.webdriver.support.uir
   Ú*social_auth.backends.contrib.odnoklassnikir   Úsocial_auth.modelsr   rW   r   r#   r3   r[   rj   rx   r   r   r   r   Ú<module>   s"   
&