o
    ˷eG                     @   s  d dl Z d dl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 d d
lmZmZ d dlmZ d dlmZ dZdZi dddddddeddddddddddd d!d"d#d$dd%d&d'd(d)d*d+ed,d-d.d/d*d0d*d1d2d3d4d4d5dd6d7dd0d8ZG d9d: d:ZG d;d< d<eZG d=d> d>Zed?d@G dAdB dBeee
Zed?d@G dCdD dDeee
Z ed?d@G dEdF dFee
Z!ed?d@G dGdH dHe
Z"dS )I    N)datetime)Decimal)	urlencode)settings)TestCase)override_settings)timezone)	PayPalIPN)invalid_ipn_receivedvalid_ipn_received)CONTENT_TYPE_ERROR)ST_PP_CANCELLEDs   seller@paypalsandbox.comzwindows-1252protection_eligibility
   Ineligible	last_names   Usertxn_ids   51403485VH153354Breceiver_emailpayment_status	   Completedpayment_grosss   10.00tax   0.00residence_countrys   USinvoices   0004payer_status   verifiedtxn_types   express_checkouthandling_amountpayment_date   23:04:06 Feb 02, 2009 PST
first_name   Jrg	item_name    charsetasciicustoms   website_id=13&user_id=21s   2.6   1s   258DLEHY2BDK6s   BN5JZ2V7MLEV4s8   An5ns1Kso7MWUdW4ErQKJJJ4qi4-AqdZy6dD.sGO3sDhTf1wAbuO2IZ7s   0.59s   USDs   bishan_1233269544_per@gmail.com   instant)notify_versiontransaction_subjecttest_ipnitem_numberreceiver_idpayer_idverify_signpayment_feemc_feemc_currencyshippingpayer_emailpayment_typemc_grossquantityc                       (   e Zd Z fddZ fddZ  ZS )ResetIPNSignalsMixinc                    s*   t    tj| _tj| _g t_g t_d S N)supersetUpr   	receiversvalid_ipn_received_receiversr
   invalid_ipn_received_receiversself	__class__ Y/var/www/ideatree/venv/lib/python3.10/site-packages/paypal/standard/ipn/tests/test_ipn.pyr<   <   s
   

zResetIPNSignalsMixin.setUpc                    s   | j t_| jt_t   d S r:   )r>   r   r=   r?   r
   r;   tearDownr@   rB   rD   rE   rF   D   s   zResetIPNSignalsMixin.tearDown__name__
__module____qualname__r<   rF   __classcell__rD   rD   rB   rE   r9   ;   s    r9   c                   @   s(   e Zd Zdd ZefddZdd ZdS )IPNUtilsMixinc                    s8   dd   fdd|  D }t|}| jjd|ddS )zU
        Does an HTTP POST the way that PayPal does, using the params given.
        c                 S   s   t | tr
| tS | S r:   )
isinstancestrencodeCHARSET)vrD   rD   rE   <lambda>R   s    z+IPNUtilsMixin.paypal_post.<locals>.<lambda>c                    s   i | ]\}} | |qS rD   rD   ).0krQ   cond_encoderD   rE   
<dictcomp>S   s    z-IPNUtilsMixin.paypal_post.<locals>.<dictcomp>/ipn/!application/x-www-form-urlencodedcontent_type)itemsr   clientpost)rA   paramsbyte_params	post_datarD   rU   rE   paypal_postL   s   zIPNUtilsMixin.paypal_postc                    s   d _ d  _ fdd}||  |} |jd tj } t	|d |d } |j
|   j    j| |S )NFc                    s   d _ |  _d S )NT)
got_signal
signal_obj)senderkwargsr@   rD   rE   handle_signal\   s   
z4IPNUtilsMixin.assertGotSignal.<locals>.handle_signal      r   )rc   rd   connectrb   assertEqualstatus_coder	   objectsalllenflag
assertTrue)rA   signalflaggedr_   rg   responseipnsipn_objrD   r@   rE   assertGotSignalW   s   


