diff --git a/akauntingpy/api.py b/akauntingpy/api.py index 13f5456..7b03cef 100644 --- a/akauntingpy/api.py +++ b/akauntingpy/api.py @@ -1,4 +1,5 @@ from importlib.metadata import version, PackageNotFoundError +from unittest.mock import seal import requests import json from requests.auth import HTTPBasicAuth @@ -75,6 +76,14 @@ class Client(object): def get_accounts(self, **params): data = self.call(endpoint="accounts", **params) + if params.get('search', False): + # Check if there is an account returned + if data['meta']['pagination'].get('count') == 0: + # No account found + raise exceptions.AccountNotFound("Sorry, account not found matching search parameters: %s".format( + params.get('search') + )) + return data['data'] def create_transaction(self, diff --git a/akauntingpy/exceptions.py b/akauntingpy/exceptions.py index e51926a..7f101ca 100644 --- a/akauntingpy/exceptions.py +++ b/akauntingpy/exceptions.py @@ -18,3 +18,11 @@ class InvalidData(Error): Args: Error (_type_): _description_ """ + +class AccountNotFound(Error): + """ + Account not found + + Args: + Error (_type_): _description_ + """ \ No newline at end of file diff --git a/data/GetAccountsSearchNotFound.json b/data/GetAccountsSearchNotFound.json new file mode 100644 index 0000000..0198514 --- /dev/null +++ b/data/GetAccountsSearchNotFound.json @@ -0,0 +1,15 @@ +{ + "data":[], + "meta":{ + "pagination":{ + "total":0, + "count":0, + "per_page":25, + "current_page":0, + "total_pages":0, + "links":{ + + } + } + } + } \ No newline at end of file diff --git a/tests/api_test.py b/tests/api_test.py index 1c42350..2438f86 100644 --- a/tests/api_test.py +++ b/tests/api_test.py @@ -61,6 +61,13 @@ class TestAPI: json=RetrieveJSONFromFile("data/GetAccountsSearch.json")) data = c.get_accounts(search="number:38-9011-0510023-03",params={'page': 1, 'limit': 200}) + def test_get_account_search_not_found(self, setUp, requests_mock): + c = setUp + requests_mock.get(c.url + "/accounts?search=number%3Aarandomvalue&company_id=1", + json=RetrieveJSONFromFile("data/GetAccountsSearchNotFound.json")) + with pytest.raises(AccountNotFound): + data = c.get_accounts(search="number:arandomvalue") + def test_create_transaction_income_success(self, setUp, requests_mock, type='income', # Payment method type account_id=2, # Account ID to assign