Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

datacash_responses.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import mock
  2. from decimal import Decimal as D
  3. from xml.dom.minidom import parseString
  4. from django.test import TestCase
  5. from oscar.apps.payment.datacash.utils import Gateway
  6. class AuthResponseHandlingTests(TestCase):
  7. success_response_xml = """<?xml version="1.0" encoding="UTF-8" ?>
  8. <Response>
  9. <CardTxn>
  10. <authcode>060642</authcode>
  11. <card_scheme>Switch</card_scheme>
  12. <country>United Kingdom</country>
  13. <issuer>HSBC</issuer>
  14. </CardTxn>
  15. <datacash_reference>3000000088888888</datacash_reference>
  16. <merchantreference>1000001</merchantreference>
  17. <mode>LIVE</mode>
  18. <reason>ACCEPTED</reason>
  19. <status>1</status>
  20. <time>1071567305</time>
  21. </Response>"""
  22. def setUp(self):
  23. self.gateway = Gateway(client="DUMMY", password="123456", host="dummyhost.com",)
  24. self.gateway.do_request = mock.Mock()
  25. def test_success_auth_response(self):
  26. self.gateway.do_request.return_value = self.success_response_xml
  27. response = self.gateway.auth(card_number='1000010000000007',
  28. expiry_date='01/12',
  29. merchant_reference='1000001',
  30. currency='GBP',
  31. amount=D('12.99'))
  32. self.assertEquals(1, response['status'])
  33. self.assertEquals('3000000088888888', response['datacash_reference'])
  34. self.assertEquals('1000001', response['merchant_reference'])
  35. self.assertEquals('060642', response['auth_code'])
  36. self.assertEquals('ACCEPTED', response['reason'])
  37. def test_success_pre_response(self):
  38. self.gateway.do_request.return_value = self.success_response_xml
  39. response = self.gateway.pre(card_number='1000010000000007',
  40. expiry_date='01/12',
  41. merchant_reference='1000001',
  42. currency='GBP',
  43. amount=D('12.99'))
  44. self.assertEquals(1, response['status'])
  45. self.assertEquals('3000000088888888', response['datacash_reference'])
  46. self.assertEquals('1000001', response['merchant_reference'])
  47. self.assertEquals('060642', response['auth_code'])
  48. self.assertEquals('ACCEPTED', response['reason'])
  49. def test_declined_auth_response(self):
  50. response_xml = """<?xml version="1.0" encoding="UTF-8" ?>
  51. <Response>
  52. <CardTxn>
  53. <authcode>DECLINED</authcode>
  54. <card_scheme>Mastercard</card_scheme>
  55. <country>United Kingdom</country>
  56. </CardTxn>
  57. <datacash_reference>4400200045583767</datacash_reference>
  58. <merchantreference>AA004630</merchantreference>
  59. <mode>TEST</mode>
  60. <reason>DECLINED</reason>
  61. <status>7</status>
  62. <time>1169223906</time>
  63. </Response>"""
  64. self.gateway.do_request.return_value = response_xml
  65. response = self.gateway.auth(card_number='1000010000000007',
  66. expiry_date='01/12',
  67. merchant_reference='1000001',
  68. currency='GBP',
  69. amount=D('12.99'))
  70. self.assertEquals(7, response['status'])
  71. self.assertEquals('4400200045583767', response['datacash_reference'])
  72. self.assertEquals('AA004630', response['merchant_reference'])
  73. self.assertEquals('DECLINED', response['auth_code'])
  74. self.assertEquals('DECLINED', response['reason'])
  75. def test_successful_cancel_response(self):
  76. response_xml = """<?xml version="1.0" encoding="UTF-8" ?>
  77. <Response>
  78. <datacash_reference>4900200000000001</datacash_reference>
  79. <merchantreference>4900200000000001</merchantreference>
  80. <mode>TEST</mode>
  81. <reason>CANCELLED OK</reason>
  82. <status>1</status>
  83. <time>1151567456</time>
  84. </Response>"""
  85. self.gateway.do_request.return_value = response_xml
  86. response = self.gateway.cancel(txn_reference='4900200000000001')
  87. self.assertEquals(1, response['status'])
  88. self.assertEquals('4900200000000001', response['datacash_reference'])
  89. self.assertEquals('4900200000000001', response['merchant_reference'])
  90. self.assertEquals('CANCELLED OK', response['reason'])
  91. def test_successful_fulfil_response(self):
  92. response_xml = """<?xml version="1.0" encoding="UTF-8" ?>
  93. <Response>
  94. <datacash_reference>3900200000000001</datacash_reference>
  95. <merchantreference>3900200000000001</merchantreference>
  96. <mode>LIVE</mode>
  97. <reason>FULFILLED OK</reason>
  98. <status>1</status>
  99. <time>1071567356</time>
  100. </Response>
  101. """
  102. self.gateway.do_request.return_value = response_xml
  103. response = self.gateway.fulfil(txn_reference='3900200000000001',
  104. merchant_reference='1000001',
  105. currency='GBP',
  106. amount=D('12.99'),
  107. auth_code='asdf')
  108. self.assertEquals(1, response['status'])
  109. self.assertEquals('3900200000000001', response['datacash_reference'])
  110. self.assertEquals('3900200000000001', response['merchant_reference'])
  111. self.assertEquals('FULFILLED OK', response['reason'])