Skip to content

Commit ea051af

Browse files
Merge pull request #36 from hyperwallet/feature/HW-58097-V3-Python-SDK-for-Transfer-Refunds
Feature/hw 58097 v3 python sdk for transfer refunds
2 parents 4b9f76d + 79b983b commit ea051af

5 files changed

Lines changed: 200 additions & 3 deletions

File tree

hyperwallet/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
Account, # noqa
3232
StatusTransition, # noqa
3333
TransferMethodConfiguration, # noqa
34-
Webhook # noqa
34+
Webhook, # noqa
35+
TransferRefunds # naqa
3536
)
3637

3738
from .api import Api # noqa

hyperwallet/api.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
Account,
2323
StatusTransition,
2424
TransferMethodConfiguration,
25-
Webhook
25+
Webhook,
26+
TransferRefunds
2627
)
2728

2829

@@ -2722,3 +2723,72 @@ def uploadDocumentsForUser(self,
27222723
)
27232724

27242725
return User(response)
2726+
2727+
'''
2728+
2729+
Transfer Refunds
2730+
2731+
'''
2732+
2733+
2734+
def createTransferRefund(self,
2735+
transferToken=None,
2736+
data=None):
2737+
'''
2738+
Create a Transfer Refund.
2739+
:param transferToken:
2740+
A token identifying the Transfer. **REQUIRED**
2741+
:param data:
2742+
A dictionary containing Transfer Refund information. **REQUIRED**
2743+
:returns:
2744+
A Transfer Refund.
2745+
'''
2746+
2747+
if not transferToken:
2748+
raise HyperwalletException('transferToken is required')
2749+
2750+
if not data:
2751+
raise HyperwalletException('data is required')
2752+
2753+
response = self.apiClient.doPost(
2754+
self.__buildUrl(
2755+
'transfers',
2756+
transferToken,
2757+
'refunds'
2758+
),
2759+
data
2760+
)
2761+
2762+
return TransferRefunds(response)
2763+
2764+
def createTransferSpendBackRefund(self,
2765+
transferToken=None,
2766+
sourceToken=None,
2767+
params=None):
2768+
'''
2769+
Create a Transfer Refund.
2770+
:param transferToken:
2771+
A token identifying the Transfer. **REQUIRED**
2772+
:param data:
2773+
A dictionary containing Transfer Refund information. **REQUIRED**
2774+
:returns:
2775+
A Transfer Refund.
2776+
'''
2777+
2778+
if not transferToken:
2779+
raise HyperwalletException('transferToken is required')
2780+
2781+
if not sourceToken:
2782+
raise HyperwalletException('sourceToken is required')
2783+
2784+
response = self.apiClient.doGet(
2785+
self.__buildUrl(
2786+
'transfers',
2787+
transferToken,
2788+
'refunds',
2789+
sourceToken
2790+
),
2791+
params
2792+
)
2793+
2794+
return TransferRefunds(response)

hyperwallet/models.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,3 +798,51 @@ def __repr__(self):
798798
date=self.createdOn,
799799
token=self.token
800800
)
801+
'''
802+
803+
Transfer Refunds
804+
805+
'''
806+
807+
class TransferRefunds(HyperwalletModel):
808+
'''
809+
The TransferRefunds Model.
810+
811+
:param data:
812+
A dictionary containing the attributes for the Transfer Refunds.
813+
'''
814+
815+
def __init__(self, data):
816+
'''
817+
Create a new Transfer Refunds with the provided attributes.
818+
'''
819+
820+
super(TransferRefunds, self).__init__(data)
821+
822+
self.defaults = {
823+
'token': None,
824+
'status': None,
825+
'createdOn': None,
826+
'clientRefundId': None,
827+
'sourceToken': None,
828+
'sourceAmount': None,
829+
'sourceFeeAmount': None,
830+
'sourceCurrency': None,
831+
'destinationToken': None,
832+
'destinationAmount': None,
833+
'destinationFeeAmount': None,
834+
'destinationCurrency': None,
835+
'foreignExchanges': None,
836+
'notes': None,
837+
'memo': None,
838+
'expiresOn': None
839+
}
840+
841+
for (param, default) in self.defaults.items():
842+
setattr(self, param, data.get(param, default))
843+
844+
def __repr__(self):
845+
return "TransferRefunds({date}, {token})".format(
846+
date=self.createdOn,
847+
token=self.token
848+
)

