B
    µWvg,B  ã               @   sš   d dl mZmZ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mZ d dlmZ G dd	„ d	ejƒZG d
d„ deƒZG dd„ deƒZdS )é    )Ú	MagicMockÚPropertyMockÚpatch)Ú	HTTPError)Úforms)ÚImproperlyConfigured)ÚTestCaseÚoverride_settings)ÚfieldsÚwidgets)ÚRecaptchaResponsec               @   s   e Zd Ze ¡ ZdS )ÚDefaultFormN)Ú__name__Ú
__module__Ú__qualname__r
   ÚReCaptchaFieldÚcaptcha© r   r   úP/tmp/pip-install-rz9cpaf4/django-recaptcha/django_recaptcha/tests/test_fields.pyr      s   r   c               @   sT   e Zd Zedƒdd„ ƒZedƒdd„ ƒZdd„ Zedƒdd	„ ƒZed
ƒdd„ ƒZdS )Ú
TestFieldsz%django_recaptcha.fields.client.submitc             C   s.   t dd�|_ddi}t|ƒ}|  | ¡ ¡ d S )NT)Úis_validzg-recaptcha-responseÚPASSED)r   Úreturn_valuer   Ú
assertTruer   )ÚselfÚmocked_submitÚform_paramsÚformr   r   r   Útest_client_success_response   s    z'TestFields.test_client_success_responsec             C   s2   t ddgd�|_ddi}t|ƒ}|  | ¡ ¡ d S )NFZ410)r   Zerror_codeszg-recaptcha-responser   )r   r   r   ÚassertFalser   )r   r   r   r   r   r   r   Útest_client_failure_response   s
    z'TestFields.test_client_failure_responsec          	   C   s,   |   t¡� G dd„ dtjƒ}W d Q R X d S )Nc               @   s   e Zd Zejejd�ZdS )z2TestFields.test_widget_check.<locals>.ImporperForm)ÚwidgetN)r   r   r   r
   r   r   ZTextarear   r   r   r   r   ÚImporperForm$   s   r"   )ZassertRaisesr   r   ÚForm)r   r"   r   r   r   Útest_widget_check!   s    zTestFields.test_widget_checkc             C   sd   t dd�|_G dd„ dtjƒ}ddi}||ƒ}|  | ¡ ¡ |jddd d� | ¡ }|  d	|¡ d S )
NT)r   c               @   s   e Zd Zejddd�ZdS )z@TestFields.test_field_instantiate_values.<locals>.NonDefaultFormÚNewUpdatedKeyZ	NewPubKey)Úprivate_keyZ
public_keyN)r   r   r   r
   r   r   r   r   r   r   ÚNonDefaultForm+   s   r'   zg-recaptcha-responser   r%   )r&   Zrecaptcha_responseZremoteipzdata-sitekey="NewPubKey")	r   r   r   r#   r   r   Zassert_called_withÚas_pÚassertIn)r   r   r'   r   r   Úhtmlr   r   r   Útest_field_instantiate_values'   s    z(TestFields.test_field_instantiate_valuesz)django_recaptcha.client.recaptcha_requestc             C   sˆ   t ƒ }d|j_||_ddi}t|ƒ}|  | ¡ ¡ |  |jd dg¡ tddd dd	d
�|_	t|ƒ}|  | ¡ ¡ |  |jd dg¡ d S )NsT   {"success": false, "error-codes":["invalid-input-response", "invalid-input-secret"]}zg-recaptcha-responser   r   z,Error verifying reCAPTCHA, please try again.z/https://www.google.com/recaptcha/api/siteverifyiš  ZOopsÚ )ÚurlÚcodeÚfpÚmsgÚhdrs)
r   Úreadr   r   r   r   ZassertEqualÚerrorsr   Zside_effect)r   Zmocked_responseZ	read_mockr   r   r   r   r   Útest_field_captcha_errors;   s$    
z$TestFields.test_field_captcha_errorsN)	r   r   r   r   r   r    r$   r+   r4   r   r   r   r   r      s
   	r   c               @   sR  e Zd Zeded�dd„ ƒZeded�dd„ ƒZedd�d	d
