Skip to content
This repository was archived by the owner on Jun 26, 2025. It is now read-only.

Commit dd39a64

Browse files
authored
Merge pull request #11 from nuhamozaini/manual_payment_feature
Manual Payment modifications
2 parents 9c16a68 + aae15c0 commit dd39a64

7 files changed

Lines changed: 74 additions & 6 deletions

File tree

moyasar/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def fill_object(object, data):
1717
object.__setattr__(key, data[key])
1818

1919

20-
def request(http_verb, url, data, key=None):
20+
def request(http_verb, url, data=None, key=None):
2121
moyasar_key = key or api_key
2222

2323
if moyasar_key is None:

moyasar/actions/capture.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import moyasar
2+
import json
3+
4+
5+
class Capture:
6+
def capture_url(self, id):
7+
return f'{moyasar.resource_url(self.__class__.__name__)}/{id}/capture'.lower()
8+
9+
def capture(self, amount=None):
10+
data = None
11+
if amount is not None:
12+
data = {'amount': amount}
13+
14+
response = moyasar.request('POST', self.capture_url(self.id), data)
15+
response = json.loads(response.text)
16+
moyasar.fill_object(self, response)

moyasar/actions/void.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import moyasar
2+
import json
3+
4+
5+
class Void:
6+
def void_url(self, id):
7+
return f'{moyasar.resource_url(self.__class__.__name__)}/{id}/void'.lower()
8+
9+
def void(self):
10+
response = moyasar.request('POST', self.void_url(self.id))
11+
response = json.loads(response.text)
12+
moyasar.fill_object(self, response)

moyasar/payment.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from moyasar.resource import Resource
44
from moyasar.actions.refund import Refund
5+
from moyasar.actions.capture import Capture
6+
from moyasar.actions.void import Void
57
from moyasar.helpers import Constructor
68
from moyasar.helpers import Format
79

@@ -36,7 +38,7 @@ class Sadad(Source):
3638
pass
3739

3840

39-
class Payment(Resource, Refund, Format):
41+
class Payment(Resource, Refund, Capture, Void, Format):
4042

4143
def __init__(self, data):
4244
super().__init__(data)
@@ -45,4 +47,14 @@ def __init__(self, data):
4547
def refund(self, amount=None):
4648
super().refund(amount)
4749
self.source = Source.build(self.source)
48-
return self
50+
return self
51+
52+
def capture(self, amount=None):
53+
super().capture(amount)
54+
self.source = Source.build(self.source)
55+
return self
56+
57+
def void(self):
58+
super().void()
59+
self.source = Source.build(self.source)
60+
return self

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ six==1.12.0
2828
smmap2==2.0.5
2929
stevedore==1.30.0
3030
tornado==4.3
31-
urllib3==1.24.1
31+
urllib3==1.24.2
3232
wrapt==1.11.1

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
long_description = fh.read()
55
setuptools.setup(
66
name="moyasar",
7-
version="0.6.1",
7+
version="0.6.5",
88
author="Moyasar",
99
author_email="developers@moyasar.com",
1010
description="Moyasar Python language wrapper",

tests/moyasar/payment_test.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,32 @@ def test_eqaulity_check_differentiate_non_identical_payments():
103103
if key == 'source':
104104
for k, v in val.__dict__.items():
105105
payment_two_values.append(v)
106-
assert payment_one_values != payment_two_values
106+
assert payment_one_values != payment_two_values
107+
108+
109+
def test_capture_should_return_payment_object_upon_success():
110+
id = '1b82356d-b5fd-46f8-bde9-3680d62f289a'
111+
ss.stub_server_request("get", moyasar.Payment.fetch_url(id),
112+
resource=f.payment, status=200)
113+
moyasar.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
114+
payment = moyasar.Payment.fetch(id)
115+
ss.stub_server_request("post", f'{moyasar.api_url}/payments/{payment.id}/capture',
116+
resource=f.payment, status=200)
117+
moyasar.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
118+
captured = payment.capture()
119+
assert isinstance(captured, moyasar.Payment)
120+
121+
122+
def test_void_should_return_payment_object_upon_success():
123+
id = '1b82356d-b5fd-46f8-bde9-3680d62f289a'
124+
ss.stub_server_request("get", moyasar.Payment.fetch_url(id),
125+
resource=f.payment, status=200)
126+
moyasar.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
127+
payment = moyasar.Payment.fetch(id)
128+
ss.stub_server_request("post", f'{moyasar.api_url}/payments/{payment.id}/void',
129+
resource=f.payment, status=200)
130+
moyasar.api_key = 'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
131+
voided = payment.void()
132+
assert isinstance(voided, moyasar.Payment)
133+
134+

0 commit comments

Comments
 (0)