Skip to content

Commit 5a2e268

Browse files
committed
Add test case to prevent regression
1 parent baabf97 commit 5a2e268

File tree

1 file changed

+58
-17
lines changed

1 file changed

+58
-17
lines changed

tests/document/instance.py

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,30 @@
11
# -*- coding: utf-8 -*-
2-
import bson
32
import os
43
import pickle
54
import unittest
65
import uuid
7-
import warnings
86
import weakref
97
from datetime import datetime
108

9+
import bson
1110
from bson import DBRef, ObjectId
1211
from pymongo.errors import DuplicateKeyError
1312
from six import iteritems
1413

15-
from mongoengine.mongodb_support import get_mongodb_version, MONGODB_36, MONGODB_34
16-
from mongoengine.pymongo_support import list_collection_names
17-
from tests import fixtures
18-
from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest,
19-
PickleDynamicEmbedded, PickleDynamicTest)
20-
from tests.utils import MongoDBTestCase, get_as_pymongo
21-
2214
from mongoengine import *
23-
from mongoengine.base import get_document, _document_registry
15+
from mongoengine import signals
16+
from mongoengine.base import _document_registry, get_document
2417
from mongoengine.connection import get_db
25-
from mongoengine.errors import (NotRegistered, InvalidDocumentError,
26-
InvalidQueryError, NotUniqueError,
27-
FieldDoesNotExist, SaveConditionError)
18+
from mongoengine.context_managers import query_counter, switch_db
19+
from mongoengine.errors import (FieldDoesNotExist, InvalidDocumentError, \
20+
InvalidQueryError, NotRegistered, NotUniqueError, SaveConditionError)
21+
from mongoengine.mongodb_support import MONGODB_34, MONGODB_36, get_mongodb_version
22+
from mongoengine.pymongo_support import list_collection_names
2823
from mongoengine.queryset import NULLIFY, Q
29-
from mongoengine.context_managers import switch_db, query_counter
30-
from mongoengine import signals
24+
from tests import fixtures
25+
from tests.fixtures import (PickleDynamicEmbedded, PickleDynamicTest, \
26+
PickleEmbedded, PickleSignalsTest, PickleTest)
27+
from tests.utils import MongoDBTestCase, get_as_pymongo
3128

3229
TEST_IMAGE_PATH = os.path.join(os.path.dirname(__file__),
3330
'../fields/mongoengine.png')
@@ -1260,6 +1257,50 @@ def UUID(i):
12601257
self.assertTrue(w1.toggle)
12611258
self.assertEqual(w1.count, 3)
12621259

1260+
def test_save_update_selectively(self):
1261+
class WildBoy(Document):
1262+
age = IntField()
1263+
name = StringField()
1264+
1265+
WildBoy.drop_collection()
1266+
1267+
WildBoy(age=12, name='John').save()
1268+
1269+
boy1 = WildBoy.objects().first()
1270+
boy2 = WildBoy.objects().first()
1271+
1272+
boy1.age = 99
1273+
boy1.save()
1274+
boy2.name = 'Bob'
1275+
boy2.save()
1276+
1277+
fresh_boy = WildBoy.objects().first()
1278+
self.assertEqual(fresh_boy.age, 99)
1279+
self.assertEqual(fresh_boy.name, 'Bob')
1280+
1281+
def test_save_update_selectively_with_custom_pk(self):
1282+
# Prevents regression of #2082
1283+
class WildBoy(Document):
1284+
pk_id = StringField(primary_key=True)
1285+
age = IntField()
1286+
name = StringField()
1287+
1288+
WildBoy.drop_collection()
1289+
1290+
WildBoy(pk_id='A', age=12, name='John').save()
1291+
1292+
boy1 = WildBoy.objects().first()
1293+
boy2 = WildBoy.objects().first()
1294+
1295+
boy1.age = 99
1296+
boy1.save()
1297+
boy2.name = 'Bob'
1298+
boy2.save()
1299+
1300+
fresh_boy = WildBoy.objects().first()
1301+
self.assertEqual(fresh_boy.age, 99)
1302+
self.assertEqual(fresh_boy.name, 'Bob')
1303+
12631304
def test_update(self):
12641305
"""Ensure that an existing document is updated instead of be
12651306
overwritten.
@@ -1552,9 +1593,9 @@ class ParentModel(Document):
15521593
EmbeddedChildModel)
15531594

15541595
emb = EmbeddedChildModel(id={'1': [1]})
1555-
ParentModel(children=emb)._get_changed_fields()
1596+
ParentModel(child=emb)._get_changed_fields()
15561597

1557-
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop(self):
1598+
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop_full_caseEmailUser(self):
15581599
class User(Document):
15591600
id = IntField(primary_key=True)
15601601
name = StringField()

0 commit comments

Comments
 (0)