From a1b4c5e091f0efdf048a82ad2bb320c1c9f31f5d Mon Sep 17 00:00:00 2001 From: moisses89 <7888669+moisses89@users.noreply.github.com> Date: Mon, 11 Mar 2024 10:37:08 +0100 Subject: [PATCH] Add serializers fot Uint32Field and Uint96Field --- gnosis/eth/django/serializers.py | 16 ++++++ gnosis/eth/django/tests/test_serializers.py | 59 ++++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/gnosis/eth/django/serializers.py b/gnosis/eth/django/serializers.py index d49206aaf..d24ce250c 100644 --- a/gnosis/eth/django/serializers.py +++ b/gnosis/eth/django/serializers.py @@ -127,6 +127,22 @@ def __init__(self, **kwargs): super().__init__(**kwargs) +class Uint96Field(serializers.DecimalField): + def __init__(self, **kwargs): + kwargs["min_value"] = 0 + kwargs["max_digits"] = 29 + kwargs["decimal_places"] = 0 + super().__init__(**kwargs) + + +class Uint32Field(serializers.DecimalField): + def __init__(self, **kwargs): + kwargs["min_value"] = 0 + kwargs["max_digits"] = 10 + kwargs["decimal_places"] = 0 + super().__init__(**kwargs) + + # ================================================ # # Base Serializers # ================================================ # diff --git a/gnosis/eth/django/tests/test_serializers.py b/gnosis/eth/django/tests/test_serializers.py index 85483cffd..0cba40362 100644 --- a/gnosis/eth/django/tests/test_serializers.py +++ b/gnosis/eth/django/tests/test_serializers.py @@ -7,7 +7,13 @@ from ...constants import NULL_ADDRESS, SENTINEL_ADDRESS from ...utils import get_eth_address_with_invalid_checksum -from ..serializers import EthereumAddressField, HexadecimalField, Sha3HashField +from ..serializers import ( + EthereumAddressField, + HexadecimalField, + Sha3HashField, + Uint32Field, + Uint96Field, +) class EthereumAddressSerializerTest(serializers.Serializer): @@ -38,6 +44,14 @@ class Sha3HashSerializerTest(serializers.Serializer): value = Sha3HashField() +class Uint96SerializerTest(serializers.Serializer): + value = Uint96Field() + + +class Uint32SerializerTest(serializers.Serializer): + value = Uint32Field() + + class TestSerializers(TestCase): def test_ethereum_address_field(self): valid_address = Account.create().address @@ -151,3 +165,46 @@ def test_hash_serializer_field(self): # Hash with 2 less character - Less than 32 bytes serializer = Sha3HashSerializerTest(data={"value": value[:-2]}) self.assertFalse(serializer.is_valid()) + + def test_uint96_field(self): + value = None + serializer = Uint96SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid()) + + value = -1 + serializer = Uint96SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid()) + + value = 1000 + serializer = Uint96SerializerTest(data={"value": value}) + self.assertTrue(serializer.is_valid()) + + value = 2**96 + serializer = Uint96SerializerTest(data={"value": value}) + self.assertTrue(serializer.is_valid()) + + value = 2**97 + serializer = Uint96SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid()) + + def test_uint32_field(self): + value = None + serializer = Uint32SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid()) + + value = -1 + serializer = Uint32SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid()) + + value = 1000 + serializer = Uint32SerializerTest(data={"value": value}) + self.assertTrue(serializer.is_valid()) + + value = 2**32 + serializer = Uint32SerializerTest(data={"value": value}) + self.assertTrue(serializer.is_valid()) + + # 2**33 still have the same number of digits than 2**32 + value = 2**34 + serializer = Uint32SerializerTest(data={"value": value}) + self.assertFalse(serializer.is_valid())