From bc3831fddcd309789a3f5e81eba37d4f28219201 Mon Sep 17 00:00:00 2001
From: David Douard <david.douard@sdfa3.org>
Date: Thu, 17 Mar 2022 14:19:50 +0100
Subject: [PATCH] Exclude name and email attributes from People comparison

these fields are computed attributes and may be removed from the backend
storage. Helps writing tests.
---
 swh/model/model.py            |  4 ++--
 swh/model/tests/test_model.py | 12 ++++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/swh/model/model.py b/swh/model/model.py
index 7bed1c37..1e5f555e 100644
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -289,8 +289,8 @@ class Person(BaseModel):
     object_type: Final = "person"
 
     fullname = attr.ib(type=bytes, validator=type_validator())
-    name = attr.ib(type=Optional[bytes], validator=type_validator())
-    email = attr.ib(type=Optional[bytes], validator=type_validator())
+    name = attr.ib(type=Optional[bytes], validator=type_validator(), eq=False)
+    email = attr.ib(type=Optional[bytes], validator=type_validator(), eq=False)
 
     @classmethod
     def from_fullname(cls, fullname: bytes):
diff --git a/swh/model/tests/test_model.py b/swh/model/tests/test_model.py
index 6d97e59f..0efbcfe4 100644
--- a/swh/model/tests/test_model.py
+++ b/swh/model/tests/test_model.py
@@ -646,6 +646,18 @@ def test_git_author_line_to_author():
         assert expected_person == Person.from_fullname(person)
 
 
+def test_person_comparison():
+    """Check only the fullname attribute is used to compare Person objects
+
+    """
+    person = Person(fullname=b"p1", name=None, email=None)
+    assert attr.evolve(person, name=b"toto") == person
+    assert attr.evolve(person, email=b"toto@example.com") == person
+
+    person = Person(fullname=b"", name=b"toto", email=b"toto@example.com")
+    assert attr.evolve(person, fullname=b"dude") != person
+
+
 # Content
 
 
-- 
GitLab