Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,5 @@ target/

# Vscode config
.vscode
.env
venv/
10 changes: 7 additions & 3 deletions pypaystack/transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def totals(self):
return self._handle_request("GET", url)

def initialize(
self, email, amount, plan=None, reference=None, channel=None, metadata=None
self, email, amount, plan=None, reference=None, channel=None, metadata=None, currency=None
):
"""
Initialize a transaction and returns the response
Expand All @@ -50,6 +50,7 @@ def initialize(
Reference -- optional
channel -- channel type to use
metadata -- a list if json data objects/dicts
currency -- currency to charge eg USD
"""
amount = utils.validate_amount(amount)

Expand All @@ -70,10 +71,12 @@ def initialize(
payload.update({"reference": reference})
if metadata:
payload = payload.update({"metadata": {"custom_fields": metadata}})
if currency:
payload.update({"currency": currency})

return self._handle_request("POST", url, payload)

def charge(self, email, auth_code, amount, reference=None, metadata=None):
def charge(self, email, auth_code, amount, reference=None, metadata=None, currency=None):
"""
Charges a customer and returns the response

Expand Down Expand Up @@ -103,7 +106,8 @@ def charge(self, email, auth_code, amount, reference=None, metadata=None):
payload.update({"reference": reference})
if metadata:
payload.update({"metadata": {"custom_fields": metadata}})

if currency:
payload.update({"currency": currency})
return self._handle_request("POST", url, payload)

def verify(self, reference):
Expand Down
31 changes: 30 additions & 1 deletion tests/test_00_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,33 @@ def test_charge_and_verify(self):
"""
transaction_details = {
"amount": 1000*100,
"email": "test_customer@mail.com"
"email": "test_customer@mail.com",
}

dollar_transaction_details = {
"amount": 200 * 100,
"email": "test.customer@mail.com",
"currency": "USD"
}

def initialize_transaction():
(status_code, status, response_msg,
initialized_transaction_data) = self.transaction.initialize(**transaction_details)

self.assertEqual(status_code, 200)
self.assertEqual(status, True)
self.assertEqual(response_msg, 'Authorization URL created')
return initialized_transaction_data

def initialize_dollar_transaction():
(status_code, status, response_msg,
initialized_dollar_transaction_data) = self.transaction.initialize(**dollar_transaction_details)

self.assertEqual(status_code, 200)
self.assertEqual(status, True)
self.assertEqual(response_msg, 'Authorization URL created')
return initialized_dollar_transaction_data

def verify_transaction():
(status_code, status, response_msg, response_data) = self.transaction.verify(
reference=initialized_transaction_data['reference'])
Expand All @@ -33,5 +49,18 @@ def verify_transaction():
self.assertEqual(response_data.get('customer')
['email'], transaction_details['email'])

def verify_dollar_transaction():
(status_code, status, response_msg, response_data) = self.transaction.verify(
reference=initialized_dollar_transaction_data['reference'])
self.assertEqual(status_code, 200)
self.assertEqual(status, True)
self.assertEqual(response_msg, 'Verification successful')
self.assertEqual(response_data.get('customer')
['email'], dollar_transaction_details['email'])


initialized_transaction_data = initialize_transaction()
verify_transaction()

initialized_dollar_transaction_data = initialize_dollar_transaction()
verify_dollar_transaction()