diff --git a/ironicclient/common/apiclient/base.py b/ironicclient/common/apiclient/base.py index b8cb626a0..ef82d22fc 100644 --- a/ironicclient/common/apiclient/base.py +++ b/ironicclient/common/apiclient/base.py @@ -504,8 +504,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): diff --git a/ironicclient/tests/unit/common/apiclient/test_base.py b/ironicclient/tests/unit/common/apiclient/test_base.py index 7258ec3b2..9e2d6dfc0 100644 --- a/ironicclient/tests/unit/common/apiclient/test_base.py +++ b/ironicclient/tests/unit/common/apiclient/test_base.py @@ -79,6 +79,30 @@ class ResourceTest(test_base.BaseTestCase): r = HumanResource(None, {"name": None}) self.assertIsNone(r.human_id) + def test_two_resources_with_same_id_are_not_equal(self): + # 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) + + def test_two_resources_with_same_id_and_info_are_equal(self): + # 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) + + def test_two_resources_with_diff_type_are_not_equal(self): + # Two resoruces of different types: never equal + r1 = base.Resource(None, {'id': 1}) + r2 = HumanResource(None, {'id': 1}) + self.assertNotEqual(r1, r2) + + def test_two_resources_with_no_id_are_equal(self): + # Two resources with no ID: equal if their info is equal + r1 = base.Resource(None, {'name': 'joe', 'age': 12}) + r2 = base.Resource(None, {'name': 'joe', 'age': 12}) + self.assertEqual(r1, r2) + class BaseManagerTestCase(test_base.BaseTestCase):