1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
# coding=utf-8
import unittest
from paypal import PayPalAPIResponseError
from . import interface_factory
from . import api_details
interface = interface_factory.get_interface_obj()
class TestDirectPayment(unittest.TestCase):
def setUp(self):
self.credit_card = {
'amt': '10.00',
'creditcardtype': 'Visa',
'acct': api_details.VISA_ACCOUNT_NO,
'expdate': api_details.VISA_EXPIRATION,
'cvv2': '123',
'firstname': 'John',
'lastname': 'Doe',
'street': '1313 Mockingbird Lane',
'city': 'Beverly Hills',
'state': 'CA',
'zip': '90110',
'countrycode': 'US',
'currencycode': 'USD',
}
def test_sale(self):
sale = interface.do_direct_payment('Sale', **self.credit_card)
self.assertTrue(sale.success)
details = interface.get_transaction_details(TRANSACTIONID=sale.TRANSACTIONID)
self.assertTrue(details.success)
self.assertEqual(details.PAYMENTSTATUS.upper(), 'COMPLETED')
self.assertEqual(details.REASONCODE.upper(), 'NONE')
def test_exception_handling(self):
"""
Make sure response exception handling is working as intended by
forcing some bad values.
"""
new_details = self.credit_card
# Set an invalid credit card number.
new_details['acct'] = '123'
# Make sure this raises an exception.
self.assertRaises(PayPalAPIResponseError, interface.do_direct_payment,
'Sale', **new_details)
def test_abbreviated_sale(self):
sale = interface.do_direct_payment(**self.credit_card)
self.assertTrue(sale.success)
details = interface.get_transaction_details(TRANSACTIONID=sale.TRANSACTIONID)
self.assertTrue(details.success)
self.assertEqual(details.PAYMENTSTATUS.upper(), 'COMPLETED')
self.assertEqual(details.REASONCODE.upper(), 'NONE')
def test_authorize_and_delayed_capture(self):
# authorize payment
auth = interface.do_direct_payment('Authorization', **self.credit_card)
self.assertTrue(auth.success)
self.assertEqual(auth.AMT, self.credit_card['amt'])
# capture payment
captured = interface.do_capture(auth.TRANSACTIONID, auth.AMT)
self.assertTrue(captured.success)
self.assertEqual(auth.TRANSACTIONID, captured.PARENTTRANSACTIONID)
self.assertEqual(captured.PAYMENTSTATUS.upper(), 'COMPLETED')
self.assertEqual(captured.REASONCODE.upper(), 'NONE')
def test_authorize_and_void(self):
# authorize payment
auth = interface.do_direct_payment('Authorization', **self.credit_card)
self.assertTrue(auth.success)
self.assertEqual(auth.AMT, self.credit_card['amt'])
# void payment
note = 'Voided the authorization.'
void = interface.do_void(AUTHORIZATIONID=auth.TRANSACTIONID, NOTE=note)
self.assertTrue(void.success)
self.assertEqual(auth.TRANSACTIONID, void.AUTHORIZATIONID)
details = interface.get_transaction_details(TRANSACTIONID=auth.TRANSACTIONID)
self.assertTrue(details.success)
self.assertEqual(details.PAYMENTSTATUS.upper(), 'VOIDED')
|