Skip to content

Commit c96065b

Browse files
committed
Merge branch 'master' of github.com:MongoEngine/mongoengine into release_0_18_1
2 parents 63c9135 + 2abcf47 commit c96065b

File tree

1 file changed

+30
-33
lines changed

1 file changed

+30
-33
lines changed

tests/document/instance.py

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -333,41 +333,36 @@ class User(Document):
333333
self.assertEqual(User._fields['username'].db_field, '_id')
334334
self.assertEqual(User._meta['id_field'], 'username')
335335

336-
# test no primary key field
337-
self.assertRaises(ValidationError, User(name='test').save)
336+
User.objects.create(username='test', name='test user')
337+
user = User.objects.first()
338+
self.assertEqual(user.id, 'test')
339+
self.assertEqual(user.pk, 'test')
340+
user_dict = User.objects._collection.find_one()
341+
self.assertEqual(user_dict['_id'], 'test')
338342

339-
# define a subclass with a different primary key field than the
340-
# parent
341-
with self.assertRaises(ValueError):
343+
def test_change_custom_id_field_in_subclass(self):
344+
"""Subclasses cannot override which field is the primary key."""
345+
class User(Document):
346+
username = StringField(primary_key=True)
347+
name = StringField()
348+
meta = {'allow_inheritance': True}
349+
350+
with self.assertRaises(ValueError) as e:
342351
class EmailUser(User):
343352
email = StringField(primary_key=True)
353+
exc = e.exception
354+
self.assertEqual(str(exc), 'Cannot override primary key field')
344355

345-
class EmailUser(User):
346-
email = StringField()
347-
348-
user = User(username='test', name='test user')
349-
user.save()
350-
351-
user_obj = User.objects.first()
352-
self.assertEqual(user_obj.id, 'test')
353-
self.assertEqual(user_obj.pk, 'test')
354-
355-
user_son = User.objects._collection.find_one()
356-
self.assertEqual(user_son['_id'], 'test')
357-
self.assertNotIn('username', user_son['_id'])
358-
359-
User.drop_collection()
360-
361-
user = User(pk='mongo', name='mongo user')
362-
user.save()
363-
364-
user_obj = User.objects.first()
365-
self.assertEqual(user_obj.id, 'mongo')
366-
self.assertEqual(user_obj.pk, 'mongo')
356+
def test_custom_id_field_is_required(self):
357+
"""Ensure the custom primary key field is required."""
358+
class User(Document):
359+
username = StringField(primary_key=True)
360+
name = StringField()
367361

368-
user_son = User.objects._collection.find_one()
369-
self.assertEqual(user_son['_id'], 'mongo')
370-
self.assertNotIn('username', user_son['_id'])
362+
with self.assertRaises(ValidationError) as e:
363+
User(name='test').save()
364+
exc = e.exception
365+
self.assertTrue("Field is required: ['username']" in str(exc))
371366

372367
def test_document_not_registered(self):
373368
class Place(Document):
@@ -1583,7 +1578,7 @@ class User(self.Person):
15831578
self.assertEqual(person.age, 21)
15841579
self.assertEqual(person.active, False)
15851580

1586-
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop(self):
1581+
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop_embedded_doc(self):
15871582
# Refers to Issue #1685
15881583
class EmbeddedChildModel(EmbeddedDocument):
15891584
id = DictField(primary_key=True)
@@ -1593,9 +1588,11 @@ class ParentModel(Document):
15931588
EmbeddedChildModel)
15941589

15951590
emb = EmbeddedChildModel(id={'1': [1]})
1596-
ParentModel(child=emb)._get_changed_fields()
1591+
changed_fields = ParentModel(child=emb)._get_changed_fields()
1592+
self.assertEqual(changed_fields, [])
15971593

1598-
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop_full_caseEmailUser(self):
1594+
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop_different_doc(self):
1595+
# Refers to Issue #1685
15991596
class User(Document):
16001597
id = IntField(primary_key=True)
16011598
name = StringField()

0 commit comments

Comments
 (0)