„ ƒZeded�dd„ ƒZ	eded�dd„ ƒZ
edd�dd„ ƒZeded�dd„ ƒZeded�dd„ ƒZeded�dd„ ƒZedd�dd„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒd d!„ ƒZedƒd"d#„ ƒZedƒed$d%�d&d'„ ƒƒZedƒed(d%�d)d*„ ƒƒZd+S ),ÚTestWidgetsz&django_recaptcha.widgets.uuid.UUID.hex)Znew_callablec             C   sš   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d	| |¡ |  d
|¡ |  d| |¡ d S )NZ 928e8e017b114e1b9d3a3e877cfc5844c               @   s   e Zd Ze ¡ ZdS )zCTestWidgets.test_default_v2_checkbox_html.<locals>.DefaultCheckFormN)r   r   r   r
   r   r   r   r   r   r   ÚDefaultCheckForm^   s   r6   z?<script src="https://www.google.com/recaptcha/api.js"></script>zdata-size="normal"zclass="g-recaptcha"zdata-callback="onSubmit_%s"Úrequiredzdata-widget-uuid="%s"zdata-sitekey="pubkey"z#var onSubmit_%s = function(token) {)r   r   r#   r(   r)   )r   Úmocked_uuidÚtest_hexr6   r   r*   r   r   r   Útest_default_v2_checkbox_htmlY   s    z)TestWidgets.test_default_v2_checkbox_htmlc             C   s²   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d|¡ |  d	|¡ |  d
|¡ |  d| |¡ |  d|¡ |  d| |¡ d S )NZ e83ccae286ad4784bd47f7ddc40cfd6fc               @   s.   e Zd Zejejddddœddid�d�Zd	S )
zMTestWidgets.test_v2_checkbox_attribute_changes_html.<locals>.CheckboxAttrFormÚdarkZcustomCallbackÚcompact)z
data-themezdata-callbackz	data-sizeÚhlÚaf)ÚattrsÚ
api_params)r!   N)r   r   r   r
   r   r   ÚReCaptchaV2Checkboxr   r   r   r   r   ÚCheckboxAttrForms   s   rB   zE<script src="https://www.google.com/recaptcha/api.js?hl=af"></script>zdata-theme="dark"zdata-callback="onSubmit_%s"zdata-callback="customCallback"zdata-size="compact"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#var onSubmit_%s = function(token) {)r   r   r#   r(   r)   ÚassertNotIn)r   r8   r9   rB   r   r*   r   r   r   Ú'test_v2_checkbox_attribute_changes_htmln   s"    z3TestWidgets.test_v2_checkbox_attribute_changes_htmlzwww.recaptcha.net)ZRECAPTCHA_DOMAINc             C   s0   G dd„ dt jƒ}|ƒ }| ¡ }|  d|¡ d S )Nc               @   s   e Zd Zeje ¡ d�ZdS )zDTestWidgets.test_default_v2_checkbox_domain_html.<locals>.DomainForm)r!   N)r   r   r   r
   r   r   rA   r   r   r   r   r   Ú
DomainForm‘   s   rE   zB<script src="https://www.recaptcha.net/recaptcha/api.js"></script>)r   r#   r(   r)   )r   rE   r   r*   r   r   r   Ú$test_default_v2_checkbox_domain_html�   s    z0TestWidgets.test_default_v2_checkbox_domain_htmlc             C   sº   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d|¡ |  d	| |¡ |  d
|¡ |  d| |¡ |  d| |¡ |  d| |¡ d S )NZ 72f853eb8b7e4022b808be0f5c3bc297c               @   s   e Zd Zeje ¡ d�ZdS )z=TestWidgets.test_default_v2_invisible_html.<locals>.InvisForm)r!   N)r   r   r   r
   r   r   ÚReCaptchaV2Invisibler   r   r   r   r   Ú	InvisForm    s   rH   z?<script src="https://www.google.com/recaptcha/api.js"></script>zdata-size="invisible"zdata-callback="onSubmit_%s"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#var onSubmit_%s = function(token) {z$var verifyCaptcha_%s = function(e) {z#.g-recaptcha[data-widget-uuid="%s"])r   r   r#   r(   r)   )r   r8   r9   rH   r   r*   r   r   r   Útest_default_v2_invisible_html›   s     z*TestWidgets.test_default_v2_invisible_htmlc             C   sÒ   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d	|¡ |  d