zIPNUtilsMixin.assertGotSignalc                 C   sX   t  }|| | |}| |jd tj d }| |j	d | |j
| |S )Nrh   r   T)IPN_POST_PARAMScopyupdaterb   rk   rl   r	   rm   rn   rp   	flag_info)rA   updatesr{   r_   rt   rv   rD   rD   rE   assertFlaggedm   s   

zIPNUtilsMixin.assertFlaggedN)rH   rI   rJ   rb   rx   rw   r}   rD   rD   rD   rE   rL   K   s    rL   c                       r8   )MockedPostbackMixinc                    s    t    tj| _dd t_d S )Nc                 S      dS Ns   VERIFIEDrD   r@   rD   rD   rE   rR   }       z+MockedPostbackMixin.setUp.<locals>.<lambda>)r;   r<   r	   	_postbackold_postbackr@   rB   rD   rE   r<   y   s   
zMockedPostbackMixin.setUpc                    s   | j t_t   d S r:   )r   r	   r   r;   rF   r@   rB   rD   rE   rF      s   zMockedPostbackMixin.tearDownrG   rD   rD   rB   rE   r~   x   s    r~   z#paypal.standard.ipn.tests.test_urls)ROOT_URLCONFc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )IPNTestc                 C   J   |  td}| |jd | |jtddddddtjrtj	nd d	 d S )
NF   Jörg                 tzinfo)
rw   r   rk   r    r   r   r   USE_TZr   utcrA   rv   rD   rD   rE   test_valid_ipn_received   s    zIPNTest.test_valid_ipn_receivedc                 C   s   dd t _| td d S )Nc                 S   r   )Ns   INVALIDrD   r@   rD   rD   rE   rR      r   z3IPNTest.test_invalid_ipn_received.<locals>.<lambda>T)r	   r   rw   r
   r@   rD   rD   rE   test_invalid_ipn_received   s   
z!IPNTest.test_invalid_ipn_receivedc                 C   sp   dd t _| t t j d }| |jd dd t _|  | |jd | |j	d | |j
d d S )Nc                 S   r   Ns   Internal Server ErrorrD   r@   rD   rD   rE   rR      r   z+IPNTest.test_reverify_ipn.<locals>.<lambda>r   Tc                 S   r   r   rD   r@   rD   rD   rE   rR      r   F )r	   r   rb   rx   rm   rn   rk   rp   verifyr{   	flag_coder   rD   rD   rE   test_reverify_ipn   s   


zIPNTest.test_reverify_ipnc                 C   s   ddi}d}|  || d S )Nr   Failurez!Invalid payment_status. (Failure)r}   )rA   rz   r{   rD   rD   rE   test_invalid_payment_status   s   z#IPNTest.test_invalid_payment_statusc                 C   sR   dt i}t }|| | |}| |jd tj	 d }| |j
d d S )Nr   rh   r   F)r   rx   ry   rz   rb   rk   rl   r	   rm   rn   rp   )rA   rz   r_   rt   rv   rD   rD   rE   "test_vaid_payment_status_cancelled   s   

z*IPNTest.test_vaid_payment_status_cancelledc                 C   s\   |  t |  t | ttj d tjddd }| |jd | |j	d d S )Nr   z-created_atz-pkr   Tz%Duplicate txn_id. (51403485VH153354B))
rb   rx   rk   ro   r	   rm   rn   order_byrp   r{   r   rD   rD   rE   test_duplicate_txn_id   s   

zIPNTest.test_duplicate_txn_idc                 C   st   dd t _| t dd t _| t | tt j d t jdd}| |d j	d | |d	 j	d
 d S )Nc                 S   r   r   rD   r@   rD   rD   rE   rR      r   zBIPNTest.test_duplicate_txn_id_with_first_flagged.<locals>.<lambda>c                 S   r   r   rD   r@   rD   rD   rE   rR      r   r   
