import mock
from decimal import Decimal as D
from xml.dom.minidom import parseString
from django.test import TestCase
from oscar.apps.payment.datacash.utils import Gateway
class AuthResponseHandlingTests(TestCase):
success_response_xml = """
060642
Switch
United Kingdom
HSBC
3000000088888888
1000001
LIVE
ACCEPTED
1
"""
def setUp(self):
self.gateway = Gateway(client="DUMMY", password="123456", host="dummyhost.com",)
self.gateway.do_request = mock.Mock()
def test_success_auth_response(self):
self.gateway.do_request.return_value = self.success_response_xml
response = self.gateway.auth(card_number='1000010000000007',
expiry_date='01/12',
merchant_reference='1000001',
currency='GBP',
amount=D('12.99'))
self.assertEquals(1, response['status'])
self.assertEquals('3000000088888888', response['datacash_reference'])
self.assertEquals('1000001', response['merchant_reference'])
self.assertEquals('060642', response['auth_code'])
self.assertEquals('ACCEPTED', response['reason'])
def test_success_pre_response(self):
self.gateway.do_request.return_value = self.success_response_xml
response = self.gateway.pre(card_number='1000010000000007',
expiry_date='01/12',
merchant_reference='1000001',
currency='GBP',
amount=D('12.99'))
self.assertEquals(1, response['status'])
self.assertEquals('3000000088888888', response['datacash_reference'])
self.assertEquals('1000001', response['merchant_reference'])
self.assertEquals('060642', response['auth_code'])
self.assertEquals('ACCEPTED', response['reason'])
def test_declined_auth_response(self):
response_xml = """
DECLINED
Mastercard
United Kingdom
4400200045583767
AA004630
TEST
DECLINED
7
"""
self.gateway.do_request.return_value = response_xml
response = self.gateway.auth(card_number='1000010000000007',
expiry_date='01/12',
merchant_reference='1000001',
currency='GBP',
amount=D('12.99'))
self.assertEquals(7, response['status'])
self.assertEquals('4400200045583767', response['datacash_reference'])
self.assertEquals('AA004630', response['merchant_reference'])
self.assertEquals('DECLINED', response['auth_code'])
self.assertEquals('DECLINED', response['reason'])
def test_successful_cancel_response(self):
response_xml = """
4900200000000001
4900200000000001
TEST
CANCELLED OK
1
"""
self.gateway.do_request.return_value = response_xml
response = self.gateway.cancel(txn_reference='4900200000000001')
self.assertEquals(1, response['status'])
self.assertEquals('4900200000000001', response['datacash_reference'])
self.assertEquals('4900200000000001', response['merchant_reference'])
self.assertEquals('CANCELLED OK', response['reason'])
def test_successful_fulfil_response(self):
response_xml = """
3900200000000001
3900200000000001
LIVE
FULFILLED OK
1
"""
self.gateway.do_request.return_value = response_xml
response = self.gateway.fulfil(txn_reference='3900200000000001',
merchant_reference='1000001',
currency='GBP',
amount=D('12.99'),
auth_code='asdf')
self.assertEquals(1, response['status'])
self.assertEquals('3900200000000001', response['datacash_reference'])
self.assertEquals('3900200000000001', response['merchant_reference'])
self.assertEquals('FULFILLED OK', response['reason'])