From 6bf226bf35dca7a89b48f512adc2bebab256e884 Mon Sep 17 00:00:00 2001 From: Uxio Fuentefria <6909403+Uxio0@users.noreply.github.com> Date: Wed, 5 Mar 2025 13:17:17 +0100 Subject: [PATCH] Add `trusted_for_delegate_call` filter for contracts endpoint --- .../contracts/tests/test_views.py | 30 +++++++++++++++++++ safe_transaction_service/contracts/views.py | 1 + 2 files changed, 31 insertions(+) diff --git a/safe_transaction_service/contracts/tests/test_views.py b/safe_transaction_service/contracts/tests/test_views.py index c749c494b..cac5bc447 100644 --- a/safe_transaction_service/contracts/tests/test_views.py +++ b/safe_transaction_service/contracts/tests/test_views.py @@ -103,3 +103,33 @@ def test_contracts_view(self): response = self.client.get(reverse("v1:contracts:list")) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["count"], 2) + + def test_contracts_filter_view(self): + contract = ContractFactory(trusted_for_delegate_call=True) + response = self.client.get( + reverse("v1:contracts:list") + "?trusted_for_delegate_call=True" + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + response.data["results"], + [ + { + "address": contract.address, + "name": contract.name, + "display_name": contract.display_name, + "logo_uri": self._build_full_file_url(contract.logo.url), + "contract_abi": { + "abi": contract.contract_abi.abi, + "description": contract.contract_abi.description, + "relevance": contract.contract_abi.relevance, + }, + "trusted_for_delegate_call": contract.trusted_for_delegate_call, + } + ], + ) + + response = self.client.get( + reverse("v1:contracts:list") + "?trusted_for_delegate_call=False" + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["results"], []) diff --git a/safe_transaction_service/contracts/views.py b/safe_transaction_service/contracts/views.py index 45bfd4695..2b0fbfb03 100644 --- a/safe_transaction_service/contracts/views.py +++ b/safe_transaction_service/contracts/views.py @@ -44,6 +44,7 @@ class ContractsView(ListAPIView): django_filters.rest_framework.DjangoFilterBackend, OrderingFilter, ] + filterset_fields = ["trusted_for_delegate_call"] ordering = ["address"] ordering_fields = ["address", "name"] pagination_class = pagination.DefaultPagination