Skip to content

Commit 605df15

Browse files
committed
Added card type and card mask fields to parsed status response; added merchant-transaction-ids to info requests
1 parent e9b2949 commit 605df15

File tree

5 files changed

+51
-11
lines changed

5 files changed

+51
-11
lines changed

gateway/builders/info_data_builder.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,24 @@ def add_gateway_transaction_ids(self, list_of_gate_transaction_id=None):
6565
new_key=self.__INFO_COMMAND_DATA_KEY,
6666
new_dict={self.__data_sets.COMMAND_DATA_GATEWAY_TRANSACTION_IDS: list_of_gate_transaction_id}
6767
)
68+
69+
def add_merchant_transaction_ids(self, list_of_merchant_transaction_id=None):
70+
"""
71+
Add previously sent merchant transaction IDs
72+
73+
Example -> ["2d4b377c-648c-432b-a4dc-b386901116d7", "2323377c-548c-4scb-a6dc-b3899kxah520"]
74+
75+
Args:
76+
list_of_merchant_transaction_id (list): Previously sent merchant transaction IDs
77+
"""
78+
if list_of_merchant_transaction_id is None:
79+
list_of_merchant_transaction_id = []
80+
81+
self.__payment_mandatory_fields[self.__data_sets.COMMAND_DATA_MERCHANT_TRANSACTION_IDS] = self.__data_types.COMMAND_DATA_MERCHANT_TRANSACTION_IDS
82+
83+
self.__data_structure_util.add_to_dict(
84+
source_dict=self.__payment_data_set,
85+
working_dict=self.__command_data_structure,
86+
new_key=self.__INFO_COMMAND_DATA_KEY,
87+
new_dict={self.__data_sets.COMMAND_DATA_MERCHANT_TRANSACTION_IDS: list_of_merchant_transaction_id}
88+
)

gateway/responses/lists.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
# THE SOFTWARE.
2222
import datetime
2323
from typing import Sequence
24+
from enum import Enum
2425

2526
from gateway.responses.constants import Status
2627
from gateway.responses.generic import GenericResponse
@@ -96,6 +97,13 @@ def __init__(self, data: dict = None) -> None:
9697
super().__init__(TransactionResult, data)
9798

9899

100+
class CardFamily(Enum):
101+
VISA = 'VISA'
102+
MASTER_CARD = 'MC'
103+
MAESTRO = 'MA'
104+
AMERICAN_EXPRESS = 'AMEX'
105+
106+
99107
class TransactionStatus(TransactionsListElement):
100108
def __init__(self, data: dict = None) -> None:
101109
super().__init__(data)
@@ -108,6 +116,8 @@ def __init__(self, data: dict = None) -> None:
108116
self.status_code_general = get_value(status_data, 'status-code-general', Status)
109117
self.status_text = get_value(status_data, 'status-text', str, '')
110118
self.status_text_general = get_value(status_data, 'status-text-general', str, '')
119+
self.card_family = get_value(status_data, 'card-family', CardFamily)
120+
self.card_mask = get_value(status_data, 'card-mask', str, '')
111121

112122

