clarify test_get_changed_fields_query_count
This commit is contained in:
parent
894e9818ac
commit
e2a0b42d03
@ -917,7 +917,9 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(Blog.objects.count(), 3)
|
self.assertEqual(Blog.objects.count(), 3)
|
||||||
|
|
||||||
def test_get_changed_fields_query_count(self):
|
def test_get_changed_fields_query_count(self):
|
||||||
|
"""Make sure we don't perform unnecessary db operations when
|
||||||
|
none of document's fields were updated.
|
||||||
|
"""
|
||||||
class Person(Document):
|
class Person(Document):
|
||||||
name = StringField()
|
name = StringField()
|
||||||
owns = ListField(ReferenceField('Organization'))
|
owns = ListField(ReferenceField('Organization'))
|
||||||
@ -925,8 +927,8 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
class Organization(Document):
|
class Organization(Document):
|
||||||
name = StringField()
|
name = StringField()
|
||||||
owner = ReferenceField('Person')
|
owner = ReferenceField(Person)
|
||||||
employees = ListField(ReferenceField('Person'))
|
employees = ListField(ReferenceField(Person))
|
||||||
|
|
||||||
class Project(Document):
|
class Project(Document):
|
||||||
name = StringField()
|
name = StringField()
|
||||||
@ -945,35 +947,35 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
with query_counter() as q:
|
with query_counter() as q:
|
||||||
self.assertEqual(q, 0)
|
self.assertEqual(q, 0)
|
||||||
|
|
||||||
fresh_o1 = Organization.objects.get(id=o1.id)
|
# Fetching a document should result in a query.
|
||||||
self.assertEqual(1, q)
|
org = Organization.objects.get(id=o1.id)
|
||||||
fresh_o1._get_changed_fields()
|
|
||||||
self.assertEqual(1, q)
|
|
||||||
|
|
||||||
with query_counter() as q:
|
|
||||||
self.assertEqual(q, 0)
|
|
||||||
|
|
||||||
fresh_o1 = Organization.objects.get(id=o1.id)
|
|
||||||
fresh_o1.save() # No changes, does nothing
|
|
||||||
|
|
||||||
self.assertEqual(q, 1)
|
self.assertEqual(q, 1)
|
||||||
|
|
||||||
with query_counter() as q:
|
# Checking changed fields of a newly fetched document should not
|
||||||
self.assertEqual(q, 0)
|
# result in a query.
|
||||||
|
org._get_changed_fields()
|
||||||
fresh_o1 = Organization.objects.get(id=o1.id)
|
|
||||||
fresh_o1.save(cascade=False) # No changes, does nothing
|
|
||||||
|
|
||||||
self.assertEqual(q, 1)
|
self.assertEqual(q, 1)
|
||||||
|
|
||||||
|
# Saving a doc without changing any of its fields should not result
|
||||||
|
# in a query (with or without cascade=False).
|
||||||
|
org = Organization.objects.get(id=o1.id)
|
||||||
with query_counter() as q:
|
with query_counter() as q:
|
||||||
|
org.save()
|
||||||
self.assertEqual(q, 0)
|
self.assertEqual(q, 0)
|
||||||
|
|
||||||
fresh_o1 = Organization.objects.get(id=o1.id)
|
org = Organization.objects.get(id=o1.id)
|
||||||
fresh_o1.employees.append(p2) # Dereferences
|
with query_counter() as q:
|
||||||
fresh_o1.save(cascade=False) # Saves
|
org.save(cascade=False)
|
||||||
|
self.assertEqual(q, 0)
|
||||||
|
|
||||||
self.assertEqual(q, 3)
|
# Saving a doc after you append a reference to it should result in
|
||||||
|
# two db operations (a query for the reference and an update).
|
||||||
|
# TODO dereferencing of p2 shouldn't be necessary.
|
||||||
|
org = Organization.objects.get(id=o1.id)
|
||||||
|
with query_counter() as q:
|
||||||
|
org.employees.append(p2) # dereferences p2
|
||||||
|
org.save() # saves the org
|
||||||
|
self.assertEqual(q, 2)
|
||||||
|
|
||||||
@skip_pymongo3
|
@skip_pymongo3
|
||||||
def test_slave_okay(self):
|
def test_slave_okay(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user