From c5fcb5284513eaaa3f3552364b8cf7c5c0cfa876 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Sun, 12 Apr 2020 15:39:33 -0700 Subject: [PATCH] Adds __eq__ and test of it --- graphene/types/objecttype.py | 5 ++++ graphene/types/tests/test_objecttype.py | 34 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/graphene/types/objecttype.py b/graphene/types/objecttype.py index c16f50b8..86fd52a5 100644 --- a/graphene/types/objecttype.py +++ b/graphene/types/objecttype.py @@ -118,6 +118,11 @@ class ObjectType(BaseType, metaclass=ObjectTypeMeta): **kwargs (Dict[str: Any]): Keyword arguments to use for Field values of value object """ + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.__dict__ == other.__dict__ + return False + @classmethod def __init_subclass_with_meta__( cls, diff --git a/graphene/types/tests/test_objecttype.py b/graphene/types/tests/test_objecttype.py index 85a46867..a4a34882 100644 --- a/graphene/types/tests/test_objecttype.py +++ b/graphene/types/tests/test_objecttype.py @@ -35,6 +35,40 @@ class MyScalar(UnmountedType): return MyType +def test_equality(): + # instances of object with no properties are equal + class NoPropertiesObject(ObjectType): + pass + + my_obj = NoPropertiesObject() + assert my_obj == NoPropertiesObject() + + + # different classes are unequal + class OtherNoPropertiesObject(ObjectType): + pass + + assert NoPropertiesObject() != OtherNoPropertiesObject() + + + # compare instances of the same simple class + class MyObjectType(ObjectType): + prop = String() + + my_obj = MyObjectType(prop="a") + assert my_obj == MyObjectType(prop="a") + assert my_obj != MyObjectType(prop="b") + + + # complex instances of the same class + # class contains another class in a field + class ParentObjectType(ObjectType): + child = Field(MyObjectType) + + my_obj = ParentObjectType(child=MyObjectType(prop="a")) + assert my_obj == ParentObjectType(child=MyObjectType(prop="a")) + assert my_obj != ParentObjectType(child=MyObjectType(prop="b")) + def test_generate_objecttype(): class MyObjectType(ObjectType): """Documentation"""