Fix Resource.__eq__ mismatch semantics of object equal
The __eq__ of apiclient.base.Resource will return True, if the two objects have same id, even if they have different other attributes value. The behavior is weird and don't match the semantics of object equal. The objects that have different value should be different objects. Fix this issue and add some test cases in this patch. Change-Id: I92ce3af0a51befd9cf04ea779079eef95d89606f Closes-Bug: #1499369
This commit is contained in:
parent
39d32abaa7
commit
c28c01a1d6
|
@ -519,8 +519,6 @@ class Resource(object):
|
|||
# two resources of different types are not equal
|
||||
if not isinstance(other, self.__class__):
|
||||
return False
|
||||
if hasattr(self, 'id') and hasattr(other, 'id'):
|
||||
return self.id == other.id
|
||||
return self._info == other._info
|
||||
|
||||
def is_loaded(self):
|
||||
|
|
|
@ -175,9 +175,14 @@ class BaseManagerTest(test_base.BaseTestCase):
|
|||
self.http_client.assert_called('GET', '/human_resources/3')
|
||||
|
||||
def test_eq(self):
|
||||
# Two resources of the same type with the same id: equal
|
||||
# Two resources with same ID: never equal if their info is not equal
|
||||
r1 = base.Resource(None, {'id': 1, 'name': 'hi'})
|
||||
r2 = base.Resource(None, {'id': 1, 'name': 'hello'})
|
||||
self.assertNotEqual(r1, r2)
|
||||
|
||||
# Two resources with same ID: equal if their info is equal
|
||||
r1 = base.Resource(None, {'id': 1, 'name': 'hello'})
|
||||
r2 = base.Resource(None, {'id': 1, 'name': 'hello'})
|
||||
self.assertEqual(r1, r2)
|
||||
|
||||
# Two resources of different types: never equal
|
||||
|
|
Loading…
Reference in New Issue