From 0617aaedb5f41e9d7a467a59e404a0b7d28ea2e9 Mon Sep 17 00:00:00 2001 From: som-m Date: Sun, 31 Jan 2021 16:40:36 +0700 Subject: [PATCH 1/2] Add Capability API --- omise/__init__.py | 37 +++++++++++++++++++ omise/test/test_capability.py | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 omise/test/test_capability.py diff --git a/omise/__init__.py b/omise/__init__.py index c318116..1fd2352 100644 --- a/omise/__init__.py +++ b/omise/__init__.py @@ -29,6 +29,7 @@ def iteritems(d, **kw): 'Account', 'Balance', 'BankAccount', + 'Capability', 'Card', 'Charge', 'Collection', @@ -64,6 +65,7 @@ def _get_class_for(type): 'account': Account, 'balance': Balance, 'bank_account': BankAccount, + 'capability': Capability, 'card': Card, 'charge': Charge, 'customer': Customer, @@ -343,6 +345,41 @@ def __repr__(self): hex(id(self))) +class Capability(_MainResource, Base): + """API class representing capability details. + + This API class is used for retrieving the account capabilities. + + Basic usage:: + + >>> import omise + >>> omise.api_secret = 'skey_test_4xs8breq3htbkj03d2x' + >>> capability = omise.Capability.retrieve() + + >>> capability.zero_interest_installments + True + """ + + @classmethod + def _instance_path(cls, *args): + return 'capability' + + @classmethod + def retrieve(cls): + """Retrieve the account capabilities. + + :rtype: Capability + """ + return _as_object(cls._request('get', cls._instance_path())) + + def reload(self): + """Reload the capability details. + + :rtype: Capability + """ + return self._reload_data(self._request('get', self._instance_path())) + + class Token(_VaultResource, Base): """API class for creating and retrieving credit card token with the API. diff --git a/omise/test/test_capability.py b/omise/test/test_capability.py new file mode 100644 index 0000000..cb1189f --- /dev/null +++ b/omise/test/test_capability.py @@ -0,0 +1,69 @@ +import mock +import unittest + +from .helper import _ResourceMixin + + +class CapabilityTest(_ResourceMixin, unittest.TestCase): + + def _getTargetClass(self): + from .. import Capability + return Capability + + @mock.patch('requests.get') + def test_retrieve(self, api_call): + class_ = self._getTargetClass() + self.mockResponse(api_call, """{ + "object": "capability", + "location": "/capability", + "payment_methods": [ + { + "object": "payment_method", + "name": "card", + "currencies": [ + "THB", + "JPY", + "USD", + "EUR", + "GBP", + "SGD", + "AUD", + "CHF", + "CNY", + "DKK", + "HKD" + ], + "card_brands": [ + "JCB", + "Visa", + "MasterCard" + ], + "installment_terms": null + }, + { + "object": "payment_method", + "name": "alipay", + "currencies": [ + "THB" + ], + "card_brands": null, + "installment_terms": null + } + ], + "country": "TH", + "zero_interest_installments": true + }""") + + capability = class_.retrieve() + self.assertTrue(isinstance(capability, class_)) + self.assertEqual(capability.country, 'TH') + self.assertTrue(capability.zero_interest_installments) + self.assertRequest(api_call, 'https://api.omise.co/capability') + + self.mockResponse(api_call, """{ + "zero_interest_installments": false + }""") + + capability.reload() + self.assertFalse(capability.zero_interest_installments) + self.assertRequest(api_call, 'https://api.omise.co/capability') From bf031600fc8248be10e22abf65e7c2edfe2e9bf8 Mon Sep 17 00:00:00 2001 From: som-m Date: Mon, 1 Feb 2021 08:45:40 +0700 Subject: [PATCH 2/2] Use public key instead of secret key --- omise/__init__.py | 14 ++++++-- omise/test/test_capability.py | 66 ++++++++++++++++++++++++++++++----- 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/omise/__init__.py b/omise/__init__.py index 1fd2352..d11bc59 100644 --- a/omise/__init__.py +++ b/omise/__init__.py @@ -218,6 +218,13 @@ def _request(cls, *args, **kwargs): return Request(api_public, api_vault, api_version).send(*args, **kwargs) +class _PublicResource(Base): + + @classmethod + def _request(cls, *args, **kwargs): + return Request(api_public, api_main, api_version).send(*args, **kwargs) + + class Account(_MainResource, Base): """API class representing accounts details. @@ -345,15 +352,16 @@ def __repr__(self): hex(id(self))) -class Capability(_MainResource, Base): +class Capability(_PublicResource, Base): """API class representing capability details. - This API class is used for retrieving the account capabilities. + This API class is used for retrieving the account capabilities. It requires + the public key to be set in ``omise.api_public``. Basic usage:: >>> import omise - >>> omise.api_secret = 'skey_test_4xs8breq3htbkj03d2x' + >>> omise.api_public = 'pkey_test_4xs8breq32civvobx15' >>> capability = omise.Capability.retrieve() >>> capability.zero_interest_installments diff --git a/omise/test/test_capability.py b/omise/test/test_capability.py index cb1189f..8781b19 100644 --- a/omise/test/test_capability.py +++ b/omise/test/test_capability.py @@ -10,6 +10,64 @@ def _getTargetClass(self): from .. import Capability return Capability + def _makeOne(self): + return self._getTargetClass().from_data({ + 'object': 'capability', + 'location': '/capability', + 'payment_methods': [ + { + "object": "payment_method", + "name": "card", + "currencies": [ + "THB", + "JPY", + "USD", + "EUR", + "GBP", + "SGD", + "AUD", + "CHF", + "CNY", + "DKK", + "HKD" + ], + "card_brands": [ + "JCB", + "Visa", + "MasterCard" + ], + "installment_terms": None + }, + { + "object": "payment_method", + "name": "alipay", + "currencies": [ + "THB" + ], + "card_brands": None, + "installment_terms": None + } + ], + 'country': 'TH', + 'zero_interest_installments': True + }) + + @mock.patch('requests.get') + def test_reload(self, api_call): + capability = self._makeOne() + class_ = self._getTargetClass() + + self.assertTrue(isinstance(capability, class_)) + self.assertTrue(capability.zero_interest_installments) + + self.mockResponse(api_call, """{ + "zero_interest_installments": false + }""") + + capability.reload() + self.assertFalse(capability.zero_interest_installments) + self.assertRequest(api_call, 'https://api.omise.co/capability') + @mock.patch('requests.get') def test_retrieve(self, api_call): class_ = self._getTargetClass() @@ -59,11 +117,3 @@ def test_retrieve(self, api_call): self.assertEqual(capability.country, 'TH') self.assertTrue(capability.zero_interest_installments) self.assertRequest(api_call, 'https://api.omise.co/capability') - - self.mockResponse(api_call, """{ - "zero_interest_installments": false - }""") - - capability.reload() - self.assertFalse(capability.zero_interest_installments) - self.assertRequest(api_call, 'https://api.omise.co/capability')