113123
class StatusResponse(TransactionsList):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
setuptools.setup(
3535
name='transactpro-gw3-client',
36-
version='1.7.4',
36+
version='1.7.5',
3737
description='Transact PRO Gateway3 implementation in Python.',
3838
long_description=LONG_DESCRIPTION,
3939
long_description_content_type="text/markdown",

tests/builders/test_info_data_builder.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,20 @@ def tearDown(self):
4141

4242
def test_mandatory_and_data_fields(self):
4343
new = self.BUILDER
44-
new.add_gateway_transaction_ids([
45-
'16f462cb-9s32-dsv2-b983-fa14da6421f1'
46-
])
44+
new.add_gateway_transaction_ids(['16f462cb-9s32-dsv2-b983-fa14da6421f1'])
45+
new.add_merchant_transaction_ids(['fa14da6421f1-9s32-dsv2-b983-16f462cb'])
46+
4747
from gateway.data_sets.request_parameters import (RequestParameters, RequestParametersTypes)
4848
valid_fields = {
49-
RequestParameters.COMMAND_DATA_GATEWAY_TRANSACTION_IDS:
50-
RequestParametersTypes.COMMAND_DATA_GATEWAY_TRANSACTION_IDS,
49+
RequestParameters.COMMAND_DATA_GATEWAY_TRANSACTION_IDS: RequestParametersTypes.COMMAND_DATA_GATEWAY_TRANSACTION_IDS,
50+
RequestParameters.COMMAND_DATA_MERCHANT_TRANSACTION_IDS: RequestParametersTypes.COMMAND_DATA_MERCHANT_TRANSACTION_IDS,
5151
}
5252
self.assertDictEqual(valid_fields, self.MANDATORY_FIELDS)
53-
valid_data_structure = {'command-data': {'gateway-transaction-ids': ['16f462cb-9s32-dsv2-b983-fa14da6421f1']}}
53+
54+
valid_data_structure = {
55+
'command-data': {
56+
'gateway-transaction-ids': ['16f462cb-9s32-dsv2-b983-fa14da6421f1'],
57+
'merchant-transaction-ids': ['fa14da6421f1-9s32-dsv2-b983-16f462cb'],
58+
}
59+
}
5460
self.assertDictEqual(valid_data_structure, self.DATA)

tests/operations/test_operations.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from gateway.operations.operations import Operations
2727
from gateway.responses.constants import Status, ErrorCode
2828
from gateway.responses.enrollment import EnrollmentStatus
29-
from gateway.responses.lists import RefundsListElement, TransactionResult, TransactionStatus
29+
from gateway.responses.lists import RefundsListElement, TransactionResult, TransactionStatus, CardFamily
3030
from gateway.responses.parts import TransactionInfo
3131
from gateway.responses.payment import GW
3232
from gateway.responses.response import parse_date
@@ -410,9 +410,10 @@ def test_result(self):
410410

411411
def test_status(self):
412412
body = b"{\"transactions\":[{\"gateway-transaction-id\":\"cd7b8bdf-3c78-4540-95d0-68018d2aba97\",\"status\":" \
413-
b"[{\"gateway-transaction-id\":\"cd7b8bdf-3c78-4540-95d0-68018d2aba97\",\"status-code\":7,\"status-code-general\":8," \
414-
b"\"status-text\":\"SUCCESS\",\"status-text-general\":\"EXPIRED\"}]},{\"gateway-transaction-id\":\"37908991-789b-4d79-8c6a-f90ba0ce12b6\"," \
415-
b"\"status\":[{\"gateway-transaction-id\":\"37908991-789b-4d79-8c6a-f90ba0ce12b6\",\"status-code\":8,\"status-code-general\":7," \
413+
b"[{\"card-mask\":\"534219*5267\",\"card-family\":\"MC\",\"gateway-transaction-id\":\"cd7b8bdf-3c78-4540-95d0-68018d2aba97\"," \
414+
b"\"status-code\":7,\"status-code-general\":8,\"status-text\":\"SUCCESS\",\"status-text-general\":\"EXPIRED\"}]}," \
415+
b"{\"gateway-transaction-id\":\"37908991-789b-4d79-8c6a-f90ba0ce12b6\",\"status\":[" \
416+
b"{\"gateway-transaction-id\":\"37908991-789b-4d79-8c6a-f90ba0ce12b6\",\"status-code\":8,\"status-code-general\":7," \
416417
b"\"status-text\":\"EXPIRED\",\"status-text-general\":\"SUCCESS\"}]}," \
417418
b"{\"error\":{\"code\":400,\"message\":\"Failed to fetch data for transaction with gateway id: 99900000-789b-4d79-8c6a-f90ba0ce12b0\"}," \
418419
b"\"gateway-transaction-id\":\"99900000-789b-4d79-8c6a-f90ba0ce12b0\"}]}"
@@ -427,6 +428,8 @@ def test_status(self):
427428
self.assertEqual(Status.EXPIRED, tr1.status_code_general)
428429
self.assertEqual("SUCCESS", tr1.status_text)
429430
self.assertEqual("EXPIRED", tr1.status_text_general)
431+
self.assertEqual(CardFamily.MASTER_CARD, tr1.card_family)
432+
self.assertEqual("534219*5267", tr1.card_mask)
430433

431434
tr2: TransactionStatus = parsed_response.transactions[1]
432435
self.assertEqual("37908991-789b-4d79-8c6a-f90ba0ce12b6", tr2.gateway_transaction_id)

0 commit comments

Comments
 (0)