|¡ |  d| |¡ |  d|¡ |  d| |¡ |  d| |¡ |  d| |¡ d S )NZ 8b220c54ddb849b8bb59bda5da57baeac               @   s.   e Zd Zejejddddœddid�d�Zd	S )
zKTestWidgets.test_v2_invisible_attribute_changes_html.<locals>.InvisAttrFormr;   ÚcustomCallbackInvisr<   )z
data-themezdata-callbackz	data-sizer=   Úcl)r?   r@   )r!   N)r   r   r   r
   r   r   rG   r   r   r   r   r   ÚInvisAttrForm·   s   rL   zE<script src="https://www.google.com/recaptcha/api.js?hl=cl"></script>zdata-size="compact"zdata-size="invisible"zdata-callback="onSubmit_%s"z#data-callback="customCallbackInvis"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#var onSubmit_%s = function(token) {z$var verifyCaptcha_%s = function(e) {z#.g-recaptcha[data-widget-uuid="%s"])r   r   r#   r(   r)   rC   )r   r8   r9   rL   r   r*   r   r   r   Ú(test_v2_invisible_attribute_changes_html²   s&    z4TestWidgets.test_v2_invisible_attribute_changes_htmlc             C   s0   G dd„ dt jƒ}|ƒ }| ¡ }|  d|¡ d S )Nc               @   s   e Zd Zeje ¡ d�ZdS )zJTestWidgets.test_default_v2_invisible_domain_html.<locals>.InvisDomainForm)r!   N)r   r   r   r
   r   r   rG   r   r   r   r   r   ÚInvisDomainForm×   s   rN   zB<script src="https://www.recaptcha.net/recaptcha/api.js"></script>)r   r#   r(   r)   )r   rN   r   r*   r   r   r   Ú%test_default_v2_invisible_domain_htmlÕ   s    z1TestWidgets.test_default_v2_invisible_domain_htmlc             C   s²   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d	|¡ |  d
| |¡ |  d|¡ |  d| |¡ |  d|¡ d S )NÚ c7a86421ca394661acccea374931d260c               @   s   e Zd Zeje ¡ d�ZdS )z3TestWidgets.test_default_v3_html.<locals>.InvisForm)r!   N)r   r   r   r
   r   r   ÚReCaptchaV3r   r   r   r   r   rH   æ   s   rH   zM<script src="https://www.google.com/recaptcha/api.js?render=pubkey"></script>Úlabelzdata-size="normal"zdata-callback="onSubmit_%s"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#.g-recaptcha[data-widget-uuid="%s"]Úaction)r   r   r#   r(   r)   rC   )r   r8   r9   rH   r   r*   r   r   r   Útest_default_v3_htmlá   s"    z TestWidgets.test_default_v3_htmlc             C   s²   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d	|¡ |  d
