diff --git a/recurly/__init__.py b/recurly/__init__.py index 3e409c83..8ce0c6ed 100644 --- a/recurly/__init__.py +++ b/recurly/__init__.py @@ -515,6 +515,24 @@ class GatewayAttributes(Resource): 'account_reference', ) +class GeneralLedgerAccount(Resource): + + """General Ledger Account for Revenue Recognition""" + + member_path = 'general_ledger_accounts/%s' + collection_path = 'general_ledger_accounts' + + nodename = 'general_ledger_account' + + attributes = ( + 'id', + 'account_type', + 'code', + 'description', + 'created_at', + 'updated_at', + ) + class BillingInfo(Resource): """A set of billing information for an account.""" diff --git a/tests/fixtures/general_ledger_accounts/created.xml b/tests/fixtures/general_ledger_accounts/created.xml new file mode 100644 index 00000000..367682ed --- /dev/null +++ b/tests/fixtures/general_ledger_accounts/created.xml @@ -0,0 +1,28 @@ +POST https://api.recurly.com/v2/general_ledger_accounts HTTP/1.1 +X-Api-Version: {api-version} +Accept: application/xml +Authorization: Basic YXBpa2V5Og== +User-Agent: {user-agent} +Content-Type: application/xml; charset=utf-8 + + + + liability + code2 + Liability Description + + + +HTTP/1.1 201 Created +Content-Type: application/xml; charset=utf-8 +Location: https://api.recurly.com/v2/general_ledger_accounts/u9hmrpzksuy8 + + + + u9hmrpzksuy8 + code2 + liability + Liability Description + 2024-01-18T23:20:01Z + 2024-01-18T23:20:01Z + diff --git a/tests/fixtures/general_ledger_accounts/get.xml b/tests/fixtures/general_ledger_accounts/get.xml new file mode 100644 index 00000000..95f0caa1 --- /dev/null +++ b/tests/fixtures/general_ledger_accounts/get.xml @@ -0,0 +1,20 @@ +GET https://api.recurly.com/v2/general_ledger_accounts/u90r5deeaxix HTTP/1.1 +X-Api-Version: {api-version} +Accept: application/xml +Authorization: Basic YXBpa2V5Og== +User-Agent: {user-agent} + + +HTTP/1.1 200 OK +X-Records: 1 +Content-Type: application/xml; charset=utf-8 + + + + u90r5deeaxix + code1 + revenue + Some Description + 2024-01-16T14:34:16Z + 2024-01-16T14:34:16Z + diff --git a/tests/fixtures/general_ledger_accounts/list.xml b/tests/fixtures/general_ledger_accounts/list.xml new file mode 100644 index 00000000..b4311264 --- /dev/null +++ b/tests/fixtures/general_ledger_accounts/list.xml @@ -0,0 +1,30 @@ +GET https://api.recurly.com/v2/general_ledger_accounts HTTP/1.1 +X-Api-Version: {api-version} +Accept: application/xml +Authorization: Basic YXBpa2V5Og== +User-Agent: {user-agent} + + +HTTP/1.1 200 OK +X-Records: 1 +Content-Type: application/xml; charset=utf-8 + + + + + u90r5deeaxix + code1 + revenue + Some Description + 2024-01-16T14:34:16Z + 2024-01-16T14:34:16Z + + + u9hmrpzksuy8 + code2 + liability + Liability Description + 2024-01-18T23:20:01Z + 2024-01-18T23:20:01Z + + diff --git a/tests/fixtures/general_ledger_accounts/list_filtered.xml b/tests/fixtures/general_ledger_accounts/list_filtered.xml new file mode 100644 index 00000000..7f5fc180 --- /dev/null +++ b/tests/fixtures/general_ledger_accounts/list_filtered.xml @@ -0,0 +1,22 @@ +GET https://api.recurly.com/v2/general_ledger_accounts?account_type=revenue HTTP/1.1 +X-Api-Version: {api-version} +Accept: application/xml +Authorization: Basic YXBpa2V5Og== +User-Agent: {user-agent} + + +HTTP/1.1 200 OK +X-Records: 1 +Content-Type: application/xml; charset=utf-8 + + + + + u90r5deeaxix + code1 + revenue + Some Description + 2024-01-16T14:34:16Z + 2024-01-16T14:34:16Z + + diff --git a/tests/fixtures/general_ledger_accounts/updated.xml b/tests/fixtures/general_ledger_accounts/updated.xml new file mode 100644 index 00000000..87906a15 --- /dev/null +++ b/tests/fixtures/general_ledger_accounts/updated.xml @@ -0,0 +1,27 @@ +PUT https://api.recurly.com/v2/general_ledger_accounts/u90r5deeaxix HTTP/1.1 +X-Api-Version: {api-version} +Accept: application/xml +Authorization: Basic YXBpa2V5Og== +User-Agent: {user-agent} +Content-Type: application/xml; charset=utf-8 + + + + code2 + Updated Description + + + +HTTP/1.1 200 OK +Content-Type: application/xml; charset=utf-8 +Location: https://api.recurly.com/v2/general_ledger_accounts/u90r5deeaxix + + + + u90r5deeaxix + code2 + liability + Updated Description + 2024-01-18T23:20:01Z + 2024-01-18T23:24:47Z + diff --git a/tests/test_resources.py b/tests/test_resources.py index b2cfaa00..22492414 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -9,7 +9,7 @@ from recurly import Account, AddOn, Address, Adjustment, BillingInfo, Coupon, Item, Plan, Redemption, Subscription, \ SubscriptionAddOn, Transaction, MeasuredUnit, Usage, GiftCard, Delivery, ShippingAddress, AccountAcquisition, \ Purchase, Invoice, InvoiceCollection, CreditPayment, CustomField, ExportDate, ExportDateFile, DunningCampaign, \ - DunningCycle, InvoiceTemplate, PlanRampInterval, SubRampInterval, ExternalSubscription, ExternalProduct, \ + DunningCycle, GeneralLedgerAccount, InvoiceTemplate, PlanRampInterval, SubRampInterval, ExternalSubscription, ExternalProduct, \ ExternalProductReference, ExternalPaymentPhase, CustomFieldDefinition, ExternalInvoice, ExternalCharge, ExternalAccount, \ GatewayAttributes, BusinessEntity from recurly import Money, NotFoundError, ValidationError, BadRequestError, PageError @@ -3393,6 +3393,53 @@ def test_account_external_accounts(self): with self.mock_request('account/created-with-external-accounts.xml'): account.save() + def test_list_general_ledger_accounts(self): + with self.mock_request('general_ledger_accounts/list.xml'): + general_ledger_accounts = GeneralLedgerAccount.all() + + self.assertEqual(len(general_ledger_accounts), 2) + + def test_list_filtered_general_ledger_accounts(self): + with self.mock_request('general_ledger_accounts/list_filtered.xml'): + general_ledger_accounts = GeneralLedgerAccount.all(account_type='revenue') + + self.assertEqual(len(general_ledger_accounts), 1) + self.assertEqual(general_ledger_accounts[0].account_type, 'revenue') + + def test_get_general_ledger_accounts(self): + with self.mock_request('general_ledger_accounts/get.xml'): + general_ledger_account = GeneralLedgerAccount.get('u90r5deeaxix') + + self.assertEqual(general_ledger_account.id, 'u90r5deeaxix') + self.assertEqual(general_ledger_account.code, 'code1') + self.assertEqual(general_ledger_account.account_type, 'revenue') + self.assertEqual(general_ledger_account.description, 'Some Description') + + def test_create_general_ledger_account(self): + general_ledger_account = GeneralLedgerAccount( + code='code2', + account_type='liability', + description='Liability Description' + ) + with self.mock_request('general_ledger_accounts/created.xml'): + general_ledger_account.save() + + self.assertEquals(general_ledger_account.code, 'code2') + self.assertEquals(general_ledger_account.account_type, 'liability') + self.assertEquals(general_ledger_account.description, 'Liability Description') + + def test_update_general_ledger_account(self): + with self.mock_request('general_ledger_accounts/get.xml'): + general_ledger_account = GeneralLedgerAccount.get('u90r5deeaxix') + + with self.mock_request('general_ledger_accounts/updated.xml'): + general_ledger_account.code = 'code2' + general_ledger_account.description = 'Updated Description' + general_ledger_account.save() + + self.assertEquals(general_ledger_account.code, 'code2') + self.assertEquals(general_ledger_account.description, 'Updated Description') + if __name__ == '__main__': import unittest unittest.main()