Implement equality operator and add test coverage

This commit is contained in:
Maxwell Muoto 2023-04-02 16:04:43 -05:00
parent 6b73acc173
commit 58e5e40f00
2 changed files with 48 additions and 0 deletions

View File

@ -79,6 +79,15 @@ class UniqueValidator:
smart_repr(self.queryset) smart_repr(self.queryset)
) )
def __eq__(self, other):
if not isinstance(other, self.__class__):
return NotImplemented
return (self.message == other.message
and self.requires_context == other.requires_context
and self.queryset == other.queryset
and self.lookup == other.lookup
)
class UniqueTogetherValidator: class UniqueTogetherValidator:
""" """
@ -166,6 +175,16 @@ class UniqueTogetherValidator:
smart_repr(self.fields) smart_repr(self.fields)
) )
def __eq__(self, other):
if not isinstance(other, self.__class__):
return NotImplemented
return (self.message == other.message
and self.requires_context == other.requires_context
and self.missing_message == other.missing_message
and self.queryset == other.queryset
and self.fields == other.fields
)
class ProhibitSurrogateCharactersValidator: class ProhibitSurrogateCharactersValidator:
message = _('Surrogate characters are not allowed: U+{code_point:X}.') message = _('Surrogate characters are not allowed: U+{code_point:X}.')
@ -177,6 +196,13 @@ class ProhibitSurrogateCharactersValidator:
message = self.message.format(code_point=ord(surrogate_character)) message = self.message.format(code_point=ord(surrogate_character))
raise ValidationError(message, code=self.code) raise ValidationError(message, code=self.code)
def __eq__(self, other):
if not isinstance(other, self.__class__):
return NotImplemented
return (self.message == other.message
and self.code == other.code
)
class BaseUniqueForValidator: class BaseUniqueForValidator:
message = None message = None
@ -230,6 +256,17 @@ class BaseUniqueForValidator:
self.field: message self.field: message
}, code='unique') }, code='unique')
def __eq__(self, other):
if not isinstance(other, self.__class__):
return NotImplemented
return (self.message == other.message
and self.missing_message == other.missing_message
and self.requires_context == other.requires_context
and self.queryset == other.queryset
and self.field == other.field
and self.date_field == other.date_field
)
def __repr__(self): def __repr__(self):
return '<%s(queryset=%s, field=%s, date_field=%s)>' % ( return '<%s(queryset=%s, field=%s, date_field=%s)>' % (
self.__class__.__name__, self.__class__.__name__,

View File

@ -1,4 +1,5 @@
import datetime import datetime
from unittest.mock import MagicMock
import pytest import pytest
from django.db import DataError, models from django.db import DataError, models
@ -787,3 +788,13 @@ class ValidatorsTests(TestCase):
validator.filter_queryset( validator.filter_queryset(
attrs=None, queryset=None, field_name='', date_field_name='' attrs=None, queryset=None, field_name='', date_field_name=''
) )
def test_equality_operator(self):
mock_queryset = MagicMock()
validator = BaseUniqueForValidator(queryset=mock_queryset, field='foo',
date_field='bar')
validator2 = BaseUniqueForValidator(queryset=mock_queryset, field='foo',
date_field='bar')
assert validator == validator2
validator2.date_field = "bar2"
assert validator != validator2