created_atpkr   Tri   F)
r	   r   rb   rx   rk   ro   rm   rn   r   rp   )rA   ipn_objsrD   rD   rE   (test_duplicate_txn_id_with_first_flagged   s   



z0IPNTest.test_duplicate_txn_id_with_first_flaggedc                 C   s   i ddddddddd	d
ddddddddddddddddddddddddi dd d!d"d#d$d%d&d'd(d)d*d+dd,dd-d.d/d0d1d2d3d4d5dd6d7d8d9d:dd;dd"dd<d=d>d?}|  | tj }| |jd3 d@ | |jd	 dA d S )BNbtn_id1s   3453595businesss   email-facilitator@gmail.comr$   s   windows-1252r&   s   blahblahr    r!   ipn_track_ids   a48170aadb705
item_name1s   Romanescoinsitem_number1r#   r   s   LASTNAMEr2   s   EURr1   s   0.35r6   s   3.00
mc_gross_1mc_handlingr   mc_handling1mc_shippingmc_shipping1r)   s   3.8num_cart_itemsr'   r4   s   email@gmail.comr.   s   6EQ6SKDFMPU36r   r   r   s   03:06:57 Jun 27, 2014 PDTr0   r   r   r   r5   r(   r   r   	quantity1   3r   r-   s   UCWM6R2TARF36r   s   FRr   tax1s   KW31266C37C2593K4s   carts   A_SECRET_CODE)r+   r*   r   r   r/   3r   )rb   r	   rm   getrk   posted_data_dict)rA   r_   ipnrD   rD   rE   test_posted_params_attribute   s   	
 !"#
)
z$IPNTest.test_posted_params_attributec                 C   sF   dddddddd}t  }|| | | | tj j d S )Nr   s   23:04:06 Jan 02, 2009 PSTs   01:13:05 Nov 01, 2015 PSTs   01:13:05 Nov 01, 2015 PDT)next_payment_datesubscr_datesubscr_effectiveauction_closing_dateretry_atcase_creation_datetime_created)	rx   ry   rz   rb   assertFalser	   rm   r   rp   )rA   rz   r_   rD   rD   rE   test_paypal_date_format   s   

zIPNTest.test_paypal_date_formatc                 C   s  t  }|ddi | | | tjdj | 	tjdj
ddg t  }|ddi | | | tjdj | tjdj
d t  }|d	d
i | | | tjdj | 	tjdj
ddg t  }|ddi | | | tjdj | 	tjdj
ddg t  }|ddi | | | tjdj | 	tjdj
ddg t  }|ddi | | | tjdj | tjdj
d d S )Nr   s   2015-10-25 01:21:32idzhInvalid form. (time_created: Invalid date format 2015-10-25 01:21:32: need more than 2 values to unpack)zvInvalid form. (time_created: Invalid date format 2015-10-25 01:21:32: not enough values to unpack (expected 5, got 2))r   s   01:21:32 Jan 25th 2015 PDTz|Invalid form. (payment_date: Invalid date format 01:21:32 Jan 25th 2015 PDT: invalid literal for int() with base 10: '25th')r   s   01:21:32 01 25 2015 PDTzdInvalid form. (next_payment_date: Invalid date format 01:21:32 01 25 2015 PDT: u'01' is not in list)zcInvalid form. (next_payment_date: Invalid date format 01:21:32 01 25 2015 PDT: '01' is not in list)r   s   01:21:32 January 25 2015 PDTzeInvalid form. (retry_at: Invalid date format 01:21:32 January 25 2015 PDT: u'January' is not in list)zdInvalid form. (retry_at: Invalid date format 01:21:32 January 25 2015 PDT: 'January' is not in list)r   s   01:28 Jan 25 2015 PDTziInvalid form. (subscr_date: Invalid date format 01:28 Jan 25 2015 PDT: need more than 2 values to unpack)zwInvalid form. (subscr_date: Invalid date format 01:28 Jan 25 2015 PDT: not enough values to unpack (expected 3, got 2))r   s   01:21:32 Jan 49 2015 PDTzoInvalid form. (case_creation_date: Invalid date format 01:21:32 Jan 49 2015 PDT: day is out of range for month))rx   ry   rz   rb   rq   r	   rm   latestrp   assertInr{   rk   )rA   r_   rD   rD   rE   test_paypal_date_invalid_format   sp   





z'IPNTest.test_paypal_date_invalid_formatc                 C   sd   |  t}| jjdi dd W d    n1 sw   Y  | tt|jf | t	j
  d S )NrX   zapplication/jsonrZ   )assertRaisesAssertionErrorr]   r^   r   r   repr	exceptionr   r	   rm   exists)rA   assert_contextrD   rD   rE   test_content_type_validationU  s
   z$IPNTest.test_content_type_validationN)rH   rI   rJ   r   r   r   r   r   r   r   r   r   r   r   rD   rD   rD   rE   r      s    
	
