U
    ÝÁ]Á  ã                   @   sr   d Z ddlZddlZddlZddlmZ ddlm  mZ	 G dd„ de	j
ƒZG dd„ dejƒZedkrne ¡  dS )	zTests for certbot.eff.é    N)Ú	constantsc                       sº   e Zd ZdZ‡ fdd„Zdd„ Ze ¡ e 	d¡dd„ ƒƒZ
e 	d¡d	d
„ ƒZe ¡ e 	d¡dd„ ƒƒZdd„ Ze ¡ e 	d¡dd„ ƒƒZdd„ Ze ¡ e 	d¡dd„ ƒƒZdd„ Z‡  ZS )ÚHandleSubscriptionTestz*Tests for certbot.eff.handle_subscription.c                    s*   t t| ƒ ¡  d| _| j| j_d | j_d S )Núcertbot@example.org)Úsuperr   ÚsetUpÚemailÚconfigÚ	eff_email©Úself©Ú	__class__© ú8/usr/lib/python3/dist-packages/certbot/tests/eff_test.pyr      s    
zHandleSubscriptionTest.setUpc                 C   s   ddl m} || jƒS )Nr   )Úhandle_subscription)Úcertbot.effr   r   )r   r   r   r   r   Ú_call   s    zHandleSubscriptionTest._callzcertbot.eff.subscribec                 C   s\   d | j _d| j _|  ¡  |  |j¡ |  |ƒ jj¡ |ƒ jjd d }d}|  	||k¡ d S )NTr   z,because you didn't provide an e-mail address)
r   r   r	   r   ÚassertFalseÚcalledÚyesnoÚadd_messageÚ	call_argsÚ
assertTrue)r   Úmock_subscribeÚmock_get_utilityÚactualÚexpected_partr   r   r   Útest_failure   s    z#HandleSubscriptionTest.test_failurec              	   C   s>   d| j _t ¡ }|  ¡  W 5 Q R X |  |j¡ |  |¡ d S ©NF)r   r	   Ú	test_utilÚpatch_get_utilityr   r   r   Ú_assert_no_get_utility_calls©r   r   r   r   r   r   Ú test_no_subscribe_with_no_prompt#   s
    
z7HandleSubscriptionTest.test_no_subscribe_with_no_promptc                 C   s(   d| j _|  ¡  |  |¡ |  |¡ d S ©NT)r   r	   r   Ú_assert_subscribedr!   r"   r   r   r   Útest_subscribe_with_no_prompt+   s    
z4HandleSubscriptionTest.test_subscribe_with_no_promptc                 C   s$   |   |ƒ jj¡ |   |ƒ jj¡ d S ©N)r   r   r   r   ©r   r   r   r   r   r!   3   s    z3HandleSubscriptionTest._assert_no_get_utility_callsc                 C   s:   d|ƒ j _|  ¡  |  |¡ |  |ƒ jj¡ |  |¡ d S r$   )r   Úreturn_valuer   r%   r   r   r   Ú_assert_correct_yesno_callr"   r   r   r   Útest_subscribe_with_prompt7   s
    

z1HandleSubscriptionTest.test_subscribe_with_promptc                 C   s(   |   |j¡ |  |jd d | j¡ d S ©Nr   )r   r   ÚassertEqualr   r   )r   r   r   r   r   r%   @   s    z)HandleSubscriptionTest._assert_subscribedc                 C   s<   d|ƒ j _|  ¡  |  |j¡ |  |ƒ jj¡ |  |¡ d S r   )r   r)   r   r   r   r   r*   r"   r   r   r   Útest_no_subscribe_with_promptD   s
    
z4HandleSubscriptionTest.test_no_subscribe_with_promptc                 C   sN   |   |ƒ jj¡ |ƒ jj\}}|d }d}|   ||k¡ |  | dd¡¡ d S )Nr   zElectronic Frontier FoundationÚdefaultT)r   r   r   r   r   Úget)r   r   r   Úcall_kwargsr   r   r   r   r   r*   M   s    z1HandleSubscriptionTest._assert_correct_yesno_call)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    ÚmockÚpatchr   r#   r&   r!   r+   r%   r.   r*   Ú__classcell__r   r   r   r   r      s(   

r   c                   @   sŠ   e Zd ZdZdd„ Ze d¡dd„ ƒZdd„ Ze	 
¡ d	d
„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZdd„ Ze	 
¡ dd„ ƒZdS )ÚSubscribeTestz Tests for certbot.eff.subscribe.c                 C   s.   d| _ ddi| _tjdd| _| j| jj_d S )Nr   ÚstatusT)Úok)r   Újsonr6   ZMockÚresponser)   r
   r   r   r   r   X   s    
zSubscribeTest.setUpzcertbot.eff.requests.postc                 C   s,   | j |_ddlm} || jƒ |  |¡ d S )Nr   )Ú	subscribe)r=   r)   r   r>   r   Ú_check_post_call)r   Ú	mock_postr>   r   r   r   r   ^   s    
zSubscribeTest._callc                 C   sZ   |   |jd¡ |j\}}|   |d tj¡ | d¡}|  |d k¡ |   | d¡| j¡ d S )Né   r   Údatar   )r-   Z
call_countr   r   ZEFF_SUBSCRIBE_URIr0   r   r   )r   r@   r   r1   rB   r   r   r   r?   f   s    

zSubscribeTest._check_post_callc                 C   s2   d| j d< |  ¡  |  |¡}d}|  ||k¡ d S )NFr:   z2because your e-mail address appears to be invalid.)r<   r   Ú_get_reported_messager   ©r   r   r   r   r   r   r   Útest_bad_statuso   s
    

zSubscribeTest.test_bad_statusc                 C   s>   d| j _tjj| j j_|  ¡  |  |¡}d}|  	||k¡ d S )NFZbecause)
r=   r;   ÚrequestsÚ
exceptionsZ	HTTPErrorZraise_for_statusÚside_effectr   rC   r   )r   r   r   Zunexpected_partr   r   r   Útest_not_okw   s    
zSubscribeTest.test_not_okc                 C   s4   t ƒ | jj_|  ¡  |  |¡}d}|  ||k¡ d S ©NZproblem)Ú
ValueErrorr=   r<   rH   r   rC   r   rD   r   r   r   Útest_response_not_json€   s
    
z$SubscribeTest.test_response_not_jsonc                 C   s2   | j  ¡  |  ¡  |  |¡}d}|  ||k¡ d S rJ   )r<   Úclearr   rC   r   rD   r   r   r   Ú)test_response_json_missing_status_elementˆ   s
    

z7SubscribeTest.test_response_json_missing_status_elementc                 C   s"   |   |ƒ jj¡ |ƒ jjd d S r,   )r   r   r   r   r(   r   r   r   rC      s    z#SubscribeTest._get_reported_messagec                 C   s   |   ¡  |  |j¡ d S r'   )r   r   r   r(   r   r   r   Útest_subscribe”   s    zSubscribeTest.test_subscribeN)r2   r3   r4   r5   r   r6   r7   r   r?   r   r    rE   rI   rL   rN   rC   rO   r   r   r   r   r9   V   s    
	



r9   Ú__main__)r5   Zunittestr6   rF   Zcertbotr   Zcertbot.tests.utilZtestsÚutilr   ZConfigTestCaser   ZTestCaser9   r2   Úmainr   r   r   r   Ú<module>   s   KD