Skip to content

Commit

Permalink
Add serializers fot Uint32Field and Uint96Field
Browse files Browse the repository at this point in the history
  • Loading branch information
moisses89 committed Mar 11, 2024
1 parent f90a39c commit a1b4c5e
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
16 changes: 16 additions & 0 deletions gnosis/eth/django/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
# ================================================ #
Expand Down
59 changes: 58 additions & 1 deletion gnosis/eth/django/tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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())

0 comments on commit a1b4c5e

Please sign in to comment.