o
    ˷e.                     @   s4  d dl mZ zd dlmZ W n ey   d dlmZ Y nw 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mZmZ d dlmZ ddlmZ e ZeeddZdddZ G dd de
Z!dddZ"eedG dd de
Z#G dd de
Z$dS )    )Decimal)mock)get_user_model)ValidationError)TestCase)RequestFactory)override_settings)VCR)PayPalFailure)CreditCardField)VERSIONPayPalError	PayPalWPPstrip_ip_port	PayPalPro   )	TEMPLATESz.yaml)path_transformerNc                 C   s    t jddd}| d ur| |_|S )Nz/pay/z127.0.0.1:8000)REMOTE_ADDR)RFgetuser)r   request r   P/var/www/ideatree/venv/lib/python3.10/site-packages/paypal/pro/tests/test_pro.pymake_request   s   r   c                   @   s   e Zd Zdd Zdd ZdS )CreditCardFieldTestc                 C   s4   t  }|d | |jd | tt  jd d S )N4797503429879309Visa1234567890123455)r   cleanassertEqual	card_typeassertRaisesr   )selffieldr   r   r   test_CreditCardField$   s   
z(CreditCardFieldTest.test_CreditCardFieldc                 C   s   |  t dd d S )Nz4797-5034-2987-9309r   )r"   r   r!   r%   r   r   r   test_invalidCreditCards*   s   z+CreditCardFieldTest.test_invalidCreditCardsN)__name__
__module____qualname__r'   r)   r   r   r   r   r   #   s    r   c                 C   s:   dddddd}|d u rdd }t |d	d
d|d}|| S )Nz10.00	inventorytrackingzhttp://foo.com/cancelzhttp://foo.com/return)paymentrequest_0_amtinvcustom	cancelurl	returnurlc                 S   s   | S Nr   nvpr   r   r   <lambda>8   s    zppp_wrapper.<locals>.<lambda>zpayment.htmlzconfirmation.html	/success/)itempayment_templateconfirm_templatesuccess_urlnvp_handlerr   )r   handlerr9   pppr   r   r   ppp_wrapper.   s    r@   c                   @   s^   e Zd Ze dd Ze dd Ze dd Ze ej	j
eddd	d
d ZdS )PayPalProTestc                 C   s,   t td}| |d | |jd d S )N/zShow me the money   )r@   r   r   assertContainsr"   status_coder%   responser   r   r   test_getF   s   zPayPalProTest.test_getc                 C   s&   t tdddi}| |jd d S )NrB   express1.  )r@   r   r   r"   rE   rF   r   r   r   test_get_redirectL   s   zPayPalProTest.test_get_redirectc                 C   sD   t tdddd}| |jd | |jddtjd  d S )	NrB   123456tokenPayerIDrC   errors 
processing)	r@   r   postr"   rE   context_datar   r   rR   rF   r   r   r    test_validate_confirm_form_errorQ   s    z.PayPalProTest.test_validate_confirm_form_errordoExpressCheckoutPaymentTautospecc                    sj   ddi}||_ g   fdd}ttdddd|d	}| |jd
 | |d d | t d d S )Nr   Tc                    s     |  d S r4   )appendr5   receivedr   r   r>   _   s   z<PayPalProTest.test_validate_confirm_form_ok.<locals>.handlerrB   rM   rN   rO   )r>   rK   Locationr8   r   )return_valuer@   r   rU   r"   rE   len)r%   rX   r6   r>   rG   r   r\   r   test_validate_confirm_form_okW   s   z+PayPalProTest.test_validate_confirm_form_okN)r*   r+   r,   vcruse_cassetterH   rL   rW   r   patchobjectr   ra   r   r   r   r   rA   D   s    


rA   c                   @   s  e Zd Zdd Zdd Ze dd Ze dd Ze d	d
 Z	e dd Z
e dd Ze ejjeddddd Ze ejjeddddd Ze ejjeddddd Ze ejjeddddd Ze ejjeddddd Zdd ZdS )PayPalWPPTestc                 C   s,   ddddddd| _ ddddddd| _d S )	N9.95r0   r1   zhttp://www.example.com/next/zhttp://www.example.com/pay/zhttp://www.example.com/cancel/)amtr0   r1   nextr3   r2   )r/   r0   r1   ri   r3   r2   )r9   ec_itemr(   r   r   r   setUpi   s   
zPayPalWPPTest.setUpc                 C   s   ddddddddd	d
dddS )NBraveStarz	1 Main Stu	   San JoséCAUS951314032039938039650112021rS   visa
10.0.1.199)	firstnamelastnamestreetcitystatecountrycodezipacctexpdatecvv2creditcardtype	ipaddressr   r(   r   r   r   get_valid_doDirectPayment_data}   s   z,PayPalWPPTest.get_valid_doDirectPayment_datac                 C   s&   t t }ddi}| t|j| d S )Nru   	Chewbacca)r   r   r$   r   doDirectPaymentr%   wppdatar   r   r   #test_doDirectPayment_missing_params   s   
z1PayPalWPPTest.test_doDirectPayment_missing_paramsc                 C   sV   t t }|  }|| j ||}| | dD ]\}}| |j| | qd S )N))avscodeX)rh   rg   )correlationid1025431f33d89)currencycodeUSD)ackSuccess)	r   r   r   updater9   r   assertIsNotNoner"   response_dict)r%   r   r   r6   kvr   r   r   test_doDirectPayment_valid   s   