| |¡ |  d|¡ |  d| |¡ |  d|¡ d S )NrP   c               @   s    e Zd Zejejdd�d�ZdS )z?TestWidgets.test_default_v3_html_with_action.<locals>.InvisFormZneedle)rS   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rH     s   rH   zM<script src="https://www.google.com/recaptcha/api.js?render=pubkey"></script>rR   zdata-size="normal"zdata-callback="onSubmit_%s"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#.g-recaptcha[data-widget-uuid="%s"]zaction: 'needle')r   r   r#   r(   r)   rC   )r   r8   r9   rH   r   r*   r   r   r   Ú test_default_v3_html_with_actioný   s"    z,TestWidgets.test_default_v3_html_with_actionc             C   s¦   d}||_ G dd„ dtjƒ}|ƒ }| ¡ }|  d|¡ |  d|¡ |  d| |¡ |  d|¡ |  d|¡ |  d	|¡ |  d
| |¡ |  d|¡ |  d| |¡ d S )NZ f367f89a797a4985acd986275b3df22fc               @   s.   e Zd Zejejddddœddid�d�Zd	S )
zATestWidgets.test_v3_attribute_changes_html.<locals>.InvisAttrFormr;   rJ   r<   )z
data-themezdata-callbackz	data-sizer=   rK   )r?   r@   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rL      s   rL   zS<script src="https://www.google.com/recaptcha/api.js?render=pubkey&hl=cl"></script>zdata-size="compact"zdata-callback="onSubmit_%s"z#data-callback="customCallbackInvis"zclass="g-recaptcha"r7   zdata-widget-uuid="%s"zdata-sitekey="pubkey"z#.g-recaptcha[data-widget-uuid="%s"])r   r   r#   r(   r)   rC   )r   r8   r9   rL   r   r*   r   r   r   Útest_v3_attribute_changes_html  s     z*TestWidgets.test_v3_attribute_changes_htmlc             C   s0   G dd„ dt jƒ}|ƒ }| ¡ }|  d|¡ d S )Nc               @   s   e Zd Zeje ¡ d�ZdS )zATestWidgets.test_default_v3_domain_html.<locals>.VThreeDomainForm)r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   ÚVThreeDomainForm>  s   rW   zP<script src="https://www.recaptcha.net/recaptcha/api.js?render=pubkey"></script>)r   r#   r(   r)   )r   rW   r   r*   r   r   r   Útest_default_v3_domain_html<  s    z'TestWidgets.test_default_v3_domain_htmlz%django_recaptcha.fields.client.submitc             C   sF   G dd„ dt jƒ}tdddid�|_ddi}||ƒ}|  | ¡ ¡ d S )	Nc               @   s$   e Zd Zejejddid�d�ZdS )zETestWidgets.test_client_success_response_v3.<locals>.VThreeDomainFormÚrequired_scoregš™™™™™é?)r?   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   K  s   rW   TÚscoregÍÌÌÌÌÌì?)r   Ú
extra_datar   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Útest_client_success_response_v3I  s    z+TestWidgets.test_client_success_response_v3c             C   sF   G dd„ dt jƒ}tdddid�|_ddi}||ƒ}|  | ¡ ¡ d S )	Nc               @   s$   e Zd Zejejddid�d�ZdS )zETestWidgets.test_client_failure_response_v3.<locals>.VThreeDomainFormrY   gš™™™™™é?)r?   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   Y  s   rW   TrZ   gš™™™™™¹?)r   r[   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Útest_client_failure_response_v3W  s    z+TestWidgets.test_client_failure_response_v3c             C   sF   G dd„ dt jƒ}tdddid�|_ddi}||ƒ}|  | ¡ ¡ d S )	Nc               @   s   e Zd Zeje ¡ d�ZdS )zJTestWidgets.test_client_empty_score_threshold_v3.<locals>.VThreeDomainForm)r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   g  s   rW   TrZ   gš™™™™™¹?)r   r[   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Ú$test_client_empty_score_threshold_v3e  s    z0TestWidgets.test_client_empty_score_threshold_v3c             C   sH   G dd„ dt jƒ}tdddidd�|_dd	i}||ƒ}|  | ¡ ¡ d S )
Nc               @   s    e Zd Zejejdd�d�ZdS )zCTestWidgets.test_client_invalid_action_v3.<locals>.VThreeDomainFormr   )rS   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   s  s   rW   TrZ   gš™™™™™¹?Zsomething_unexpected)r   r[   rS   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Útest_client_invalid_action_v3q  s    z)TestWidgets.test_client_invalid_action_v3c             C   sH   G dd„ dt jƒ}tdddidd�|_dd	i}||ƒ}|  | ¡ ¡ d S )
Nc               @   s    e Zd Zejejdd�d�ZdS )zATestWidgets.test_client_valid_action_v3.<locals>.VThreeDomainFormr   )rS   )r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW     s   rW   TrZ   gš™™™™™¹?r   )r   r[   rS   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Útest_client_valid_action_v3}  s    z'TestWidgets.test_client_valid_action_v3g        )ZRECAPTCHA_REQUIRED_SCOREc             C   sF   G dd„ dt jƒ}tdddid�|_ddi}||ƒ}|  | ¡ ¡ d S )	Nc               @   s   e Zd Zeje ¡ d�ZdS )zGTestWidgets.test_required_score_human_setting.<locals>.VThreeDomainForm)r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   Œ  s   rW   TrZ   g333333ë?)r   r[   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Ú!test_required_score_human_setting‰  s    z-TestWidgets.test_required_score_human_settingg333333ë?c             C   sF   G dd„ dt jƒ}tdddid�|_ddi}||ƒ}|  | ¡ ¡ d S )	Nc               @   s   e Zd Zeje ¡ d�ZdS )zETestWidgets.test_required_score_bot_setting.<locals>.VThreeDomainForm)r!   N)r   r   r   r
   r   r   rQ   r   r   r   r   r   rW   ™  s   rW   TrZ   r   )r   r[   r   r   )r   r#   r   r   r   r   )r   r   rW   r   r   r   r   r   Útest_required_score_bot_setting–  s    z+TestWidgets.test_required_score_bot_settingN)r   r   r   r   r   r:   rD   r	   rF   rI   rM   rO   rT   rU   rV   rX   r\   r]   r^   r_   r`   ra   rb   r   r   r   r   r5   X   s&   !#!r5   N)Zunittest.mockr   r   r   Úurllib.errorr   Zdjangor   Zdjango.core.exceptionsr   Zdjango.testr   r	   Zdjango_recaptchar
   r   Zdjango_recaptcha.clientr   r#   r   r   r5   r   r   r   r   Ú<module>   s   H