Fixed #13813 -- Comparison of DatabaseWrappers doesn't raise errors.

Patch from Lukasz Balcerzak.
This commit is contained in:
Alex Gaynor 2013-07-08 09:35:08 +10:00
parent db2727f952
commit 626fa28878
3 changed files with 39 additions and 1 deletions

View File

@ -70,7 +70,9 @@ class BaseDatabaseWrapper(object):
self._thread_ident = thread.get_ident()
def __eq__(self, other):
return self.alias == other.alias
if isinstance(other, BaseDatabaseWrapper):
return self.alias == other.alias
return NotImplemented
def __ne__(self, other):
return not self == other

View File

View File

@ -0,0 +1,36 @@
from django.test import TestCase
from django.db.backends import BaseDatabaseWrapper
class DummyDatabaseWrapper(BaseDatabaseWrapper):
pass
class DummyObject(object):
alias = None
class DbBackendTests(TestCase):
def test_compare_db_wrapper_with_another_object(self):
wrapper = BaseDatabaseWrapper({})
self.assertFalse(wrapper == 'not-a-db-wrapper')
def test_compare_db_wrapper_with_another_object_with_alias(self):
wrapper = BaseDatabaseWrapper({})
obj = DummyObject()
obj.alias = wrapper.alias = 'foobar'
self.assertFalse(wrapper == obj)
def test_negate_compare_db_wrapper_with_another_object(self):
wrapper = BaseDatabaseWrapper({})
self.assertTrue(wrapper != 'not-a-db-wrapper')
def test_compare_db_wrappers(self):
wrapper1 = DummyDatabaseWrapper({})
wrapper2 = BaseDatabaseWrapper({})
wrapper1.alias = wrapper2.alias = 'foo'
self.assertTrue(wrapper1 == wrapper2)
wrapper1.alias = 'bar'
self.assertFalse(wrapper1 == wrapper2)