z(PayPalWPPTest.test_doDirectPayment_validc                 C   sR   t  }|jjdd}tt|d}|  }|| j ||}| 	|j
| d S )Ntestuser)username)r   )r   objectscreater   r   r   r   r9   r   r"   r   )r%   Userr   r   r   npm_objr   r   r   'test_doDirectPayment_authenticated_user   s   
z5PayPalWPPTest.test_doDirectPayment_authenticated_userc                 C   sH   t t }ddddddddd	d
ddd}|| j | t|j| d S )NEpicFailz100 Georgia St	VancouverBCrn   zV6V 1V1012019999
1234567890rs   rt   )ru   rv   rw   rx   ry   rz   r{   r}   r~   r|   r   r   )r   r   r   r9   r$   r
   r   r   r   r   r   test_doDirectPayment_invalid   s    
z*PayPalWPPTest.test_doDirectPayment_invalidc                 C   s(   t t }|| j}| |jd d S )Nr   )r   r   setExpressCheckoutrj   r"   r   )r%   r   nvp_objr   r   r   test_setExpressCheckout   s   
z%PayPalWPPTest.test_setExpressCheckout_requestTrY   c                 C   s   d}d}| j  }|||d d|t| j d |_tt }|| |j	}| 
dt |d d  | 
d	|d d  | 
d
| |d d  | 
d|d  |d d  | 
d| |d d  d S )NEC-1234567890LXYZABC1234rP   payeridz3ack=Success&token={}&version={}paymentinfo_0_amt={}r/   VERSION=r   r   zMETHOD=DoExpressCheckoutPaymentzTOKEN=zPAYMENTREQUEST_0_AMT=zPAYERID=)rj   copyr   formatr   r_   r   r   rX   	call_argsassertIn)r%   mock_request_objectec_tokenr   r9   r   r   r   r   r   test_doExpressCheckoutPayment   s"   


z+PayPalWPPTest.test_doExpressCheckoutPaymentc                 C   sl   d}d}| j  }|||d d|_tt }| t || W d    d S 1 s/w   Y  d S )Nr   r   r   0ack=Failure&l_errorcode=42&l_longmessage0=Broken)	rj   r   r   r_   r   r   r$   r
   rX   )r%   r   r   r   r9   r   r   r   r   %test_doExpressCheckoutPayment_invalid   s   

"z3PayPalWPPTest.test_doExpressCheckoutPayment_invalidc                 C   s   dt  |_tt }|ddi}|j}| dt  |d d  | d|d d  | d|d d  | |jd	 | |j	d
 d|_| 
t |ddi}W d    d S 1 s_w   Y  d S )Nz/ack=Success&billingagreementid=B-XXXXX&version=rP   zdummy tokenr   r   r   zMETHOD=CreateBillingAgreementzTOKEN=dummy+tokenCreateBillingAgreementr   r   )r   r_   r   r   createBillingAgreementr   r   r"   methodr   r$   r
   )r%   r   r   r6   r   r   r   r   test_createBillingAgreement   s   
"z)PayPalWPPTest.test_createBillingAgreementc                 C   s   d}t d}d|t|f |_tt }|||d}|j}| dt |d d  | d|d d  | d	| |d d  | d
| |d d  | |j	d | |j
d d S )NB-123410.50zKack=Success&paymentstatus=Completed&amt=%s&version=%s&billingagreementid=%sreferenceidrh   r   r   r   zMETHOD=DoReferenceTransactionzREFERENCEID=zAMT=DoReferenceTransactionr   )r   r   r_   r   r   doReferenceTransactionr   r   r"   r   r   )r%   r   reference_idamountr   r6   r   r   r   r   !test_doReferenceTransaction_valid   s   
z/PayPalWPPTest.test_doReferenceTransaction_validc                 C   s\   d}t d}d|_tt }| t |||d W d    d S 1 s'w   Y  d S )Nr   r   r   r   )r   r_   r   r   r$   r
   r   )r%   r   r   r   r   r   r   r   #test_doReferenceTransaction_invalid  s   
"z1PayPalWPPTest.test_doReferenceTransaction_invalidc                 C   s   d}d}d}| d| }|  |t| |}|  |t| d| d| }|  |t| |}|  |t| |  dtd d S )Nz192.168.0.1z'2001:0db8:85a3:0000:0000:8a2e:0370:73348000:[z]:rS   )r"   r   )r%   IPv4IPv6PORTtestr   r   r   test_strip_ip_port  s   z PayPalWPPTest.test_strip_ip_portN)r*   r+   r,   rk   r   rb   rc   r   r   r   r   r   r   rd   re   r   r   r   r   r   r   r   r   r   r   r   rf   h   s:    


	


rf   r4   )%decimalr   unittestr   ImportErrordjango.contrib.authr   django.formsr   django.testr   django.test.clientr   django.test.utilsr   rb   r	   paypal.pro.exceptionsr
   paypal.pro.fieldsr   paypal.pro.helpersr   r   r   r   paypal.pro.viewsr   settingsr   r   ensure_suffixr   r   r@   rA   rf   r   r   r   r   <module>   s2   

#