From 91453b9b9e9b3d21321766daeb8abd8f108e2265 Mon Sep 17 00:00:00 2001 From: Alex Barnsley <8069294+alexbarnsley@users.noreply.github.com> Date: Wed, 23 Apr 2025 01:06:09 +0100 Subject: [PATCH] feat: contracts endpoint --- client/api/contracts.py | 10 ++++++++++ client/client.py | 9 +++++++++ tests/api/test_contracts.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 client/api/contracts.py create mode 100644 tests/api/test_contracts.py diff --git a/client/api/contracts.py b/client/api/contracts.py new file mode 100644 index 0000000..1148236 --- /dev/null +++ b/client/api/contracts.py @@ -0,0 +1,10 @@ +from client.resource import Resource + + +class Contracts(Resource): + + def all(self): + return self.with_endpoint('api').request_get('contracts') + + def abi(self, name: str, implementation: str): + return self.with_endpoint('api').request_get(f'contracts/{name}/{implementation}/abi') diff --git a/client/client.py b/client/client.py index 813106b..a586c4b 100644 --- a/client/client.py +++ b/client/client.py @@ -1,4 +1,5 @@ from typing import Union +from client.api.contracts import Contracts from client.connection import ClientHosts, Connection from client.api.api_nodes import ApiNodes from client.api.blockchain import Blockchain @@ -54,6 +55,14 @@ def commits(self): """ return Commits(self.connection) + @property + def contracts(self): + """ + :return: contracts API + :rtype: client.api.contracts.Contracts + """ + return Contracts(self.connection) + @property def delegates(self): """ diff --git a/tests/api/test_contracts.py b/tests/api/test_contracts.py new file mode 100644 index 0000000..c1fde3e --- /dev/null +++ b/tests/api/test_contracts.py @@ -0,0 +1,30 @@ +import responses +from client import ArkClient + + +def test_all_calls_correct_url(): + responses.add( + responses.GET, + 'http://127.0.0.1:4002/api/contracts', + json={'success': True}, + status=200 + ) + + client = ArkClient('http://127.0.0.1:4002/api') + client.contracts.all() + assert len(responses.calls) == 1 + assert responses.calls[0].request.url == 'http://127.0.0.1:4002/api/contracts' + + +def test_abi_calls_correct_url(): + responses.add( + responses.GET, + 'http://127.0.0.1:4002/api/contracts/consensus/some-address/abi', + json={'success': True}, + status=200 + ) + + client = ArkClient('http://127.0.0.1:4002/api') + client.contracts.abi('consensus', 'some-address') + assert len(responses.calls) == 1 + assert responses.calls[0].request.url == 'http://127.0.0.1:4002/api/contracts/consensus/some-address/abi'