diff --git a/.gitignore b/.gitignore index 14fdd76..94cd420 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,5 @@ target/ # Vscode config .vscode +.env +venv/ diff --git a/pypaystack/transactions.py b/pypaystack/transactions.py index 67e4e7f..f55784d 100644 --- a/pypaystack/transactions.py +++ b/pypaystack/transactions.py @@ -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 @@ -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) @@ -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 @@ -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): diff --git a/tests/test_00_transaction.py b/tests/test_00_transaction.py index 83e19c6..0b49a14 100644 --- a/tests/test_00_transaction.py +++ b/tests/test_00_transaction.py @@ -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']) @@ -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()