/Ur   c                       s0   e Zd Z fddZ fddZdd Z  ZS )IPNLocaleTestc                    sH   t t j| _z	t t jd W n ty   tdw t 	  d S )N)fr_FRzUTF-8z&fr_FR locale not available for testing)
locale	getlocaleLC_TIME
old_locale	setlocale	ExceptionunittestSkipTestr;   r<   r@   rB   rD   rE   r<   ^  s   
zIPNLocaleTest.setUpc                    s   t t j| j t   d S r:   )r   r   r   r   r;   rF   r@   rB   rD   rE   rF   h  s   zIPNLocaleTest.tearDownc                 C   r   )
NFUserr   r   r   r   r   r   r   )
rw   r   rk   r   r   r   r   r   r   r   r   rD   rD   rE   r   l  s    z%IPNLocaleTest.test_valid_ipn_received)rH   rI   rJ   r<   rF   r   rK   rD   rD   rB   rE   r   \  s    
r   c                   @   s   e Zd ZdZdd ZdS )IPNPostbackTestz4
    Tests an actual postback to PayPal server.
    c                 C   s   |  i d d S )NzInvalid postback. (INVALID)r   r@   rD   rD   rE   test_postback|  s   zIPNPostbackTest.test_postbackN)rH   rI   rJ   __doc__r   rD   rD   rD   rE   r   v  s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
IPNSimulatorTestsc                 C   s   t j  S r:   )r	   rm   rn   r   r@   rD   rD   rE   get_ipn  s   zIPNSimulatorTests.get_ipnc                 C   s   | j jd|ddS )NrX   rY   rZ   )r]   r^   )rA   ra   rD   rD   rE   post_to_ipn_handler  s   z%IPNSimulatorTests.post_to_ipn_handlerc                 C   sr   d}|  |}| |jd |  }| |j | |jtd | |jt	dddddd	t
jr2tjnd d
 d S )NsR  payment_type=instant&payment_date=23%3A04%3A06%20Feb%2002%2C%202009%20PDT&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer%40paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John%20Smith&address_country=United%20States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San%20Jose&address_street=123%20any%20street&business=seller%40paypalsandbox.com&receiver_email=seller%40paypalsandbox.com&receiver_id=seller%40paypalsandbox.com&residence_country=US&item_name=something&item_number=AK-1234&quantity=1&shipping=3.04&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=12.34&mc_gross1=12.34&txn_type=web_accept&txn_id=593976436&notify_version=2.1&custom=xyz123&invoice=abc1234&test_ipn=1&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31Awsh54ABFpebxm5s9x58YIW-AWIbrh   z12.34r   r   r   r   r   r   r   )r   rk   rl   r   r   rp   r6   r   r   r   r   r   r   r   )rA   paypal_inputrt   r   rD   rD   rE   test_valid_webaccept  s   
 z&IPNSimulatorTests.test_valid_webacceptc                 C   s&   d}|  | |  }| |j d S )NsS  payment_type=instant&payment_date=23%3A04%3A06%20Feb%2002%2C%202009%20PDT&payment_status=Declined&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer%40paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John%20Smith&address_country=United%20States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San%20Jose&address_street=123%20any%20street&business=seller%40paypalsandbox.com&receiver_email=seller%40paypalsandbox.com&receiver_id=seller%40paypalsandbox.com&residence_country=US&item_name=something&item_number=AK-1234&quantity=1&shipping=3.04&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=131.22&mc_gross1=131.22&txn_type=web_accept&txn_id=153826001&notify_version=2.1&custom=xyz123&invoice=abc1234&test_ipn=1&verify_sign=AiPC9BjkCyDFQXbSkoZcgqH3hpacAIG977yabdROlR9d0bf98jevF2-i)r   r   r   rp   )rA   r   r   rD   rD   rE   test_declined  s
   
zIPNSimulatorTests.test_declinedN)rH   rI   rJ   r   r   r   r   rD   rD   rD   rE   r     s
    
r   )#r   r   r   decimalr   urllib.parser   django.confr   django.testr   django.test.utilsr   django.utilsr   paypal.standard.ipn.modelsr	   paypal.standard.ipn.signalsr
   r   paypal.standard.ipn.viewsr   paypal.standard.modelsr   TEST_RECEIVER_EMAILrP   rO   rx   r9   rL   r~   r   r   r   r   rD   rD   rD   rE   <module>   s    	

$- X
