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'])