From f730591f2cc6cb63ed8be69b1d814d9d3a5c1e2f Mon Sep 17 00:00:00 2001 From: Marcel van den Elst Date: Wed, 20 May 2015 13:01:41 +0200 Subject: [PATCH] added passing test for updates on related models ref #570: test would fail from v0.8.5 up, but fixed in master --- tests/queryset/queryset.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index 65d84305..6e4d86d2 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -630,6 +630,40 @@ class QuerySetTest(unittest.TestCase): self.assertRaises(ValidationError, Doc.objects().update, dt_f="datetime", upsert=True) self.assertRaises(ValidationError, Doc.objects().update, ed_f__str_f=1, upsert=True) + def test_update_related_models( self ): + class TestPerson( Document ): + name = StringField() + + class TestOrganization( Document ): + name = StringField() + owner = ReferenceField( TestPerson ) + + TestPerson.drop_collection() + TestOrganization.drop_collection() + + p = TestPerson( name='p1' ) + p.save() + o = TestOrganization( name='o1' ) + o.save() + + o.owner = p + p.name = 'p2' + + self.assertListEqual( o._get_changed_fields(), [ 'owner' ] ) + self.assertListEqual( p._get_changed_fields(), [ 'name' ] ) + + o.save() + + self.assertListEqual( o._get_changed_fields(), [] ) + self.assertListEqual( p._get_changed_fields(), [ 'name' ] ) # Fails; it's empty + + # This will do NOTHING at all, even though we changed the name + p.save() + + p.reload() + + self.assertEqual( p.name, 'p2' ) # Fails; it's still `p1` + def test_upsert(self): self.Person.drop_collection()