hyperwallet/tests/test_api.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2212,6 +2212,60 @@ def test_uploadDocumentsForUser_success(self, mock_put):
22122212

22132213
self.assertTrue(response.token, self.data.get('token'))
22142214

2215+
'''
2216+
2217+
Transfer Refunds
2218+
2219+
'''
2220+
2221+
@mock.patch('hyperwallet.utils.ApiClient._makeRequest')
2222+
def test_create_transfer_refunds_success(self, mock_post):
2223+
2224+
mock_post.return_value = self.data
2225+
response = self.api.createTransferRefund('token',self.data)
2226+
self.assertTrue(response.token, self.data.get('token'))
2227+
2228+
def test_create_transfer_refunds_fail_need_payment_token(self):
2229+
2230+
with self.assertRaises(HyperwalletException) as exc:
2231+
self.api.createTransferRefund()
2232+
2233+
self.assertEqual(exc.exception.message, 'transferToken is required')
2234+
2235+
def test_create_transfer_refunds_fail_need_data(self):
2236+
2237+
with self.assertRaises(HyperwalletException) as exc:
2238+
self.api.createTransferRefund('token')
2239+
2240+
self.assertEqual(exc.exception.message, 'data is required')
2241+
2242+
'''
2243+
2244+
Transfer Spend Back Refunds
2245+
2246+
'''
2247+
2248+
def test_create_transfer_spend_back_refunds_user_token(self):
2249+
2250+
with self.assertRaises(HyperwalletException) as exc:
2251+
self.api.createTransferSpendBackRefund()
2252+
2253+
self.assertEqual(exc.exception.message, 'transferToken is required')
2254+
2255+
def test_create_transfer_spend_back_refunds_fail_need_payment_token(self):
2256+
2257+
with self.assertRaises(HyperwalletException) as exc:
2258+
self.api.createTransferSpendBackRefund('token')
2259+
2260+
self.assertEqual(exc.exception.message, 'sourceToken is required')
2261+
2262+
@mock.patch('hyperwallet.utils.ApiClient._makeRequest')
2263+
def test_create_transfer_spend_back_refunds_success(self, mock_get):
2264+
2265+
mock_get.return_value = self.data
2266+
response = self.api.createTransferSpendBackRefund('token', 'token')
2267+
2268+
self.assertTrue(response.token, self.data.get('token'))
22152269

22162270
if __name__ == '__main__':
22172271
unittest.main()

hyperwallet/tests/test_models.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
Account,
2323
StatusTransition,
2424
TransferMethodConfiguration,
25-
Webhook
25+
Webhook,
26+
TransferRefunds
2627
)
2728

2829

@@ -529,6 +530,29 @@ def test_webhook_model_bad_type(self):
529530

530531
self.assertEqual(test_webhook.object, webhook_data.get('object'))
531532

533+
'''
534+
535+
Transfer Refunds
536+
537+
'''
538+
539+
def test_transfer_refunds(self):
540+
541+
status_transfer_refunds_data = {
542+
"clientRefundId": "12312312312412112",
543+
"notes": "Merchant Payment return to Wallet Balance",
544+
"memo": "TransferClientId123456"
545+
}
546+
547+
status_transfer_refunds = TransferRefunds(status_transfer_refunds_data)
548+
549+
self.assertEqual(
550+
status_transfer_refunds.__repr__(),
551+
'TransferRefunds({date}, {token})'.format(
552+
date=status_transfer_refunds_data.get('createdOn'),
553+
token=status_transfer_refunds_data.get('token')
554+
)
555+
)
532556

533557
if __name__ == '__main__':
534558
unittest.main()

0 commit comments

Comments
 (0)