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