From eff8c793e61389c8a0482bec9101294f974fe5d0 Mon Sep 17 00:00:00 2001 From: Mihai Moiseanu Date: Wed, 28 Feb 2024 16:32:20 +0200 Subject: [PATCH] added quote endpoints rename InstantConversion to Conversions --- mangopay/resources.py | 50 +++++++++++++++---- ...stant_conversion.py => test_conversion.py} | 47 ++++++++++++++--- 2 files changed, 80 insertions(+), 17 deletions(-) rename tests/{test_instant_conversion.py => test_conversion.py} (61%) diff --git a/mangopay/resources.py b/mangopay/resources.py index 7bf3f54..84973d4 100644 --- a/mangopay/resources.py +++ b/mangopay/resources.py @@ -288,7 +288,7 @@ class Meta: @python_2_unicode_compatible -class InstantConversion(BaseModel): +class Conversion(BaseModel): author = ForeignKeyField(User, api_name='AuthorId', required=True) debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId', required=True) credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True) @@ -303,25 +303,55 @@ class InstantConversion(BaseModel): status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None) execution_date = DateTimeField(api_name='ExecutionDate') - def create_instant_conversion(self, **kwargs): + def create_conversion(self, **kwargs): insert = InsertQuery(self, **kwargs) insert.insert_query = self.get_field_dict() - insert.identifier = 'CREATE_INSTANT_CONVERSION' + insert.identifier = 'CREATE_CONVERSION' return insert.execute() @staticmethod - def get_instant_conversion(id, *args, **kwargs): + def get_conversion(id, *args, **kwargs): kwargs['id'] = id - select = SelectQuery(InstantConversion, *args, **kwargs) - select.identifier = 'GET_INSTANT_CONVERSION' + select = SelectQuery(Conversion, *args, **kwargs) + select.identifier = 'GET_CONVERSION' return select.all(*args, **kwargs) class Meta: - verbose_name = 'instant_conversion' - verbose_name_plural = 'instant_conversions' + verbose_name = 'conversion' + verbose_name_plural = 'conversions' url = { - 'CREATE_INSTANT_CONVERSION': '/instant-conversion', - 'GET_INSTANT_CONVERSION': '/instant-conversion/%(id)s' + 'CREATE_CONVERSION': '/instant-conversion', + 'GET_CONVERSION': '/instant-conversion/%(id)s' + } + + +class ConversionQuote(BaseModel): + expiration_date = DateTimeField(api_name='ExpirationDate') + status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None) + duration = IntegerField(api_name='Duration') + debited_funds = MoneyField(api_name='DebitedFunds', required=True) + credited_funds = MoneyField(api_name='CreditedFunds', required=True) + conversion_rate = ConversionRateField(api_name='ConversionRateResponse') + + def create_conversion_quote(self, **kwargs): + insert = InsertQuery(self, **kwargs) + insert.insert_query = self.get_field_dict() + insert.identifier = 'CREATE_CONVERSION_QUOTE' + return insert.execute() + + @staticmethod + def get_conversion_quote(id, *args, **kwargs): + kwargs['id'] = id + select = SelectQuery(ConversionQuote, *args, **kwargs) + select.identifier = 'GET_CONVERSION_QUOTE' + return select.all(*args, **kwargs) + + class Meta: + verbose_name = 'conversion_quote' + verbose_name_plural = 'conversions' + url = { + 'CREATE_CONVERSION_QUOTE': '/conversions/quote', + 'GET_CONVERSION_QUOTE': '/conversions/quote/%(id)s' } diff --git a/tests/test_instant_conversion.py b/tests/test_conversion.py similarity index 61% rename from tests/test_instant_conversion.py rename to tests/test_conversion.py index bdec96c..f9f5631 100644 --- a/tests/test_instant_conversion.py +++ b/tests/test_conversion.py @@ -1,9 +1,10 @@ +from mangopay.resources import ConversionQuote from mangopay.utils import Money -from tests.resources import ConversionRate, InstantConversion, Wallet +from tests.resources import ConversionRate, Conversion, Wallet from tests.test_base import BaseTestLive -class InstantConversionTest(BaseTestLive): +class ConversionsTest(BaseTestLive): def test_get_conversion_rate(self): conversion_rate = ConversionRate() @@ -32,7 +33,7 @@ def test_create_instant_conversion(self): debited_funds.currency = 'EUR' debited_funds.amount = 79 - instant_conversion = InstantConversion() + instant_conversion = Conversion() instant_conversion.author = user instant_conversion.credited_wallet = credited_wallet instant_conversion.debited_wallet = BaseTestLive.create_new_wallet_with_money() @@ -40,7 +41,7 @@ def test_create_instant_conversion(self): instant_conversion.debited_funds = debited_funds instant_conversion.tag = "instant conversion test" - instant_conversion_response = instant_conversion.create_instant_conversion() + instant_conversion_response = instant_conversion.create_conversion() self.assertIsNotNone(instant_conversion_response) self.assertIsNotNone(instant_conversion_response['debited_funds'].amount) @@ -63,7 +64,7 @@ def test_get_instant_conversion(self): debited_funds.currency = 'EUR' debited_funds.amount = 79 - instant_conversion = InstantConversion() + instant_conversion = Conversion() instant_conversion.author = user instant_conversion.credited_wallet = credited_wallet instant_conversion.debited_wallet = BaseTestLive.create_new_wallet_with_money() @@ -71,11 +72,43 @@ def test_get_instant_conversion(self): instant_conversion.debited_funds = debited_funds instant_conversion.tag = "instant conversion test" - instant_conversion_response = instant_conversion.create_instant_conversion() - returned_conversion_response = InstantConversion.get_instant_conversion(instant_conversion_response['id']) + instant_conversion_response = instant_conversion.create_conversion() + returned_conversion_response = Conversion.get_conversion(instant_conversion_response['id']) self.assertIsNotNone(returned_conversion_response) self.assertIsNotNone(returned_conversion_response.data[0]) self.assertIsNotNone(returned_conversion_response.data[0].debited_funds.amount) self.assertIsNotNone(returned_conversion_response.data[0].credited_funds.amount) self.assertEqual(returned_conversion_response.data[0].status, 'SUCCEEDED') + + def test_create_conversion_quote(self): + conversion_quote = ConversionQuote() + conversion_quote.credited_funds = Money(currency='USD') + conversion_quote.debited_funds = Money(currency='GBP', amount=100) + conversion_quote.duration = 90 + conversion_quote.tag = "Created using the Mangopay Python SDK" + + created_conversion_quote = conversion_quote.create_conversion_quote() + + self.assertIsNotNone(created_conversion_quote) + self.assertIsNotNone(created_conversion_quote['debited_funds']) + self.assertIsNotNone(created_conversion_quote['credited_funds']) + self.assertIsNotNone(created_conversion_quote['conversion_rate']) + self.assertEqual('ACTIVE', created_conversion_quote['status']) + + def test_get_conversion_quote(self): + conversion_quote = ConversionQuote() + conversion_quote.credited_funds = Money(currency='USD') + conversion_quote.debited_funds = Money(currency='GBP', amount=100) + conversion_quote.duration = 90 + conversion_quote.tag = "Created using the Mangopay Python SDK" + + created_conversion_quote = conversion_quote.create_conversion_quote() + returned_conversion_quote = ConversionQuote.get_conversion_quote(created_conversion_quote['id']) + response = returned_conversion_quote.data[0] + self.assertIsNotNone(response) + self.assertIsNotNone(response.debited_funds) + self.assertIsNotNone(response.credited_funds) + self.assertIsNotNone(response.conversion_rate) + self.assertEqual('ACTIVE', response.status) +